用F4 HAL库的串口发现一个很扯的问题,USART->SR寄存器值初始为0x0000 00C0,如图1所示 图 1.USART->SR寄存器初始值 接收到串口数据后,进入串口中断,此时USART->SR寄存器值变为0x0000 00F0,,如图2所示 图 2.接收中断后,USART->SR寄存器值 然后单步运行,进入官方HAL_UART_IRQHandler()函数,一进入 USART->SR寄存器值就变为0x0000 00C0,也就是说RXNE位被清除了!!!!如图三所示 图3. 刚进入HAL_UART_IRQHandler函数,USART->SR寄存器值 下面附带SR寄存器映射图 有没有大侠遇到过相似的问题的?具体怎么回事? |
再看中断函数,先读的寄存器的USART_SR_PE 、USART_SR_FE、USART_SR_ORE 、USART_SR_NE位。再读USART_SR_RXNE位,如下图
程序能执行到UART_Receive_IT(huart);语句,说明USART_SR_RXNE位的值是1.
真要观察一个寄存器的值,可以用指针或变量去读取该寄存器的值,而不是依赖编译器的那些便捷窗口。
ç¶æå¯åå¨ (USART_SR)
UART in mode Receiver
你这个文档怕是有错吧,图中SR寄存器有效位明显处于低八位,数据怎么能跑到高八位?
另外,这个读取程序是STM32官方自带的,没做一丝改变。
多说无益