OpenEdv-开源电子网

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

关于DMA计数与外设的关系,外设事件的触发方式

[复制链接]

15

主题

25

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2018-12-24
在线时间
33 小时
发表于 2020-3-20 18:42:46 | 显示全部楼层 |阅读模式
5金钱
在DMA的配置过程中,会设置一个DMA_InitStructure.DMA_BufferSize = DataSize;  //DMA通道的DMA缓存的大小   这个DataSize对应DMA寄存器中的DMAy_Channelx->CNDTR。DMA计数到这个值后会产生DMA发送完成事件,若配置了中断还可以进入发送完成中断。我现在的疑惑是DataSize这个值的计数和什么有关系呢?我在外设如TIM,USART等初始化的时候,会有一个XXXDma_Cmd(),这个函数会把DMA和外设的某个事件绑定到一起,当外设产生绑定事件后,DMA便会触发一次计数。我在干什么呢,我在自问自答。。
现在正式的问题如下:
1、在DMA+ADC项目中,先开启了ADC_Cmd(ADC1, ENABLE);,再开启了DMA_Cmd(DMA1_Channel1, ENABLE),那么会不会有一种情况就是我开启了ADC使能后,ADC便开始转换了,但是DMA还没到使能。这时如果DMA使能了,但是ADC_DR寄存器中的值已经不是我们想要的第一个通道的值了,该怎么办呢?
2、外设事件的触发和外设的配置有关系吗?比如说我没有开启定时器的输出比较通道,但是我直接操作寄存器去改变TIM3->CCR1寄存器的值,那么这个时候会产生输出比较事件吗?如果我把该事件绑定到DMA,那么DMA会产生计数甚至进入DMA发送完成中断吗?

最佳答案

查看完整内容[请看2#楼]

1, 有这个可能,所以建议考虑先后顺序初始化。 2,你自己修改CCRX不会导致输出比较事件, 事件只发生在CCRX==CNT的时候。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-3-20 18:42:47 | 显示全部楼层
1, 有这个可能,所以建议考虑先后顺序初始化。
2,你自己修改CCRX不会导致输出比较事件, 事件只发生在CCRX==CNT的时候。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

25

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2018-12-24
在线时间
33 小时
 楼主| 发表于 2020-3-21 21:43:26 | 显示全部楼层
正点原子 发表于 2020-3-20 18:42
1, 有这个可能,所以建议考虑先后顺序初始化。
2,你自己修改CCRX不会导致输出比较事件, 事件只发生在CC ...

感谢原子哥!~!@~#!@~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 05:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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