硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6753|回复: 21
收起左侧

[客户分享] 分享基于F103单片机的串口空闲中断+DMA实现数据不定长接收以及DMA发送

  [复制链接]

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2019-8-15 21:18:40 | 显示全部楼层 |阅读模式
本帖最后由 sanit 于 2019-8-16 11:28 编辑

经常有人在群里咨询串口空闲中断怎么用,怎么结合DMA实现不定长数据的收发。今天抽空写了个,分享给大家。由于时间比较匆忙,如有BUG还请指出,多多包涵。
版主已经帮忙把病毒清理了,杀毒软件把xxxx.html文件当病毒了。。。

USART_DMA_IDLE.rar

728.89 KB, 下载次数: 719

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2019-8-16 00:49:17 | 显示全部楼层
非常感谢
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

积分
16
发表于 2019-8-16 08:09:43 | 显示全部楼层
非常感谢
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2019-8-16 08:37:32 | 显示全部楼层
Snipaste_2019-08-16_08-37-18.png
呃。。。。。。
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2019-8-16 08:39:25 | 显示全部楼层

额,我这边显示正常啊?什么情况
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2019-8-16 09:42:30 | 显示全部楼层
将病毒清理了,杀毒软件把xxxx.html文件当病毒了。。。。

USART_DMA_IDLE.rar (728.89 KB, 下载次数: 768)

回复

使用道具 举报

23

主题

1403

回帖

1472

积分

至尊会员

积分
1472
发表于 2019-8-16 10:36:27 | 显示全部楼层
eric2013 发表于 2019-8-16 09:42
将病毒清理了,杀毒软件把xxxx.html文件当病毒了。。。。

不错不错,服务到位

代码不规范,亲人两行泪!
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2019-8-16 11:04:31 | 显示全部楼层
第一次知道stm32的串口还有个空闲idle中断。。。。这样子,判断一帧数据就可以交给硬件了。

多问一个,stm32的串口需要多久(多少ms)才会认定当前是空闲idle呢?
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2019-8-16 11:24:32 | 显示全部楼层
caicaptain2 发表于 2019-8-16 11:04
第一次知道stm32的串口还有个空闲idle中断。。。。这样子,判断一帧数据就可以交给硬件了。

多问一个,s ...

空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个byte,如果一直是低电平是不会触发空闲中断的(会触发break中断)。
回复

使用道具 举报

5

主题

23

回帖

38

积分

新手上路

积分
38
发表于 2019-8-16 11:25:06 | 显示全部楼层
caicaptain2 发表于 2019-8-16 11:04
第一次知道stm32的串口还有个空闲idle中断。。。。这样子,判断一帧数据就可以交给硬件了。

多问一个,s ...

是一帧数据发完了就产生Idle,可以算的
回复

使用道具 举报

5

主题

23

回帖

38

积分

新手上路

积分
38
发表于 2019-8-19 16:55:43 | 显示全部楼层
基本可实现在串口调试助手里发几个数显示几个数,但是有个疑问:你给的历程里面,TX通道DMA配置中, DMA_Initstructure.DMA_BufferSize = 0;为啥设置为0?
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2019-8-19 22:01:09 | 显示全部楼层
ZSR20181017 发表于 2019-8-19 16:55
基本可实现在串口调试助手里发几个数显示几个数,但是有个疑问:你给的历程里面,TX通道DMA配置中, DMA_In ...

这是发送通道,配置好之后不需要通过DMA发送数据,所以个数就设置成0了。
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
发表于 2020-1-13 13:26:31 | 显示全部楼层
感谢分享,下载下来学习一下,非常感谢分享这种实用的代码,让我们这些初学者能够阅读学习
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2020-1-15 16:34:04 | 显示全部楼层
刚好有个项目需要这个功能,参考下,感谢楼主慷慨分享。
回复

使用道具 举报

3

主题

58

回帖

67

积分

初级会员

积分
67
发表于 2020-1-17 18:14:30 | 显示全部楼层
对于F1和F4,RTE(classic)环境下CMSIS的串口驱动用起来超爽
回复

使用道具 举报

3

主题

75

回帖

84

积分

初级会员

积分
84
发表于 2020-2-7 20:06:06 | 显示全部楼层
sanit 发表于 2019-8-16 11:24
空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断.并不是空闲就会一直中断,准确的 ...

请教一下,那如果两帧数据间隔非常小,是不是会认为是一帧数据?
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2020-4-22 08:52:34 | 显示全部楼层
gjeoi 发表于 2020-2-7 20:06
请教一下,那如果两帧数据间隔非常小,是不是会认为是一帧数据?

会的。
所以,Modbus的一帧数据不能用这个空闲中断,需要自己配置定时器来判断。
回复

使用道具 举报

3

主题

75

回帖

84

积分

初级会员

积分
84
发表于 2020-4-24 22:57:23 | 显示全部楼层
caicaptain2 发表于 2020-4-22 08:52
会的。
所以,Modbus的一帧数据不能用这个空闲中断,需要自己配置定时器来判断。

感谢大佬解答
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2020-4-26 22:26:05 | 显示全部楼层
要是间隔时间可以设置就完美了
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2020-4-26 22:26:57 | 显示全部楼层
要是间隔时间可以设置就完美了
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2020-4-27 10:35:05 | 显示全部楼层
的确,时间设置最好可以设置~!!!
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2020-6-3 20:32:10 | 显示全部楼层
谢分享,下载下来学习
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 11:34 , Processed in 0.238175 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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