STM32
直播中

李皓圳

7年用户 1035经验值
私信 关注
[问答]

如何保证STM32串口接收数据的完整性?

如何保证STM32串口接收数据的完整性?

回帖(1)

孙巍

2021-12-9 10:21:46

  • USART1挂载APB2上面,而USART2和USART3挂载在APB1上面(就这里没看,搞了大半天才发现挂载总线错了)




  • 两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作于全速(最高72MHz)。




上图引用  点击打开链接
     我们平时说的波特率9600.其实就是9600bit/s=(9600/8)Byte/s=1.2Byte/ms,这里1word=2Byte=16bit。
我们在串口接收中断函数中,调用USART_ReceiveData()函数。

uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* Receive Data */
  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}
   STM32中DR寄存器只有低9位(8:0)有效,其余高位是保留的。所以在进行寄存器赋值时,为了保证正确性和将来的兼容性,只取Data的低9位数据。所以出现了USARTx->DR = (Data & (uint16_t)0x01FF);这样的语句,假设不小心Data高位有值也能保证寄存器正确赋值。下面是实际项目中,判断串口接收数据是否完成的一个流程描述。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分