你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32串口接收硬件FIFO的实现

[复制链接]
wjandsq 发布时间:2017-1-23 13:29
本帖最后由 wjandsq 于 2017-1-25 12:59 编辑

众所周知,STM32串口通讯,接收及发送都没有设计硬件FIFO,这对大部分程序员来说,算是一个硬伤。但实际上,由于STM32串口可以利用DMA收发,这样比固定16字节的FIFO更灵活。


在编写串口接收的bsp层代码时,同时启动DMA接收和空闲中断,就可以实现一个硬件接收缓冲,在空闲中断中,
实现数据从硬件接收缓冲的读取。

串口接收bsp层接收缓冲两层结构
--第一层FIFO硬件接收缓冲 (第一层硬件FIFO接收缓冲,利用DMA自动传输,不占用CPU时间,一般大小可设置为16-1024字节)
--第二层FIFO软件接收缓冲 (第二层软件FIFO接收缓冲,在DMA传输完毕中断中处理,缓冲可设置的比较大,一般是1024~8192字节)



评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 1 评论15 发布时间:2017-1-23 13:29

举报

15个回答
zero99 回答时间:2017-1-23 13:32:45
这是个讨论帖?
wjandsq 回答时间:2017-1-23 13:33:26
但实际上,由于STM32串口可以利用DMA收发,这样比固定16字节的FIFO更灵活。
wjandsq 回答时间:2017-1-23 13:34:03
说的是实现思路
wjandsq 回答时间:2017-1-23 13:38:45
同时启动DMA接收和空闲中断,就可以实现一个硬件接收缓冲,空闲中断中,实现数据从硬件接收缓冲的读取。
wjandsq 回答时间:2017-1-23 13:42:42
在3至10Mbps串口通讯的情况下,只有这一个办法。逐个字符中断式接收来不及。
jcx0324 回答时间:2017-1-23 13:54:19
数据流大用DMA比较舒服的,比如发送DMX512的数据
wjandsq 回答时间:2017-1-23 14:01:37
发送一般没有问题,这里主要说接收。波特率低的话,中断可以。波特率高的话,如果是5Mbps,2.2微秒需要接收一个11位串口字符,中断方式显然不现实。
wjandsq 回答时间:2017-1-23 14:11:53
HAL库的串口中断函数,并没有认真考虑DMA和空闲中断,非常不专业。
wjandsq 回答时间:2017-1-23 14:17:21
中断函数应该展开(高速收发仅打开发送完成中断和空闲中断),DMA中断应该跟根据用户定义存在别名。
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版