IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 利用空闲中断实现不定长数据的收发 -> 正文阅读

[嵌入式]利用空闲中断实现不定长数据的收发

利用空闲中断实现不定长数据的收发

一、空闲中断的特点

1.	在一帧数据传输结束后,通信线路将会维持高电平,这个状态称为空闲状态;
    
2.	当 CPU 检测到通信线路处于空闲状态时,且空闲状态持续时间大于一个字节传输时间时,空闲状态标志 IDLE 将由硬件置 1 。如果串口控制寄存器 CR1 中的 IDLEIE 位为 1 ,将会触发空闲中断 (IDLE 中断);
    
3.  由于空闲标志是在一帧数据传输完成后才置位,在有效数据传输过程中不会置位,因此借助空闲中断,可以实现不定长数据的收发。

二、空闲中断时序图

假设一帧数据由2 个字符构成,分别是 0xaa 、 0x55 ,传输的时序图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存失败,源站可能有防盗链机制,建议将图片保存下来直接上传下上传(iWG3yl0FK0cH-1632623238621)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923155133881.png)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923155133881.png)]

	从图中可以看到,在发送该帧数据之前和之后,数据线为高电平,处于 IDLE 状态。在该帧有效数据发送过程中,即 0xaa 字节与 0x55 字节之间,没有 IDLE 状态出现,这样利用 IDLE 状态就可以判断不定长数据的发送结束。

三、设计思路

1.使能 IDLE 中断,在串口 1 的中断服务程序 USART1_IRQHandler 中添加对 IDLE 中断的判断,该函数位于 stm32f4xx_it.c 文件;
    
2.设置传输模式为普通模式,启动 DMA 传输。串口一旦接收到数据,则触发 DMA 操作,将数据存放到用户定义的接收缓冲区;
    
3.当一帧数据发送完成后,线路处于 IDLE 状态,将触发 IDLE 中断,调用 IDLE 中断回调函数,设置数据接收完成标志;
    
4.主程序检测到接收完成标志置位后,将接收的一帧数据原样发回到PC ,并禁能 DMA ,以触发 DMA 中断。 DMA 中断将调用接收中断回调函数,在回调函数中重新启动 DMA 传输。

四、STM32CubeMX 配置

1、串口DMA配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IaIWTyDC-1632623238625)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923160102766.png)]

2、设置串口 接收 的 DMA 参数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LUSFr0RH-1632623238627)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923160236159.png)]

3、设置串口 发送 的 DMA 参数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQkuVFF5-1632623238632)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923160340385.png)]

4、使能串口中断及DMA 中断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VqJRNIjS-1632623238637)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923160432650.png)]

五、程序编写(一)

1、添加空闲中断的处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4i28Tq7Y-1632623238638)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923160714624.png)]

2、添加用户宏定义及变量定义,添加用户初始化代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVpYdtde-1632623238639)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923160727015.png)]

3、编写用户应用代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3JQvh5OW-1632623238640)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923161240231.png)]

4、编写回调函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pAenvUc8-1632623238641)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923161325355.png)]

5、添加函数声明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-px5U3J7x-1632623238642)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210923161413070.png)]

6、下载调试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIYpHdj4-1632623238643)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926092046479.png)]

六、程序编写(二)

1、添加空闲中断的处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8equnsu-1632623238645)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926100650752.png)]

2、添加用户宏定义及变量定义,添加用户初始化代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MalnykQb-1632623238646)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926092433139.png)]

3、编写用户应用代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZScqVON3-1632623238647)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926100832693.png)]

5、编写回调函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52NP4zA8-1632623238648)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926102259851.png)]

4、下载调试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4wzlU4bU-1632623238649)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926102345264.png)]

七、程序编写(三)

1、添加用户宏定义及变量定义,添加用户初始化代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVyzobjx-1632623238651)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926092433139.png)]

2、编写用户应用代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jXPl5MG-1632623238652)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926092744121.png)]

3、编写回调函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTLoJ3TR-1632623238655)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926093920122.png)]

4、下载调试

在这里插入图片描述

复盘一下:
第一种方法是电子科技大学的一个老师课件里的,我照着写了一下,总会出现好多bug…,解决方法:在空闲中断回调函数那停止一下DMA传输就好了。
第二种是请教同事写的,实际项目中也用的比较多。
第三种是我详细研究了一下,看了看回调函数的实现过程,最后改良了一下,代码比较简洁,以后做项目的时候用一下试试!不知道大家喜欢哪一种?
另外我用typora写好笔记,上传后图片显示不出来…

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:15:39  更:2021-09-27 14:17:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:19:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码