stm32怎么用串口接收不定长数据

LYuer_ 2018-07-02 04:36:52
网上查了资料,说用USART_IT_IDLE这个语句进行一帧的中断,IDLE中断的依据是一个字节的空闲位加上下一位是起始位,就产生中断。查到这里问题就来了,起始位怎么确定呢?一帧数据的起始位不是自己定义的么?那IDLE又怎么判断呢?是需要特别设置起始位么?
还有,不定长数据接收为什么需要DMA跟IDLE结合?还是我查到的都不对,应该是别的方法,期待大神路过~
...全文
601 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2018-07-06
  • 打赏
  • 举报
回复
有些串口模块是自动识别 idle 的。所谓 idle 就是连续 10 比特 1。因为在 1个起始位,8个数据位,无奇偶位,1个停止位的帧中,至少有一个起始位 0,所以连续发送数据时,不会是 idle 状态。

你可以轮询 idle 或设置 idle 中断。之后就开始接收。硬件模块在接收中是自动检测起始位的。

DMA 不是必需的,因为串口通讯很慢,一般单片机中软件传输也来得及。

如果你是 GPIO 软件模拟串口接收,那就在检测到 10 个 1 之后,就轮询等待 0(起始位)。然后开始采样其他比特。
DIYmingong 2018-07-05
  • 打赏
  • 举报
回复
新手来学习,谢谢前辈的知识共享
Votangroom 2018-07-03
  • 打赏
  • 举报
回复
直接检测枕头枕尾不行么?
dceacho 2018-07-02
  • 打赏
  • 举报
回复
引用
起始位怎么确定呢?一帧数据的起始位不是自己定义的么?那IDLE又怎么判断呢?是需要特别设置起始位么?


这里的起始位是是通信底层的起始位不是协议层的起始字节标记,UART中起始位就是一个低电平信号,持续时间就是一个位长
某个字节发送完成后TX线会保持高电平, 发送下一个字节时会先发一个低电平也就是起始位, IDLE中断就是判断这两者间的时间长度,如果很长就说明两次数据间有个停顿

引用
为什么需要DMA跟IDLE结合?

这个我也不知道
LYuer_ 2018-07-02
  • 打赏
  • 举报
回复
还有,什么是USRAT空闲总线中断接收?

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧