串口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条回答
suan
1楼-- · 2019-07-21 16:23
szczyb1314 发表于 2017-4-14 15:08
不知道你看的原子的那个程序是这样子配置的。我的F1都是一个推挽复用输出,一个浮空输入的
GPIO_InitStr ...

串口.png
这是原子写的,串口的代码,但是可以用串口没有问题
我也有些疑惑,为什么可以
F4的板子的
灰太狼小灰兔
2楼-- · 2019-07-21 21:55
suan 发表于 2017-4-14 15:24
这是原子写的,串口的代码,但是可以用串口没有问题
我也有些疑惑,为什么可以
F4的板子的

对呀,我就是按着原子哥的代码改过来的,发送正常,接收就不正常了
suan
3楼-- · 2019-07-21 23:51
 精彩回答 2  元偷偷看……
suan
4楼-- · 2019-07-21 23:51
 精彩回答 2  元偷偷看……
灰太狼小灰兔
5楼-- · 2019-07-22 05:23
suan 发表于 2017-4-14 23:36
啊不对,你的引脚什么的都没问题,为什么不行
我弄得串口2的也是两个推挽输出也没有问题了
你的是什么芯 ...

407ZGT6哈1
灰太狼小灰兔
6楼-- · 2019-07-22 10:17
 精彩回答 2  元偷偷看……

一周热门 更多>