Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2937|回复: 0

08-单片机发送数据之缓存管理,DMA

[复制链接]

56

主题

56

帖子

224

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
224
发表于 2020-9-21 09:42:47 | 显示全部楼层 |阅读模式



1. 前言
在单片机通信项目中,经常会用到发送数据,大家有没有想过什么方式才是最优的方式?
大家是否想过有没有什么标准的方案可以解决一切可能?
2. 基本应用
1.创建一个缓存区
819239-20200822210117023-287906759.png

819239-20200822210124673-1043888605.png



2.串口接收的数据插入缓存,每隔500ms插入数据到缓存
819239-20200822210138062-2092552226.png



3.没有在中断发送数据,提取缓存数据,执行中断发送
819239-20200822210151121-1228708225.png



4. 测试
819239-20200822210206929-1462752385.png



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

4.扩展(加入时间间隔-方式1)
以上程序有个问题:每条数据之间基本上没有时间间隔
只要发送完了上一条,立马发送下一条

819239-20200822210244167-1680027037.png



819239-20200822210251020-1253167058.png



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

5.扩展(加入时间间隔-方式2)
1.在定时器里面每隔20ms提取一次数据,打开串口发送中断
819239-20200822210324035-1680012789.png



2.串口中断发送数据
819239-20200822210336649-1919866227.png



3.其它地方只需要插入数据即可
819239-20200822210349494-1826543486.png



6.DMA发送
1.配置串口以DMA方式发送数据
819239-20200822210411987-2081425272.png



2.配置DMA
819239-20200822210423897-1353749219.png



3.如果DMA没有发送数据,则重新设置DMA
819239-20200822210436003-1522296640.png



4.测试
819239-20200822210449786-875332753.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2020-10-31 19:51 , Processed in 0.095458 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表