串口3的接收中断???

2019-07-20 15:12发布

//初始化IO 串口3
//bound:波特率
void USART3_Init(u32 bound)
{
        //GPIO端口设置
        GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;                                    
       
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能GPIOB时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART3时钟

        //串口3对应引脚复用映射
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3); //GPIOB10复用为USART3
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3); //GPIOB11复用为USART3
       
        //USART3端口配置
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; //GPIOB10与GPIOB11
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //速度50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
        GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化PB10,PB11

        //USART3 初始化设置
        USART_InitStructure.USART_BaudRate = bound;//波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
        USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式
        USART_Init(USART3, &USART_InitStructure); //初始化串口3
           USART_Cmd(USART3, ENABLE);      //使能串口3        
        USART_ClearFlag(USART3, USART_FLAG_TC);


        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启相关中断

        //Usart3 NVIC 配置
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//串口3中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x04;  //抢占优先级1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =0x03;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                            //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
}

void  USART3_SendData(u8 data)
{
    USART_SendData(USART3, data);        //通过库函数  发送数据
    while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)== RESET);  //等待发送完成。   检测 USART_FLAG_TC 是否置1;    //见库函数 P359 介绍
}

void USART3_SendString(u8 *p)
{
   while(*p)
   {
      USART3_SendData(*p++);
   }
}



void USART3_IRQHandler(void)                        //串口3中断服务程序
{
        u8 Res;

        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
         {
                //add my   code;   
         }
}


初始化  发送OK, 可是就是进不了接收中断,咋回事哈? 真是懵逼了。求教!!!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
正点原子
1楼-- · 2019-07-20 19:53
论坛搜索,参考代码一堆,慢慢对比
灰太狼小灰兔
2楼-- · 2019-07-20 21:02
正点原子 发表于 2017-4-13 18:49
论坛搜索,参考代码一堆,慢慢对比

是呀,很初级的问题, 不知道咋回事
szczyb1314
3楼-- · 2019-07-21 01:54
 精彩回答 2  元偷偷看……
无字情书
4楼-- · 2019-07-21 06:19
你把中断程序换成原子哥的代码试试
suan
5楼-- · 2019-07-21 08:36
 精彩回答 2  元偷偷看……
szczyb1314
6楼-- · 2019-07-21 10:48
 精彩回答 2  元偷偷看……

一周热门 更多>