eric2013 发表于 2019-5-15 03:19:08

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

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

static/image/hrline/4.gif
例程下载:



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

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


static/image/hrline/4.gif
CMSIS-Driver框图:


功能配置非常方便,在RTE_Device.h文件里面设置


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


非常详细的函数说明,在MDK安装目录里面












永恒的_eSg02 发表于 2019-5-15 08:36:55

CMSIS-Driver里面的文件是开源的吗?有没测试过效率比之前的库文件低了还是高

雷鹏 发表于 2019-5-15 09:04:26

{:8:}

hance2000 发表于 2019-5-15 10:43:24

感觉ARM公司搞这个也是树立了一个标准。对用户只需要用这个驱动的API做事,其余的由厂商完成,方便在不同系列品牌的MCU中自如切换。也许以后换MCU软件只要重新编译一下就行,类似A系列。至于效率可能不是最重要的,毕竟硬件会越来越强。

eric2013 发表于 2019-5-15 11:26:46

永恒的_eSg02 发表于 2019-5-15 08:36
CMSIS-Driver里面的文件是开源的吗?有没测试过效率比之前的库文件低了还是高

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

eric2013 发表于 2019-5-16 02:19:48

这个程序暂未做AC6的支持,因为有些头文件无法正常识别,后面有时间再研究下吧

byccc 发表于 2019-5-16 12:56:08

测试了下,还不错。

wkler 发表于 2019-5-23 19:03:09

实际上就比cubeMX HAL uart库 多了一个打开IDLE 中断 发了一个事件过去给callback函数,并没有方便很多。。。

eric2013 发表于 2019-5-24 08:51:09

wkler 发表于 2019-5-23 19:03
实际上就比cubeMX HAL uart库 多了一个打开IDLE 中断 发了一个事件过去给callback函数,并没有方便很多。。 ...

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

role_2099 发表于 2019-5-24 12:02:16

本帖最后由 role_2099 于 2019-5-24 14:07 编辑

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

https://img.anfulai.cn/dz/attachment/forum/201905/15/031828ftwvy53tan73smvm.gif

eric2013 发表于 2019-5-25 00:45:36

role_2099 发表于 2019-5-24 12:02
硬汉大哥,请教一下,你的SecureCRT的是发送的ASCII字符吗,可以发送十六进制吗

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

role_2099 发表于 2019-5-27 14:16:11

eric2013 发表于 2019-5-25 00:45
发不了,这个软件主要还是做超级终端。

收到,多谢硬汉大佬

hance2000 发表于 2019-5-29 16:20:45

能设定通讯超时的时间吗?默认是否有延迟?

eric2013 发表于 2019-5-30 10:11:20

hance2000 发表于 2019-5-29 16:20
能设定通讯超时的时间吗?默认是否有延迟?

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

hance2000 发表于 2019-5-31 10:48:50

感谢,回复。主要是不知道是否有延迟,不处理是否会一直来信息。按思路是收到空闲消息,关中断,开延时。延时到放弃接收,切换方向(RS485),处理信息。

eric2013 发表于 2019-5-31 14:33:23

hance2000 发表于 2019-5-31 10:48
感谢,回复。主要是不知道是否有延迟,不处理是否会一直来信息。按思路是收到空闲消息,关中断,开延时。延 ...

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

tianqi9112001 发表于 2019-6-13 11:12:35

现在看不懂,努力学习中。

caicaptain2 发表于 2019-8-15 15:56:26

看了一下,真心好累。。。。看不懂。。。

dghwjh 发表于 2019-8-20 17:26:52

我一直用这个cmsis-driver,在RTX4下,IIC,SPI,USART,最近在搞以太网,以太网服务器搞了可以收发,通过网络调试助手,最近打算把这个libmodbus协议栈添加到以太网工程中,串口的协议栈已经完美融入到cmsis-driver,自己得花时间,刚注册,希望和大家交流

lrzxc 发表于 2020-4-30 18:07:02

楼主可否做个基于此的modbus的简单Demo

eric2013 发表于 2020-5-1 07:44:43

lrzxc 发表于 2020-4-30 18:07
楼主可否做个基于此的modbus的简单Demo

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

highlowbp 发表于 2020-5-12 14:47:10

楼主,例子里,最大接收100字节。第一次发100字节,可以接收,第二次再发就接收不到了。再发小于100字节的也不能接收了。应该如何改才能保证一直可以接收呢?另外想用串口DMA接收方式,接收一个几个KB的bin文件,程序应该怎么写呢?有没有例子参考?

eric2013 发表于 2020-5-12 15:22:35

highlowbp 发表于 2020-5-12 14:47
楼主,例子里,最大接收100字节。第一次发100字节,可以接收,第二次再发就接收不到了。再发小于100字节的 ...


shibinjie 发表于 2020-6-2 16:45:46

看了一下,他这个是在DMA接收中断里面又开启了串口的接收中断吗?

eric2013 发表于 2020-6-2 18:05:05

shibinjie 发表于 2020-6-2 16:45
看了一下,他这个是在DMA接收中断里面又开启了串口的接收中断吗?

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

shibinjie 发表于 2020-6-3 13:33:52

eric2013 发表于 2020-6-2 18:05
如果你要下次用,要再调用API进行接收。

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

eric2013 发表于 2020-6-3 13:37:12

shibinjie 发表于 2020-6-3 13:33
今天仔细看了下,好像DMA都没有设置中断优先级吧。他这个写的太复杂了,不知道整个接收流程是怎么样的, ...

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

wlx18682353162 发表于 2020-11-4 14:55:37

dghwjh 发表于 2019-8-20 17:26
我一直用这个cmsis-driver,在RTX4下,IIC,SPI,USART,最近在搞以太网,以太网服务器搞了可以收发,通过网络 ...

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

chaqs3 发表于 2020-11-18 09:04:09

感谢硬汉,之前用的串口数据处理方式实时性一直不是很高:lol

wlx18682353162 发表于 2020-11-18 13:57:37

chaqs3 发表于 2020-11-18 09:04
感谢硬汉,之前用的串口数据处理方式实时性一直不是很高

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

廷润 发表于 2021-1-6 11:48:08

感谢分享,顶起来

chengzhi 发表于 2021-1-24 11:32:58

chaqs3 发表于 2020-11-18 09:04
感谢硬汉,之前用的串口数据处理方式实时性一直不是很高

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

jinzhen107 发表于 2021-2-28 11:31:34

请教下这个DMA 串口发数据不用RTX5系统调用应该也什么问题把?其他的用RTX5系统调用

eric2013 发表于 2021-2-28 12:17:53

jinzhen107 发表于 2021-2-28 11:31
请教下这个DMA 串口发数据不用RTX5系统调用应该也什么问题把?其他的用RTX5系统调用

可以,CMSIS-Driver 是独立的

cancundiudiu 发表于 2022-5-24 10:20:32

这个既然是驱动层,应该是F4系列通用的吧?F405   F407之类的应该也都配置修改不大,F1有对应的驱动么?

eric2013 发表于 2022-5-25 02:14:48

cancundiudiu 发表于 2022-5-24 10:20
这个既然是驱动层,应该是F4系列通用的吧?F405   F407之类的应该也都配置修改不大,F1有对应的驱动么?

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

伊森亨特 发表于 2022-7-8 16:28:00

wkler 发表于 2019-5-23 19:03
实际上就比cubeMX HAL uart库 多了一个打开IDLE 中断 发了一个事件过去给callback函数,并没有方便很多。。 ...

这个能看到源码吗?

eric2013 发表于 2022-7-8 17:37:27

伊森亨特 发表于 2022-7-8 16:28
这个能看到源码吗?

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

伊森亨特 发表于 2022-7-11 10:20:16

eric2013 发表于 2022-7-8 17:37
CMSIS-Driver是有源码的,随意商用。

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

eric2013 发表于 2022-7-11 11:21:29

伊森亨特 发表于 2022-7-11 10:20
这个CMSIS-Driver是在标准库的基础上封装的一层,还是独立与标准库单独的一套呢?谢谢

给F4系列设计的,是独立的寄存器实现。
页: [1] 2
查看完整版本: 基于V6的CMSIS-Driver串口应用,支持8串口DMA不定长收发,比CubeMX还要省事