stm 32 串口通信

本篇文章主要是 解决自己对串口通信校验方式的一些疑惑
文章主要是对奇偶校验位 进行分析
首先我们得对串口数据包的基本组成 有一个大概的了解

在这里插入图片描述
1.起始位 :由一个逻辑0的数据位表示(第一个低电平)
2.结束位 :由 0.5,1,1,5,2个逻辑的数据位表示(高电平)
3.有效数据位:紧跟着起始位的就是有效数据位,长度为5,6,7或8位长
4.校验位 :可选,目的为数据抗干扰性,
校验方式 :
奇偶校验需要一位校验位,即使用串口通信的方式2或方式3(8位数据位+1位校验位)。
奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。

即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。

以发送字符:10101010为例

在这里插入图片描述
在这里插入图片描述
偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。

即:如果传输字节中1的个数是偶数,则校验位为“0”,奇数相反。

还是以发送字符:10101010为例
在这里插入图片描述
数据和校验位发送给接受方后,接收方再次对数据中1的个数进行计算,如果为奇数则校验通过,表示此次传输过程未发生错误。如果不是奇数,则表示有错误发生,此时接收方可以向发送方发送请求,要求重新发送一遍数据。
优缺点:

奇偶校验的检错率只有50%,因为只有奇数个数据位发生变化能检测到,如果偶数个数据位发生变化则无能为力了╮(╯﹏╰)╭
奇偶校验每传输一个字节都需要加一位校验位,对传输效率影响很大。
奇偶校验只能发现错误,但不能纠正错误,也就是说它只能告诉你出错了,但不能告诉你怎么出错了,一旦发现错误,只好重发。
虽然奇偶校验有很多缺点,但因为其使用起来十分简单,故目前仍被广泛使用。

应用:

如何用编程确定一个字节中“1”个数的奇偶性?我们可以利用二进制数相加的特点:

0+0=0、1+0=1、1+1=0

可以看出,如果我们将一个字节的所有位相加

有奇数个“1”的字节的和为1
有偶数个“1”的字节的和为0
由此即可通过编程完成判断。实际应用中,实现方法很多,但这是相对简单的一种,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32串口通信是MCU最基本的通信方式之一。串口通信是一种串行通信方式,与并行通信相对应。在STM32中,串口通信主要通过USART模块实现。USART是一种通用的同步/异步收发器,它包含了用于串口通信的相关寄存器和功能。通过配置USART的寄存器,可以实现不同的串口通信参数设置,如波特率、数据位数、停止位数等。在STM32中,常用的串口通信引脚是USART1、USART2等。为了实现串口通信,可以使用USB转串口模块,其中常用的电平转换芯片有CH340、PL2303、CP2102、FT232等。这些芯片可以将USB接口转换为串口接口,实现设备与电脑之间的通信。 #### 引用[.reference_title] - *1* *2* [STM32-串口通信详解](https://blog.csdn.net/qq_44016222/article/details/123280806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【stm32串口通信](https://blog.csdn.net/weixin_51914919/article/details/123320229)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值