请教一下stm32f3的串口配置

2019-07-20 19:27发布

本帖最后由 carvenl 于 2016-10-17 20:44 编辑

用的是nucleo stm32f302r8开发板,配置usart2,基本上是仿着原子哥的例程写的。然后将PA2(TX)和PA3(RX)短接,不停的从TX发数据,但RX收不到任何数据。调试的时候,一直没有进入接收中断,ISR寄存器的标志位也没有更新,RDR寄存器一直是0。
捕获.PNG
不知是什么地方的问题,贴上代码,希望大神能帮我看一下,感激不尽。

[mw_shl_code=c,true]void USART2_Init(u8 pclk,u32 buad)
{
        u16 DIV_Mantissa,DIV_Fraction;
        float USARTDIV;
   
        USARTDIV=(float)(pclk*1000000)/buad;//计算波特率
        DIV_Mantissa=USARTDIV; //整数部分
        DIV_Fraction=(USARTDIV-DIV_Mantissa)*16; //小数部分

        RCC->APB1ENR |= 1<<17;//使能串口2时钟
        RCC->AHBENR  |= 1<<17;//使能PA时钟
        GPIO_Set(GPIOA,2,MODE_AF,PUPD_PU,OTYPE_PP,OSPEED_HIG);//PA2
        GPIO_AF_Set(GPIOA,2,7);        //PA2,AF7
        GPIO_Set(GPIOA,3,MODE_AF,PUPD_PU,OTYPE_PP,OSPEED_HIG);//PA3
        GPIO_AF_Set(GPIOA,3,7);        //PA3,AF7
        RCC->APB1RSTR |= 1<<17;//重置串口2时钟
        RCC->APB1RSTR &= ~(1<<17);
        
        USART2->BRR = (DIV_Mantissa<<4) + DIV_Fraction;//波特率
        USART2->CR1 |= 1<<2;//使能接受
        USART2->CR1 |= 1<<5;//使能接受中断
        USART2->CR1 |= 1<<3;//使能发送
        NVIC_Set(USART2_IRQn,2,2);
        USART2->CR1 |= 1;          //使能串口
}[/mw_shl_code]






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。