STM32串口接收数据接收是否超时,如何保证接收完成

  • USART1挂载APB2上面,而USART2和USART3挂载在APB1上面(就这里没看,搞了大半天才发现挂载总线错了)
  • 两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作于全速(最高72MHz)。

STM32串口接收数据接收是否超时,如何保证接收完成_第1张图片 

上图引用  点击打开链接

     我们平时说的波特率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高位有值也能保证寄存器正确赋值。
下面是实际项目中,判断串口接收数据是否完成的一个流程描述。

STM32串口接收数据接收是否超时,如何保证接收完成_第2张图片

你可能感兴趣的:(STM32串口接收数据接收是否超时,如何保证接收完成)