配置的有问题吗?人麻了

error?ok?纳尼? 2023-09-02 17:24:41

#include "usart.h"

void Usart1_Config(uint32_t bond)
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//打开A端口时钟
    
    GPIO_InitTypeDef GPIO_InitStruct={0};
    //设置PA9为复用推挽输出
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//设置端口为复用模式
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//无上下拉电阻,即浮空
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
    GPIO_Init(GPIOA,&GPIO_InitStruct);
//    //配置PA10为复用输入
//    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//设置端口为复用
////    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
//    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉电阻,即浮空
////    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
//    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
//    GPIO_Init(GPIOA,&GPIO_InitStruct);
    
    //复用功能映射
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//PA9复用为串口1
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//PA10复用为串口1
    
    //串口配置 1.打开Usart1的时钟 2.1:232协议,1+8+0+1  2.2 波特率 2.3 接收发送使能
    RCC_AHB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//打开串口1时钟
    USART_InitTypeDef USART_InitStruct={0};
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件控制 
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8位数据长度
    USART_InitStruct.USART_Parity = USART_Parity_No;//无奇偶校验
    USART_InitStruct.USART_StopBits = USART_StopBits_1;//停止位1
    USART_InitStruct.USART_BaudRate = bond;//波特率
    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收和发送模式
    
    USART_Init(USART1,&USART_InitStruct);//初始化串口1
    USART_Cmd(USART1,ENABLE);//使能串口1
    
    //对串口1进行中断配置
    USART1_NVICConfig();
}
//对串口1进行中断配置
void USART1_NVICConfig(void)
{
    //配置中断源(开启串口1接收和空闲中断)
    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//    USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);
    //配置中断通道
    NVIC_InitTypeDef NVIC_InitStruct={0};
    NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;//中断通道
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//中断通道使能
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;//该通道的占先优先级
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;//次级优先级
    NVIC_Init(&NVIC_InitStruct);//初始化中断配置
}
//串口1的中断服务函数
struct Usart_massage Usart1_massage;
void USART1_IRQHandler(void)
{
    u8 temp;
    if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET){//若接收中断置位
        USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除接收中断标志位
        temp = USART_ReceiveData(USART1); //USART1->DR;保存数据
        USART_SendData(USART1,temp);
    }
//    if(USART_GetFlagStatus(USART1,USART_IT_IDLE)==SET){//若空闲中断置位(接收完成)
//        USART_ClearITPendingBit(USART1,USART_IT_IDLE); //清除空闲中断标志位
//        Usart1_massage.recv_flag = 1;//数据接收完成
//    }
}
    
int fputc(int ch,FILE *f)
{
    while((USART1->SR&0x40) == 0);//循环发送,直到数据发送完毕
    USART1->DR = (u8)ch;
    return ch;        
}有问题吗?

...全文
533 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

379

社区成员

发帖
与我相关
我的任务
社区描述
交流、活动分享、共进
学习方法程序人生 企业社区 北京·朝阳区
社区管理员
  • 猿如意官方账号
  • 璃白.
  • 一杯枸杞茶ya
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧