OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11931|回复: 32

STM32 DMA串口发送模式配置及使用简单分享

[复制链接]

80

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2018-11-20
在线时间
25 小时
发表于 2019-8-7 17:19:32 | 显示全部楼层 |阅读模式
  赠人玫瑰,手有余香;很感谢网上其他楼主的分享;我这个贴子是关于STM32 DMA USART 发送模式的调试分享,我为什么要建这个帖子呢,因为我不想看到还有其他人跟我一样,为了调通DMA串口,而花上大半天的时间,这很不利于大家高效率的开发,网上的经验都是从头教到尾的,内容极多,对于有点小经验的人,或者是想很快达到目的的人,这个很不适合他们;我的这个很简单(本帖不适合不熟悉配置STM32串口的玩家),他只是说串口的DMA怎么配置,还有我用的是DMA1_通道4,因为我的是串口1的TX长话短说:直接po代码:
  DMA_InitTypeDef DMA_InitStruct; //DMA类型声明

  1. <p>  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); /打开RCC时钟,</p>
  2. <p>  DMA_InitStruct.DMA_PeripheralBaseAddr= USART1_BASE+0x4;
  3. //串口外设基础地址,好像只能是这个数值,至于为啥是0x4,我还没找到相关资料</p>
  4. <p>  DMA_InitStruct.DMA_MemoryBaseAddr= (u32)TEST;//这个我是一个字符串数组的首字母也就是u8 TEST[]
  5. =""</p>
  6. <p>  DMA_InitStruct.DMA_DIR= DMA_DIR_PeripheralDST;//这个是发送模式</p>
  7. <p>  DMA_InitStruct.DMA_BufferSize=0; //缓冲大小,实际我们使用可以改变,现在可以随便填</p>
  8. <p>  DMA_InitStruct.DMA_PeripheralInc= DMA_PeripheralInc_Disable
  9. ;//这个是外设偏移,是外设的地址偏移</p>
  10. <p>  DMA_InitStruct.DMA_MemoryInc= DMA_MemoryInc_Enable;//内存偏移,是保存在内存中的数据偏移</p>
  11. <p>  DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;</p>
  12. <p>  DMA_InitStruct.DMA_MemoryDataSize= DMA_MemoryDataSize_Byte;</p>
  13. <p>  DMA_InitStruct.DMA_Mode= DMA_Mode_Normal;//因为不需要循环发送所以使用这个模式就好</p>
  14. <p>  DMA_InitStruct.DMA_Priority=DMA_Priority_High;//优先级,有最高,高,中,低的哥档位</p>
  15. <p>  DMA_InitStruct.DMA_M2M= DMA_M2M_Disable; //关闭就好</p>
  16. <p>  DMA_Init(DMA1_Channel4, & DMA_InitStruct);</p>
  17. <p>  DMA_Cmd(DMA1_Channel4, DISABLE); //先关闭,要使用的时候才使能</p>
  18. <p>  USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);//串口DMA使能,在串口的.h文档中可以找到。</p>
复制代码


  上面是我的DMA配置,接下来是实际在主函数中是怎么使用的:

  1.       DMA_Cmd(DMA1_Channel4, DISABLE); //首先要关闭使能;

  2.   DMA1_Channel4->CNDTR =13; //给这个寄存器设定要发送的缓存大小,这个就是之前DMA配置的DMA_InitStruct.DMA_BufferSize=0;具体语句可以在dma.c中可以找到;

  3.   DMA_Cmd(DMA1_Channel4, ENABLE);//设定好了缓冲长度之后使能DMA,这个时候串口就会自动发送

  4.   DMA_InitStruct.DMA_MemoryBaseAddr=&TEST这个地址的内容;

  5.   while(!DMA_GetFlagStatus(DMA1_FLAG_TC4)) ;//等待完成标志

  6.   DMA_CleaRFlag(DMA1_FLAG_TC4); //清除完成标志
复制代码


  可以我的代码就这两部分,最后说一说我花了大半天才得到的调试记录:
  1)使用DMA串口发送和单纯的串口发送方法不一样,传统的是printf(),DMA就是上面我的第二段代码的操作;
  2)DMA_PeripheralInc:要DIsable,因为这个是设定外设指向下个地址,而不是数据下个地址,设为Enable的话,系统会死机;
  3)DMA_MemoryInc:要Enable,这个才是移动到下个字节的标志;不然的话,即使串口通了,他只会发送第一个字节的内容,而不是发送你整个字符串;通过这个设定我想到了,说明数据是会存入内存中的;
  4)DMA_BufferSize:会自动识别,填写0也没问题;因为实际缓存多大取决于你实际使用时DMA1_Channel4->CNDTR的设定;
  5)USART_DMACmd():这个函数记得要打开,他在串口的.h文档中;
  6使用的方法就是我的第二段代码,先关闭DMA使能,再设定缓冲大小,再开启DMA使能;
  相信这些点你都注意了,串口就可以正常发送数据啦;希望能够帮助你。

DMA的相关资料供大家参考
(DMA专题讲解)
http://www.makeru.com.cn/live/1392_1048.html?s=45051
http://www.makeru.com.cn/live/1392_1020.html?s=45051
stm32如何用DMA搬运数据
游客,如果您要查看本帖隐藏内容请回复

(stm32串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14287
金钱
14287
注册时间
2018-8-3
在线时间
1147 小时
发表于 2019-8-7 18:10:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2017-3-8
在线时间
37 小时
发表于 2019-8-8 09:50:49 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-7-4
在线时间
23 小时
发表于 2019-8-10 11:19:12 | 显示全部楼层
好东西
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-8-10
在线时间
1 小时
发表于 2019-8-10 20:32:48 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-8-6
在线时间
8 小时
发表于 2019-8-11 22:28:56 | 显示全部楼层
很OK
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-8-8
在线时间
9 小时
发表于 2019-8-12 10:17:35 | 显示全部楼层
学习一下DMA的知识
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2019-6-18
在线时间
8 小时
发表于 2019-8-13 10:30:23 | 显示全部楼层
回个看看,谢谢楼主
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-21
在线时间
9 小时
发表于 2019-8-21 15:41:03 | 显示全部楼层
不错感谢分享
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-4-27
在线时间
23 小时
发表于 2019-8-21 19:55:34 | 显示全部楼层
谢谢
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2019-1-17
在线时间
16 小时
发表于 2019-8-26 10:44:17 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2019-7-23
在线时间
13 小时
发表于 2019-8-29 09:31:48 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-6-28
在线时间
13 小时
发表于 2019-8-29 14:17:52 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-8-19
在线时间
10 小时
发表于 2019-9-4 15:11:42 | 显示全部楼层
阿刚萨达萨达萨达
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2017-1-5
在线时间
38 小时
发表于 2019-9-5 09:24:15 | 显示全部楼层
多谢分享。。。。
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-2-22
在线时间
22 小时
发表于 2019-10-15 13:24:15 | 显示全部楼层
看看 谢谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-9-5
在线时间
6 小时
发表于 2019-10-16 14:17:53 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-7-12
在线时间
3 小时
发表于 2019-10-17 08:46:20 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

18

主题

155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3882
金钱
3882
注册时间
2016-7-8
在线时间
817 小时
发表于 2019-12-30 19:27:32 | 显示全部楼层
谢谢分享,感激你
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-11-13
在线时间
1 小时
发表于 2020-1-17 15:30:12 | 显示全部楼层
DMA搬运数据
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2020-10-26
在线时间
65 小时
发表于 2021-6-3 16:32:53 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2019-8-1
在线时间
7 小时
发表于 2022-2-3 18:11:46 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2019-12-17
在线时间
48 小时
发表于 2022-5-17 09:21:44 | 显示全部楼层
学习一下
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-1-31
在线时间
1 小时
发表于 2022-7-16 19:35:54 | 显示全部楼层
谢谢大佬
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2022-2-18
在线时间
3 小时
发表于 2022-7-18 16:50:33 | 显示全部楼层
111111
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2019-5-29
在线时间
14 小时
发表于 2022-7-25 14:05:30 | 显示全部楼层
111L11111111111111
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-8-29
在线时间
8 小时
发表于 2022-8-12 09:48:55 | 显示全部楼层
十分感谢
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2020-5-24
在线时间
26 小时
发表于 2023-2-13 10:57:51 | 显示全部楼层
谢谢楼主的分析!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2023-2-27
在线时间
0 小时
发表于 2023-2-27 10:58:08 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

7

主题

54

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1021
金钱
1021
注册时间
2015-12-8
在线时间
446 小时
发表于 2023-3-14 19:31:53 | 显示全部楼层
学习了看看了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2023-5-24
在线时间
2 小时
发表于 2023-6-9 22:50:45 | 显示全部楼层
感谢分享,学习学习
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2023-6-8
在线时间
28 小时
发表于 2023-7-26 16:42:35 | 显示全部楼层
感谢分享!!!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-9-26
在线时间
16 小时
发表于 2023-8-7 18:18:07 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 04:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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