STM32
直播中

HCPcry

8年用户 1201经验值
擅长:处理器/DSP
私信 关注
[问答]

STM32F103C8单片机是怎样与串口传感器对接上的

STM32F103C8单片机是怎样与串口传感器对接上的?遇到了哪些问题?

回帖(1)

屈鑫燕

2021-10-25 14:36:42
  背景说明:
  STM32上对接一款串口传感器,该串口采用串口如下
  波特率:115200
  停止位:1
  校验位:偶校验(Even)
  硬件流控:无
  数据位:8bit
  笔者使用STM32F103C8系列单片机,使用2路串口
  串口1:PA9 PA10 //打印调试数据
  串口2:PA2 PA3 //串口传感器通讯
  遇到问题说明:
  1、STM32串口1、2输出时,一直丢失第一个字节数据。
  2、STM32串口2与协议无法不一致,其效果如下文档 (CC 10 01 00 00 CC 1F) 实际接受(CC )
  Q1:STM32串口1、2输出时,一直丢失第一个字节数据。
  A1:
  增加如下代码中粗体字段,具体原因为stm32的usart的sr寄存器的TC初始化为1,导致第一次发送时,直接被后一个数据取代,故无法打印。
  int fputc(int ch, FILE *f)
  {
  USART_ClearFlag(USART1,USART_FLAG_TC);
  USART_SendData(USART1, (uint8_t) ch);
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  return (ch);
  }
  Q2:STM32串口2与协议无法不一致,其效果如下文档 (AA 10 01 00 02 AA 1F) 实际接受(AA 90 81 00 82 AA 9F )
  A2:其原因主要为奇偶校验位,查看数据手册stm32的蛇者数据长度是把校验位一并相加,故上图设置的数据长度8位,其实是7位y有效数据位,1位停止位。而接收端设置的是8位有效数据位,1位停止位。所以在发送的时候把校验位覆盖掉了最高位。
  将
  **
  USART_InitStructure.USART_WordLength = ***USART_WordLength_8b***;
  USART_InitStructure.USART_Parity = ***USART_Parity_Even***;
  **
  USART_InitStructure.USART_WordLength = ***USART_WordLength_9b***;
  USART_InitStructure.USART_Parity = ***USART_Parity_Even***;
  按如上设置即可
举报

更多回帖

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