硬汉嵌入式论坛

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

[BSP视频教程] BSP视频教程第21期:轻松一键实现串口DMA不定长收发,支持裸机和RTOS,含MDK和IAR两种玩法,比STM32CubeMX还方便(2022-07-24)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
发表于 2022-7-24 06:10:16 | 显示全部楼层 |阅读模式
我们这里采用CMSIS Pack一键创建,支持MDK和IAR,不需要大家做底层研究,仅需关心上层应用即可,且支持裸机和RTOS玩法。

优势是简单易实现,劣势是喜欢上这种玩法后,会无法自拔,不再愿意花心思去研究源代码了。


视频:

https://www.bilibili.com/video/BV1dB4y187iT




IAR9.3的 CMSIS Pack 一键创建:

image.png

image.png

MDK RTE一键创建:

image.png

API文档:
image.png


参考资料:
1、视频过程中制作的例子(含裸机和RTOS版):
链接:https://pan.baidu.com/s/1X5feRJIQyVNBsMgCDK5RQQ  提取码:61y7

2、基于V6的CMSIS-Driver串口应用,支持8串口DMA不定长收发,比CubeMX还要省事
https://www.armbbs.cn/forum.php?mod=viewthread&tid=93714

3、坛友 “旮旯旭” 基于STM32CubeMX创建的串口DMA不定长玩法,也非常好
(1)STM32V6之串口HAL库串口空闲中断接收不定长字节代码实现
https://www.armbbs.cn/forum.php?mod=viewthread&tid=101377

(2)STM32H7基于STM32CubeMX的串口DMA+空闲中断接收不定长数据实现(HAL库1.9.0自带函数实现)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=108553



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-7-24 06:11:56 | 显示全部楼层
更新完毕。
回复

使用道具 举报

5

主题

179

回帖

194

积分

初级会员

积分
194
发表于 2022-7-24 10:31:51 | 显示全部楼层
cmsis uasrt这个一直在用,初学stm32的时候,学了各种串口用法。现在类似的源码都不再关注了。
回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
发表于 2022-7-24 10:41:30 | 显示全部楼层
试了一下stm32l431芯片,CMSIS Driver 中L4芯片的版本没有实现ARM_USART_EVENT_RX_TIMEOUT功能。
回复

使用道具 举报

2

主题

71

回帖

82

积分

初级会员

积分
82
发表于 2022-7-24 15:56:55 | 显示全部楼层
IAR 使用 CMSIS 居然不添加 startup_xxx.s 文件
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-7-25 00:26:50 | 显示全部楼层
chunhao 发表于 2022-7-24 10:41
试了一下stm32l431芯片,CMSIS Driver 中L4芯片的版本没有实现ARM_USART_EVENT_RX_TIMEOUT功能。

F系列做的比较全,L系和G系一般,没有不定长,只有普通的DMA玩法,需要自己魔改。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-7-25 00:27:58 | 显示全部楼层
tsetse 发表于 2022-7-24 15:56
IAR 使用 CMSIS 居然不添加 startup_xxx.s 文件

在Device里面可以加
image.png
回复

使用道具 举报

2

主题

71

回帖

82

积分

初级会员

积分
82
发表于 2022-7-25 08:43:46 | 显示全部楼层
eric2013 发表于 2022-7-25 00:27
在Device里面可以加

试了一下,新建 F4 工程是有的,昨天用的 F0 2.1.0 的 pack ,不会自动添加
回复

使用道具 举报

19

主题

76

回帖

133

积分

初级会员

积分
133
发表于 2022-7-27 16:57:28 | 显示全部楼层
CMSIS 這麼方便 只有STM32可用嗎
AT32之類的呢
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-7-27 19:24:32 | 显示全部楼层
为啥你这个例子,我在V6板子上跑不通,我自己新建一个也跑不通?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-7-28 10:00:43 | 显示全部楼层
Maeeshe 发表于 2022-7-27 19:24
为啥你这个例子,我在V6板子上跑不通,我自己新建一个也跑不通?

测试了下,正常啊。是不是你的CMSIS-Driver版本太低。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-7-28 10:01:14 | 显示全部楼层
blueice1108 发表于 2022-7-27 16:57
CMSIS 這麼方便 只有STM32可用嗎
AT32之類的呢

可以在STM32的基础上魔改下。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-7-28 21:34:07 | 显示全部楼层
eric2013 发表于 2022-7-28 10:00
测试了下,正常啊。是不是你的CMSIS-Driver版本太低。

那这样的话,做项目用这个与版本有关还能做到兼容吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-7-29 09:09:59 | 显示全部楼层
Maeeshe 发表于 2022-7-28 21:34
那这样的话,做项目用这个与版本有关还能做到兼容吗?

当然可以,RTE可以选择指定版本的。
回复

使用道具 举报

0

主题

53

回帖

53

积分

初级会员

积分
53
发表于 2022-8-29 17:28:52 | 显示全部楼层
这个图形界面配置的玩法,可以在国产MCU上玩吗?比如,在RTE_Device.h中进行UART引脚的选择、DMA配置等

能在MDK开发的Cortex-M芯片都可以这么玩吗?还是说需要芯片厂家提供完善的MDK package支持才行?
回复

使用道具 举报

6

主题

21

回帖

39

积分

新手上路

积分
39
发表于 2022-9-1 14:35:46 | 显示全部楼层
小白提问,如果使用两个串口使用CMSIS-Driver串口DMA的话,你的USART的串口FIFO不是没有优势吗?CMSIS-Driver串口DMA和串口FIFO实际使用过程中选择哪一个?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-9-2 10:29:01 | 显示全部楼层
PYL4869 发表于 2022-9-1 14:35
小白提问,如果使用两个串口使用CMSIS-Driver串口DMA的话,你的USART的串口FIFO不是没有优势吗?CMSIS-Driv ...

这个有个很重要的一点,就是在加上各种通信协议后,比如modbus,那种自己用的更熟练就用那个,方便自己以后出问题了,项目排查。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-9-2 10:33:38 | 显示全部楼层
adlu 发表于 2022-8-29 17:28
这个图形界面配置的玩法,可以在国产MCU上玩吗?比如,在RTE_Device.h中进行UART引脚的选择、DMA配置等

...

对,能在MDK开发Cortex-M都可以玩。

能直接运行STM32的程序更好,不能的话,得调下对应的驱动代码。主要就是修改CMSIS-Driver的驱动文件。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-10-21 15:28:10 | 显示全部楼层
V7的板子操作过程好像还不太一样,如果使用了cubemx的话,就没办法配置RTE_Device.h的文件,那么是不是uart的初始化也会有问题呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2022-10-21 15:42:40 | 显示全部楼层
1132520084 发表于 2022-10-21 15:28
V7的板子操作过程好像还不太一样,如果使用了cubemx的话,就没办法配置RTE_Device.h的文件,那么是不是uart ...

H7系列没有经典配置方式了,得用在MDK RTE里面打开CubeMX配置。
回复

使用道具 举报

6

主题

31

回帖

49

积分

初级会员

积分
49
发表于 2023-7-18 13:29:38 | 显示全部楼层
freeRTOS(MDK)版本里面标志位0X00000003是哪一个线程发出的,回调函数里面只有1,2,4三个标志位
串口收发cmsis.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106437
QQ
 楼主| 发表于 2023-7-18 14:55:31 | 显示全部楼层
厉飞雨 发表于 2023-7-18 13:29
freeRTOS(MDK)版本里面标志位0X00000003是哪一个线程发出的,回调函数里面只有1,2,4三个标志位

这个事件标志是按照bit处理的。32bit变量就是32个事件标志。

0000 0003就是等待了0000 0001和0000 0010两个标志。
回复

使用道具 举报

6

主题

31

回帖

49

积分

初级会员

积分
49
发表于 2023-7-18 16:23:15 | 显示全部楼层
eric2013 发表于 2023-7-18 14:55
这个事件标志是按照bit处理的。32bit变量就是32个事件标志。

0000 0003就是等待了0000 0001和0000 001 ...

好的,多谢解答。刚刚用这方法了个三个串口透传程序,测试没问题
回复

使用道具 举报

0

主题

14

回帖

14

积分

新手上路

积分
14
发表于 2023-8-18 16:58:55 | 显示全部楼层
那么,它的源码在哪里?我想研究研究
话说我搞了串口DMA+FIFO+不定长收发,用了很多项目了,一直挺稳定的。
都是参考网络上各位大神的程序,然后魔改合并来的。。。。
回复

使用道具 举报

3

主题

96

回帖

105

积分

初级会员

积分
105
发表于 2023-8-21 16:44:44 | 显示全部楼层
cancundiudiu 发表于 2023-8-18 16:58
那么,它的源码在哪里?我想研究研究
话说我搞了串口DMA+FIFO+不定长收发,用了很多项目了,一直挺稳定的 ...

源码就在第一楼的链接啊
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-9-17 15:54:40 | 显示全部楼层
cancundiudiu 发表于 2023-8-18 16:58
那么,它的源码在哪里?我想研究研究
话说我搞了串口DMA+FIFO+不定长收发,用了很多项目了,一直挺稳定的 ...

你好,可以学习下你的串口DMA+FIFO的代码实现嘛
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 23:45 , Processed in 0.280922 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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