0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

串口数据错乱?从标志位设置入手

ZLG致远电子 2025-02-11 11:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

导读

在串口通信开发中,数据错乱是常见问题。本文将快速介绍串口标志位的作用及配置方法,帮助解决数据传输错误。

有用户反馈“串口应用层数据错乱、与发送端发送的字节数不匹配”,简单来说就是接收和发送的数据不对,而且还存在帧数据错乱的情况。经排查,是程序没用设置ISIG标志位设置引起的。本节以此为切入点进行展开,对串口设置的一些标志位进行简单说明。

1. c_cflag:可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬软流控等

1.1 波特率

4aba9ac6-e829-11ef-9434-92fbcf53809c.png

1.2 其它

4ad2ece8-e829-11ef-9434-92fbcf53809c.png

初始化c_flag时,不能直接对 c_cflag 成员进行赋值,而是需要通过“与”、“或”操作使用其中的某些选项,例如:

  • 设置硬件流控制

c_cflag |= CNEW_RTSCTS

无硬件流控制

c_cflag &= ~CNEW_RTSCTS

2. c_iflag:用于控制端口接收端的字符输入处理

4ae9ddb8-e829-11ef-9434-92fbcf53809c.png

禁用软件流控制是禁止上面的选项。

c_iflag &= ~(IXON | IXOFF | IXANY);

3. c_oflag:用于控制终端端口发送出去的字符处理

4b15f902-e829-11ef-9434-92fbcf53809c.png

因为现在终端的速度比以前快得多,所以大部分延时掩码几乎没什么用途。

启用输出处理需要在 c_oflag 成员中启用 OPOST 选项。

c_oflag |= OPOST;

使用原始输出,就是禁用输出处理,使数据能不经过处理过滤的完整地输出到串口。当 OPOST 被禁止,c_oflag 其它选项也被忽略。

c_oflag &= ~OPOST;

4. c_lflag:用于控制控制终端的本地数据处理和工作模式

4b2a6888-e829-11ef-9434-92fbcf53809c.png

4.1 选择规范模式

c_lflag |= (ICANON | ECHO | ECHOE);

4.2 选择原始模式

c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

5. c_cc:定义特殊控制特性

4b49c6d8-e829-11ef-9434-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据传输
    +关注

    关注

    9

    文章

    2082

    浏览量

    67200
  • 串口通信
    +关注

    关注

    34

    文章

    1657

    浏览量

    57675
  • 串口数据
    +关注

    关注

    0

    文章

    34

    浏览量

    14234
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM8使用串口接收中断时用不用清标志

    请问大家 串口 使用接收中断的模式。 接收完数据之后, 用不用清 标志什么的 ??? 我试过中断中没做清除标志
    发表于 05-08 06:10

    有关STM32串口收发标志的问题

    通过STM32的串口数据是需要判断发送是否完成,应该用while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);还是while
    发表于 03-30 18:34

    怎么在标志寄存器中设置读取

    尝试先做一些简单的事情)。数据表表示,在读取数据之前,我需要在标志寄存器中设置读取,并且我不必设置
    发表于 10-22 07:06

    TXE状态标志该位由硬件置

    TE标志要想使串口能够发送数据,必须置TE标志
    发表于 08-20 07:44

    用中断接收串口数据为什么会存在串口接收数据错乱的问题呢

    用中断接收串口数据为什么会存在串口接收数据错乱的问题呢?如何去解决?
    发表于 12-09 07:00

    STM32串口TXE和TC标志的相关资料推荐

    STM32 串口TXE和TC标志的理解我们发送数据的时候是先放在数据寄存器(TDR),然后在往移位寄存器里面丢,TXE就是用来判断我们的
    发表于 02-22 07:11

    上位机如何设置串口9位数据位/TB8

    串口多机通讯,上位机如何设置串口9位数据位/TB8**常用的串口数据位
    发表于 02-23 07:28

    单片机硬件定时器5ms会导致串口接收错乱

    120mhz单片机mpu6050的dmp很慢主板得接收另一块板子发送的数据包(帧头+数据+帧尾)主板需要定时读取dmp进行pid计算控制直立硬件定时器5ms会导致串口接收错乱??加长至
    发表于 08-02 10:48

    单片机复位标志设置与应用研究

    设置复位标志便于区分不同原因引发的复位,作为一种新技术被越来越多的新型单片机所采纳。例如Philips公司的P87LPC700和 P89LPC900系列、Freescale公司(原Motorola半导体部)的MC68HC05
    发表于 04-28 11:39 22次下载

    STM32串口空闲中断,中断标志无法清除

    STM32串口空闲中断,中断标志无法清除
    发表于 12-02 17:36 31次下载
    STM32<b class='flag-5'>串口</b>空闲中断,中断<b class='flag-5'>标志</b><b class='flag-5'>位</b>无法清除

    问题笔记:STM32串口数据位与校验

    问题:STM32移植freemodbus 后测试时,只能使用无校验 ,设置奇偶校验时无法与上位机通讯解决方法如果串口助手使用串口配置为:数据位8 停止
    发表于 12-24 18:44 19次下载
    问题笔记:STM32<b class='flag-5'>串口</b><b class='flag-5'>数据位</b>与校验<b class='flag-5'>位</b>

    STM32 串口TXE和TC标志的理解

    STM32 串口TXE和TC标志的理解我们发送数据的时候是先放在数据寄存器(TDR),然后在往移位寄存器里面丢,TXE就是用来判断我们的
    发表于 12-27 19:18 5次下载
    STM32 <b class='flag-5'>串口</b>TXE和TC<b class='flag-5'>标志</b><b class='flag-5'>位</b>的理解

    多机通讯设置TB8

    串口多机通讯,上位机如何设置串口9位数据位/TB8**常用的串口数据位
    发表于 12-29 19:31 1次下载
    多机通讯<b class='flag-5'>设置</b>TB8

    stm32串口接收中断触发原理

    配置串口接收中断使能:在初始化串口时,需要设置相应的控制寄存器来使能串口接收中断。这通常可以通过设置相应的
    发表于 01-17 15:42 9235次阅读
    stm32<b class='flag-5'>串口</b>接收中断触发原理

    串口中断需要清除标志吗,串口中断标志会自动清除吗

    在电子通信领域,串口中断作为一种重要的通信机制,广泛应用于各种嵌入式系统和计算机设备中。串口中断标志的管理,尤其是是否需要手动清除以及是否会自动清除,是理解和实现
    的头像 发表于 01-29 14:59 2985次阅读