硬汉嵌入式论坛

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

基于V6的CMSIS-Driver串口应用,支持8串口DMA不定长收发,比CubeMX还要省事

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2019-5-15 03:19:08 | 显示全部楼层 |阅读模式
说明:
1、简单易用,比CubeMX还要方便。
2、可以完美配合RTOS做处理。
3、以串口为例,可以方便的用于DMA不定长收发。
4、CMSIS-Driver是ARM搞的,针对STM32F4系列,已经更新了10几个版本了,相对已经比较稳定。
5、F4系列使用CMSIS-Driver非常方便,支持早期的经典配置方式,而H7系列要麻烦些,强制创建一次CubeMX才可以使用,略坑。


例程下载:
V6-CMSIS Driver UART(FreeRTOS).rar (2.48 MB, 下载次数: 3083)
V6-CMSIS Driver UART(RTX5).rar (2.48 MB, 下载次数: 3143)

如果测试不正常,使用新版MDK5.3X及其以上版本,使用后来新做的例子,此贴有附百度云下载。
https://www.armbbs.cn/forum.php?mod=viewthread&tid=114241

注意下面的这几个软件包要都安装当前的最新版:
1.jpg


CMSIS-Driver框图:
Driver.png

功能配置非常方便,在RTE_Device.h文件里面设置
2019-05-15_031005.png

例子默认配置的最大接收100个字符,连续接收一次数据,重新开启继续接收,简单测试:
6.gif

非常详细的函数说明,在MDK安装目录里面
QQ截图20190515031513.jpg











评分

参与人数 2金币 +40 收起 理由
aron + 20 好帖支持!
byccc + 20 好贴,支持下

查看全部评分

回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2019-5-15 08:36:55 | 显示全部楼层
CMSIS-Driver里面的文件是开源的吗?有没测试过效率比之前的库文件低了还是高
回复

使用道具 举报

82

主题

401

回帖

667

积分

金牌会员

积分
667
QQ
发表于 2019-5-15 09:04:26 | 显示全部楼层
回复

使用道具 举报

4

主题

117

回帖

129

积分

初级会员

积分
129
发表于 2019-5-15 10:43:24 | 显示全部楼层
感觉ARM公司搞这个也是树立了一个标准。对用户只需要用这个驱动的API做事,其余的由厂商完成,方便在不同系列品牌的MCU中自如切换。也许以后换MCU软件只要重新编译一下就行,类似A系列。至于效率可能不是最重要的,毕竟硬件会越来越强。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-5-15 11:26:46 | 显示全部楼层
永恒的_eSg02 发表于 2019-5-15 08:36
CMSIS-Driver里面的文件是开源的吗?有没测试过效率比之前的库文件低了还是高

开源的,效率可以啊,因为中断都是寄存器实现的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-5-16 02:19:48 | 显示全部楼层
这个程序暂未做AC6的支持,因为有些头文件无法正常识别,后面有时间再研究下吧
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2019-5-16 12:56:08 | 显示全部楼层
测试了下,还不错。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

5

主题

28

回帖

43

积分

新手上路

积分
43
发表于 2019-5-23 19:03:09 | 显示全部楼层
实际上就比cubeMX HAL uart库 多了一个打开IDLE 中断 发了一个事件过去给callback函数,并没有方便很多。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-5-24 08:51:09 | 显示全部楼层
wkler 发表于 2019-5-23 19:03
实际上就比cubeMX HAL uart库 多了一个打开IDLE 中断 发了一个事件过去给callback函数,并没有方便很多。。 ...

参数配置比CubeMX方便很多,而且可以完美契合RTOS
回复

使用道具 举报

6

主题

126

回帖

144

积分

初级会员

积分
144
发表于 2019-5-24 12:02:16 | 显示全部楼层
本帖最后由 role_2099 于 2019-5-24 14:07 编辑

硬汉大哥,请教一下,你的SecureCRT的是发送的ASCII字符吗,可以发送十六进制吗

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-5-25 00:45:36 | 显示全部楼层
role_2099 发表于 2019-5-24 12:02
硬汉大哥,请教一下,你的SecureCRT的是发送的ASCII字符吗,可以发送十六进制吗

发不了,这个软件主要还是做超级终端。
回复

使用道具 举报

6

主题

126

回帖

144

积分

初级会员

积分
144
发表于 2019-5-27 14:16:11 | 显示全部楼层
eric2013 发表于 2019-5-25 00:45
发不了,这个软件主要还是做超级终端。

收到,多谢硬汉大佬
回复

使用道具 举报

4

主题

117

回帖

129

积分

初级会员

积分
129
发表于 2019-5-29 16:20:45 | 显示全部楼层
能设定通讯超时的时间吗?默认是否有延迟?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-5-30 10:11:20 | 显示全部楼层
hance2000 发表于 2019-5-29 16:20
能设定通讯超时的时间吗?默认是否有延迟?

OS接收的时候可以设置超时接收。
回复

使用道具 举报

4

主题

117

回帖

129

积分

初级会员

积分
129
发表于 2019-5-31 10:48:50 | 显示全部楼层
感谢,回复。主要是不知道是否有延迟,不处理是否会一直来信息。按思路是收到空闲消息,关中断,开延时。延时到放弃接收,切换方向(RS485),处理信息。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-5-31 14:33:23 | 显示全部楼层
hance2000 发表于 2019-5-31 10:48
感谢,回复。主要是不知道是否有延迟,不处理是否会一直来信息。按思路是收到空闲消息,关中断,开延时。延 ...

这类的应用,做个modbus方式的协议控制是最合适的。
回复

使用道具 举报

1

主题

25

回帖

28

积分

新手上路

积分
28
发表于 2019-6-13 11:12:35 | 显示全部楼层
现在看不懂,努力学习中。

评分

参与人数 1金币 +20 收起 理由
wangertan + 20 神马都是浮云

查看全部评分

回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2019-8-15 15:56:26 | 显示全部楼层
看了一下,真心好累。。。。看不懂。。。
回复

使用道具 举报

5

主题

61

回帖

76

积分

初级会员

积分
76
发表于 2019-8-20 17:26:52 | 显示全部楼层
我一直用这个cmsis-driver,在RTX4下,IIC,SPI,USART,最近在搞以太网,以太网服务器搞了可以收发,通过网络调试助手,最近打算把这个libmodbus协议栈添加到以太网工程中,串口的协议栈已经完美融入到cmsis-driver,自己得花时间,刚注册,希望和大家交流
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2020-4-30 18:07:02 | 显示全部楼层
楼主可否做个基于此的modbus的简单Demo
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-5-1 07:44:43 | 显示全部楼层
lrzxc 发表于 2020-4-30 18:07
楼主可否做个基于此的modbus的简单Demo

后面会做Modbus升级版教程,可以做。
回复

使用道具 举报

0

主题

19

回帖

19

积分

新手上路

积分
19
发表于 2020-5-12 14:47:10 | 显示全部楼层
楼主,例子里,最大接收100字节。第一次发100字节,可以接收,第二次再发就接收不到了。再发小于100字节的也不能接收了。应该如何改才能保证一直可以接收呢?另外想用串口DMA接收方式,接收一个几个KB的bin文件,程序应该怎么写呢?有没有例子参考?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-5-12 15:22:35 | 显示全部楼层
highlowbp 发表于 2020-5-12 14:47
楼主,例子里,最大接收100字节。第一次发100字节,可以接收,第二次再发就接收不到了。再发小于100字节的 ...

QQ截图20200512152219.png
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
发表于 2020-6-2 16:45:46 | 显示全部楼层
看了一下,他这个是在DMA接收中断里面又开启了串口的接收中断吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-6-2 18:05:05 | 显示全部楼层
shibinjie 发表于 2020-6-2 16:45
看了一下,他这个是在DMA接收中断里面又开启了串口的接收中断吗?

如果你要下次用,要再调用API进行接收。
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
发表于 2020-6-3 13:33:52 | 显示全部楼层
eric2013 发表于 2020-6-2 18:05
如果你要下次用,要再调用API进行接收。

今天仔细看了下,好像DMA都没有设置中断优先级吧。他这个写的太复杂了,不知道整个接收流程是怎么样的,最后是在串口空闲中断里处理的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-6-3 13:37:12 | 显示全部楼层
shibinjie 发表于 2020-6-3 13:33
今天仔细看了下,好像DMA都没有设置中断优先级吧。他这个写的太复杂了,不知道整个接收流程是怎么样的, ...

就是开启了串口空闲中断,也开启了接收完成中断,如果用户发送的数据间隔时间触发了串口空闲中断,就会触发进去,在里面终止了DMA传输。
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-11-4 14:55:37 | 显示全部楼层
dghwjh 发表于 2019-8-20 17:26
我一直用这个cmsis-driver,在RTX4下,IIC,SPI,USART,最近在搞以太网,以太网服务器搞了可以收发,通过网络 ...

请问你在F1系列上用过CMSIS Driver USART 没有???微18682353162
回复

使用道具 举报

9

主题

28

回帖

55

积分

初级会员

积分
55
发表于 2020-11-18 09:04:09 | 显示全部楼层
感谢硬汉,之前用的串口数据处理方式实时性一直不是很高
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-11-18 13:57:37 | 显示全部楼层
chaqs3 发表于 2020-11-18 09:04
感谢硬汉,之前用的串口数据处理方式实时性一直不是很高

请问你在F1系列上用过CMSIS Driver USART 没有???
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2021-1-6 11:48:08 | 显示全部楼层
感谢分享,顶起来
Releasing your creativity
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-1-24 11:32:58 | 显示全部楼层
chaqs3 发表于 2020-11-18 09:04
感谢硬汉,之前用的串口数据处理方式实时性一直不是很高

用DMA 串口空闲中断方式,处理断续的数据,会出现丢字节的问题。
回复

使用道具 举报

0

主题

20

回帖

20

积分

新手上路

积分
20
发表于 2021-2-28 11:31:34 | 显示全部楼层
请教下这个DMA 串口发数据不用RTX5系统调用应该也什么问题把?  其他的用RTX5系统调用
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2021-2-28 12:17:53 | 显示全部楼层
jinzhen107 发表于 2021-2-28 11:31
请教下这个DMA 串口发数据不用RTX5系统调用应该也什么问题把?  其他的用RTX5系统调用

可以,CMSIS-Driver 是独立的
回复

使用道具 举报

0

主题

14

回帖

14

积分

新手上路

积分
14
发表于 2022-5-24 10:20:32 | 显示全部楼层
这个既然是驱动层,应该是F4系列通用的吧?F405   F407之类的应该也都配置修改不大,F1有对应的驱动么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2022-5-25 02:14:48 | 显示全部楼层
cancundiudiu 发表于 2022-5-24 10:20
这个既然是驱动层,应该是F4系列通用的吧?F405   F407之类的应该也都配置修改不大,F1有对应的驱动么?

对,都有对应的驱动,ST的所有系列都做了对应的CMSIS-Driver
回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
发表于 2022-7-8 16:28:00 | 显示全部楼层
wkler 发表于 2019-5-23 19:03
实际上就比cubeMX HAL uart库 多了一个打开IDLE 中断 发了一个事件过去给callback函数,并没有方便很多。。 ...

这个能看到源码吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2022-7-8 17:37:27 | 显示全部楼层
伊森亨特 发表于 2022-7-8 16:28
这个能看到源码吗?

CMSIS-Driver是有源码的,随意商用。
回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
发表于 2022-7-11 10:20:16 | 显示全部楼层
eric2013 发表于 2022-7-8 17:37
CMSIS-Driver是有源码的,随意商用。

这个CMSIS-Driver是在标准库的基础上封装的一层,还是独立与标准库单独的一套呢?谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2022-7-11 11:21:29 | 显示全部楼层
伊森亨特 发表于 2022-7-11 10:20
这个CMSIS-Driver是在标准库的基础上封装的一层,还是独立与标准库单独的一套呢?谢谢

给F4系列设计的,是独立的寄存器实现。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 10:58 , Processed in 0.435716 second(s), 37 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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