本帖最后由 carvenl 于 2016-10-17 20:44 编辑
用的是nucleo stm32f302r8开发板,配置usart2,基本上是仿着原子哥的例程写的。然后将PA2(TX)和PA3(RX)短接,不停的从TX发数据,但RX收不到任何数据。调试的时候,一直没有进入接收中断,ISR寄存器的标志位也没有更新,RDR寄存器一直是0。
不知是什么地方的问题,贴上代码,希望大神能帮我看一下,感激不尽。
[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]
一周热门 更多>