15.21、 串口高级例程之Printf中断收发实验

上传人:紫*** 文档编号:133013888 上传时间:2020-05-23 格式:PDF 页数:8 大小:371.27KB
返回 下载 相关 举报
15.21、 串口高级例程之Printf中断收发实验_第1页
第1页 / 共8页
15.21、 串口高级例程之Printf中断收发实验_第2页
第2页 / 共8页
15.21、 串口高级例程之Printf中断收发实验_第3页
第3页 / 共8页
15.21、 串口高级例程之Printf中断收发实验_第4页
第4页 / 共8页
15.21、 串口高级例程之Printf中断收发实验_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《15.21、 串口高级例程之Printf中断收发实验》由会员分享,可在线阅读,更多相关《15.21、 串口高级例程之Printf中断收发实验(8页珍藏版)》请在金锄头文库上搜索。

1、 串口高级例程之串口高级例程之Printf中断收发实验中断收发实验 前面两节学习了STM32的常用接口UART串口的基本使用 之前的讲解都是串口的基本使用方 法 效率比较低 本章节我们学习在神舟系列STM32开发板上使用串口接收中断和发送中断以及使用串口接收中断和发送中断以及 FIFO缓存来实现高效率的串口数据收发缓存来实现高效率的串口数据收发实例 本次串口实例借鉴了著名的操作系统VxWorks操作系统的串口相关实现方法 做过驱动的人都 知道 在驱动中频繁的使用Printf函数不但会降低系统的效率 而且可能会使系统崩溃 原因是Printf 在串口打印输出是需要等待 中断中的长时间等待是致命的

2、所以本章节我们一起来研究如何使本章节我们一起来研究如何使 Printf函数实现函数实现0等待 以及如何实现缩短串口接收中断处理速度等待 以及如何实现缩短串口接收中断处理速度 意义与作用意义与作用 目前串口仍然是MCU微控制器必不可少的接口之一 串口的使用对于我们开发调试过程中的作 用是非常之大 可以用来查看 打印以及输入相关信息 是我们在嵌入式开发中最先与中央处理器 通信的接口 学习好串口的功能 对于后续神舟IV号的各个例程的调试具有至关重要作用 鉴于前面章节已经对串口基础知识有了讲解 相关知识请参考实验4和实验5 本章节我们学习使用串口接收中断和发送中断以及使用串口接收中断和发送中断以及FI

3、FO缓存来实现高效率的串口数据收发缓存来实现高效率的串口数据收发实 例 我们一起来研究如何使Printf函数实现0等待以及如何实现缩短串口接收中断处理速度 现讲一段经历 本人曾经在调试板件系统时 需要将某一接口 标记为接口A 的数据消息打印 出来以Debug 接口A的特点是数据收发具有突发性和不持续性 当时计算过串口在115200波特率下 根本来不及打印接口A的突发数据 而且很担心使用Printf函数对系统造成不良影响甚至BUG不能重 现 带着怀疑的态度添加了Printf函数来Debug 事实证明系统的运行几乎没有受到影响 而且串口 打印的数据几乎没有丢失 我感到很是惊讶 直到一次调试中我断开

4、了接口A的连接后 串 口依然打印接口A的消息数据持续了十几秒 我对VxWorks操作系统的串口相关实现方法产生了浓厚 的兴趣 相比之前调试Linux驱动时由于串口输出导致其他接口中断处理不及时而丢失产生了鲜明的 对比 本章节我们以类似的方法在神舟系列STM32开发板上实现串口接收中断和发送中断以及串口接收中断和发送中断以及FIFO 缓存来实现高效率的串口数据收发缓存来实现高效率的串口数据收发 该方法在后续的该方法在后续的USB调试和以太网口程序调试时很实用 调试和以太网口程序调试时很实用 实验原理实验原理 本实验的核心是本实验的核心是 对于串口串口 Printf 输出输出 为了做到使 Prin

5、tf 函数实现 0 等待 我们在底层使用 Buffer 缓存来自 Printf 的数据 Buffer 按照 FIFO 先入先出的结构组织 当 Printf 有数据发送时 其底层的发送函数并不是 真正的串口发送 而只是将数据写入 FIFO 并使能串口发送中断后中便退出 这个操作时 RAM 的读 写操作 执行速度很快 所以不需要等待 唯一可能影响速度的是 FIFO 的深度 如果 FIFO 较小而 实际要打印的数据量很大则 FIFO 填满以后需要等待 所以可以根据实际情况设置 FIFO 的深度 本 次在神舟系列 STM32 开发板上的实验中发送缓存 FIFO USART Tx Buffer 的深度为

6、 256 字节 用户可以自己修改其大小 而实际的发送数据是在串口发送中断中完成的 对于串口输入串口输入 我们在在中断中使用 Buffer 缓存串口收到的数据 默认是收到回车符时或者收 到的数据填满缓冲区时通过全局变量 USART Rx Done 通知前台程序 这样中断里的程序简单则 处理速度快 中断可以快速返回 本次在神舟系列 STM32 开发板上的实验中接收缓存区 USART Rx Buffer 的大小为 20 字节 用户可以自己修改其大小 本实验设计灵活 可以支持串口1或者串口2 只需修改 Printf h 文件的以下语句 以上定义编译结果为使用神舟系列STM32开发板上的串口2 推荐 以

7、上定义编译结果为使用神舟系列STM32开发板上的串口1 注 本实验的串行通信基础知识串行通信基础知识 以及串口的原理和特点 串口的原理和特点 以及 STM32串口串口 原理与前面 错误 未找到引用源 错误 未找到引用源 对应章节完全相同 此处不再重复 请参考 错误 未找 到引用源 错误 未找到引用源 对应章节 硬件设计硬件设计 请参阅请参阅 错误 未找到引用源 错误 未找到引用源 章节章节 由于 STM32 的管脚数量有限 所以其串口管脚为多功能复用管脚 为了不同功能硬件不相互影 响 开发板上使用跳线来选择对应功能 在做此次试验前需要检查神舟 IV 号开发板上的跳线位置是 否正确 如果连接串口

8、 2 推荐 默认出厂跳线既连接好了串口 2 则需要将 JP4 的 2 3 用跳帽短 接 如图错误 未找到引用源 错误 未找到引用源 所示 如果连接串口 1 不推荐 默认出厂跳线不是连接串口 1 则需要将 JP3 和 JP5 的 2 3 用跳帽短接 如图错误 未找到引用源 错误 未找到引用源 所示 图表 1 串口 2 跳线位置图 图表 2 串口 1 跳线位置图 跳线连接正确后使用交叉母对母串口线连接神舟IV号开发板的串口2 推荐 到PC或USB转串口 线 下面可以开始软件设计了 软件设计软件设计 这一章节我们学习使用串口接收中断和发送中断以及使用串口接收中断和发送中断以及FIFO缓存来实现高效率

9、的串口数据收发缓存来实现高效率的串口数据收发 实例 我们一起来研究如何使Printf函数实现0等待以及如何实现缩短串口接收中断处理速度 本实验设计灵活 可以支持串口1或者串口2 只需修改 Printf h 文件的以下语句 以上定义编译结果为使用神舟系列STM32开发板上的串口2 推荐 以上定义编译结果为使用神舟系列STM32开发板上的串口1 关 于 STM32 的 USART 的 库 函 数 实 现 主 要 是 在 STM32F10 x StdPeriph Driver 库 的 stm32f10 x usart c 和 stm32f10 x usart h 两个文件里 以V3 3 0版本的库为

10、例 它们位于 STM32F10 x StdPeriph Lib V3 3 0 Libraries Stm32F10 x StdPeriph Driver 目录的 src 和 inc 文件夹里 前面章节已经有所讲解 本章节不再讲述 我们自顶向下剖析分解 首先是主程序主程序MAIN函数函数 主程序MAIN函数首先1 配置中断向量表 然后2 初始化串口 接着打印提示消息 最后进入 While循环等待串口接收数据完成或缓存区溢出 将其打印 1 配置中断向量表 配置中断向量表 根据宏定义来使能串口1或串口2的中断 2 初始化串口 初始化串口 根据宏定义初始化串口1或串口2的参数 并使能接收和发送中断 3

11、 串口 串口Printf发送的实现发送的实现 首先 完成串口发送单个字节的函数 在 Printf c 文件的有如下的宏定义 这是为了兼容不 同的编译平台 图表 3 串口 PUTCHAR PROTOTYPE 宏定义 其实现如下 其 USART StoreBufferData 函数的实现如下 原理原理 对于串口串口 Printf 输出输出 为了做到使 Printf 函数实现 0 等待 我们在底层使用 Buffer 缓存 来自 Printf 的数据 Buffer 按照 FIFO 先入先出的结构组织 当 Printf 有数据发送时 其底层的发送 函数并不是真正的串口发送 而只是将数据写入 FIFO 并

12、使能串口发送中断后中便退出 这个操作时 RAM 的读写操作 执行速度很快 所以不需要等待 唯一可能影响速度的是 FIFO 的深度 如果 FIFO 较小而实际要打印的数据量很大则 FIFO 填满以后需要等待 所以可以根据实际情况设置 FIFO 的深 度 本次在神舟系列 STM32 开发板上的实验中发送缓存 FIFO USART Tx Buffer 的深度为 256 字节 用户可以自己修改其大小 而实际的发送数据是在串口发送中断中完成的 4 串口接收的实现 串口接收的实现 串口接收相关主要是在串口接收中断中调用 USART GetInputString 函数接收并缓存串口数据 支持退格键 原理原理

13、 对于串口输入串口输入 我们在在中断中使用 Buffer 缓存串口收到的数据 默认是收到回车符时 或者收到的数据填满缓冲区时通过全局变量 USART Rx Done 通知前台程序 这样中断里的程序 简单则处理速度快 中断可以快速返回 本次在神舟系列 STM32 开发板上的实验中接收缓存区 USART Rx Buffer 的大小为 20 字节 用户可以自己修改其大小 注意上述函数中变量 USART Rx Done 与前台 MAIN 函数中语句的对应 5 串口中断处理的实现 串口中断处理的实现 首先 根据宏定义决定是使用串口 1 中断还是或串口 2 中断 串口1中断还是或串口2中断统一如下 前面已

14、经讲解了在串口接收中断中调用的 USART GetInputString 函数 对于发送 前面 3 串口 串口Printf发送的实现发送的实现 讲解时说 而实际的发送数据是在串口发送中断 中完成的 如果发送缓冲区非空则发送数据 否则如果发送缓冲区已经为空则禁止串口发送中断 发 送中断将在缓冲区非空时由 USART StoreBufferData 打开 USART SendBufferData 函数的 具体实现如下 下载与验证下载与验证 神舟IV号光盘 源码 目录包含本实验的工程源码 在神舟IV号光盘 源码 21 串口高级例程之Printf 中 断 收 发 实 验 rar Project 21

15、UART串 口 高 级 例 程 之Printf中 断 收 发 实 验 EWARMv5 STM32F107VC ARMJISHU Exe目录下的ARMJISHU 串口高级例程之Printf中断收发实 验 hex文件即为前面我们分析的串口高级例程之Printf中断收发实验编译好的固件 我们可以直接将 固件下载到神舟IV号开发板中 观察运行效果 如果使用JLINK下载固件 请按错误 未找到引用源 错误 未找到引用源 错误 未找到引用源 错误 未找到引用源 下载固件到神舟IV 号开发板小节进行操作 如果使用USB下载固件 请按错误 未找到引用源 错误 未找到引用源 错误 未找到引用源 错误 未找到引用

16、源 小节进行操作 如果使用串口下载固件 请按错误 未找到引用源 错误 未找到引用源 错误 未找到引用源 错误 未找到引用源 小节进行操作 如果在IAR开发环境中 下载编译好的固件或者在线调试 请按错误 未找到引用源 错误 错误 未找到引用源 错误 未找到引用源 未找到引用源 小节进行操作 如果在MDK开发环境中 下载编译好的固件或者在线调试 请按错误 未找到引用源 错误 错误 未找到引用源 错误 未找到引用源 未找到引用源 小节进行操作 实验现象实验现象 将固件下载在神舟IV号STM32开发板后 用随板配置的串口线连接神舟IV号串口2与电脑的串 口 打开超级终端 并按如下参数配置串口 注意神舟 IV 号开发板串口跳线连接是否正确 图表 4 串口 2 跳线位置图 图表 5 串口 1 跳线位置图 本实验使用串口接收中断和发送中断以及使用串口接收中断和发送中断以及FIFO缓存来实现高效率的串口数据收发缓存来实现高效率的串口数据收发实 例 下载固件后 可以在串口输入信息后按回车键 其实现效果如下图所示 如果选择的是串口1 实验效果如下 如果选择的是串口2 实验效果如下

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 电气安装工程

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号