STM32 串口及奇偶校验问题

背景说明:
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***;

按如上设置即可

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值