打印
[STM32F1]

到底执行哪个?

[复制链接]
楼主: zwll
手机看帖
扫描二维码
随时随地手机跟帖
21
是不是和adc一样

使用特权

评论回复
22
zwll|  楼主 | 2022-8-6 17:20 | 只看该作者
它传它转化好的数,我cpu跑我该跑的东西?

使用特权

评论回复
23
renyaq| | 2022-8-6 17:23 | 只看该作者
好像还看到有说法,dma干活时候要占用总线的,这时候cpu就不能占用总线的

使用特权

评论回复
24
zwll|  楼主 | 2022-8-6 17:25 | 只看该作者
意思dma哪怕做的事没用中断,直接操作的,而又因为它占用了总线,所以cpu虽然能运算,但是没法控制外设?

使用特权

评论回复
25
chuxh| | 2022-8-6 17:28 | 只看该作者
要等dma释放了总线才能控制外设

使用特权

评论回复
26
zwll|  楼主 | 2022-8-6 17:31 | 只看该作者
比如控制定时器改变输出的pwm?

使用特权

评论回复
27
xxrs| | 2022-8-6 17:35 | 只看该作者
DMA每次传输占用总线的时间,只有几个时钟周期而已,基本可以忽略。

使用特权

评论回复
28
jlyuan| | 2022-8-6 17:38 | 只看该作者
你的理解有点问题。
以STM3210x 为例:
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。

注意,是外设请求DMA,然后DMA控制器传输数据,而不是DMA去控制外设!DMA也不是内存,里面是放不进数据的。

使用特权

评论回复
29
dingy| | 2022-8-6 17:41 | 只看该作者
假设用IIC来发送一个数组。TxBuff[10];你可以先发送第一个数据,中断后再发送第二个,再中断再发送。。直到10个数据全发完。

使用特权

评论回复
30
xxrs| | 2022-8-6 17:43 | 只看该作者
假如配置好DMA之后。只要TxE位被置位,它会自己把10个数据全发完

使用特权

评论回复
31
supernan| | 2022-8-6 17:46 | 只看该作者
如果需要,全部发送完成后也可以产生中断

使用特权

评论回复
32
juventus9554| | 2022-8-7 09:42 | 只看该作者
在DMA传送期间,CPU该干嘛干嘛。

使用特权

评论回复
33
zwll|  楼主 | 2022-8-7 09:44 | 只看该作者
看了点dma这块的介绍,感觉dma好像对我那个iic读传感器的值需要花费700us多的时间好像于事无补?

使用特权

评论回复
34
zwll|  楼主 | 2022-8-7 09:47 | 只看该作者
是不是这样,我感觉的读花费700us是因为iic的频率我只做到了360khz,然而数据特别的多,所以传感器把数值发过来在iic总线上传播的时间就有好长好长,用dma也是传感器从总线上把数据传完了,dma可以控制将iic的数据寄存器的值给某一个变量,而这个过程用cpu操作,本身也占的时间在700us里面也是很少的一部分对吧?所以用iic的dma和用cpu来操作iic,这个700us不可能有啥变化,对吗?

使用特权

评论回复
35
wyjie| | 2022-8-7 09:50 | 只看该作者
如果用dma,传感器开始从总线上传数这个过程,cpu不用等待标志位,可以去干别的事情了?

使用特权

评论回复
36
zwll|  楼主 | 2022-8-7 09:52 | 只看该作者
传感器传数到iic数据寄存器受到数,这个过程花费的时间最多是这样吗?

使用特权

评论回复
37
stly| | 2022-8-7 09:54 | 只看该作者
你想使用DMA,让传感器传过来比如10个数据之后,你(间隔7ms)再一下子处理那10个数据?

使用特权

评论回复
38
renyaq| | 2022-8-7 09:59 | 只看该作者
对dma接触的不多,看看,学习学习了。。

使用特权

评论回复
39
zwll|  楼主 | 2022-8-7 10:01 | 只看该作者
不是的,是这样,可能我没说明白,不好意思,传感器每5ms产生一个数,用iic读取一次数要花费700us,就是传输传感器的数据由于数据较大,光是传输的过程就要要花费700us,也就是每次收数iic通讯维持的时间700us,而就是这个700us时间我觉得太长了,因为你看,我还有别的东西要周期性操作,有个定时器输出pwm的中断是100us一次,如果每5ms内,收这个传感器的数,iic就要占用700us,这个如果是cpu操作读数,cpu就得一直等着iic总线读完了,这700us就不能做别的事情,也就是我希望那个pwm的那个100us这个周期不被打断,不想这个700us读数的时候,其他的事情都在等待,不能做

使用特权

评论回复
40
jiajs| | 2022-8-7 10:03 | 只看该作者
我曾经用过无刷直流电机,PWM是16.3KHz的,采用霍尔换向,速度3~5m/s,用的触发换相,时间间隔也就30ms左右,没事啊,还能读RFID,其他传感器也行啊,不过用的是ucosii,如果容量够大,你可以考虑一下操作系统,好处就是不在用延时了,延时的时间去做别的事情

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则