08-单片机模块化程序: 单片机发送数据之缓存管理,DMA

本文探讨了在单片机通信项目中如何优化数据发送,提出了使用缓存区和中断处理的策略。通过创建缓存并在串口接收时将数据插入,确保数据有序发送。此外,介绍了两种加入时间间隔的方法,分别是通过主循环延时和定时器中断提取数据。最后,提到了利用DMA(直接内存访问)进行更高效的发送。这些方法适用于不同规模的项目,提高了单片机通信的稳定性和效率。
摘要由CSDN通过智能技术生成

资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git

点击加入群聊【单片机,物联网,上位机】:ESP8266开发交流群

说明1:知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系!

说明2:学的是思想,而非程序!此代码思路适用于所有的单片机。

说明3:学会以后,下面的代码可能会跟你一辈子!

说明4:这一系列文章是为大幅度裁剪本人博客文章!使博客文章更有条理。便于推其它教程!

 

1. 前言

 在单片机通信项目中,经常会用到发送数据,大家有没有想过什么方式才是最优的方式?
大家是否想过有没有什么标准的方案可以解决一切可能?

2. 基本应用

 1.创建一个缓存区

 

 

 

 

 

 

 

 

 

2.串口接收的数据插入缓存,每隔500ms插入数据到缓存

 

 

 

 

3.没有在中断发送数据,提取缓存数据,执行中断发送

 

 

 

 

4. 测试

 

 

 

 

3.说明

上面的程序实际上还是使用中断发送数据,只不过数据是先存入缓存,然后从缓存里面取出来以后再发送.
以上发送数据程序基本上适用于各种大大小小的项目.

 

4.扩展(加入时间间隔-方式1)

以上程序有个问题:每条数据之间基本上没有时间间隔
只要发送完了上一条,立马发送下一条

 

 

 

 

 

 

 

 

 

发送完数据以后设置一个变量为20,该变量在定时器每隔1ms减一,
等到减到0以后才会再次提取发送数据.
但是上面的发送时间受主循环延时的影响.

 

5.扩展(加入时间间隔-方式2)

1.在定时器里面每隔20ms提取一次数据,打开串口发送中断

 

 

 

 

2.串口中断发送数据

 

 

 

 

3.其它地方只需要插入数据即可

 

 

 

 

6.DMA发送

1.配置串口以DMA方式发送数据

 

 

 

 

2.配置DMA

 

 

 

 

3.如果DMA没有发送数据,则重新设置DMA

 

 

 

 

4.测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值