完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
问候:
我在 STM32F303 上使用 Circular DMA 对多个信号进行双缓冲采集:ADC、正交计数器 (tiM2) 等。我依靠半传输 (HT) 告诉我缓冲区的第一半已满,并且传输完成 (TC) 告诉我缓冲区的后半部分已满。 从 TIM 计数器和 ADC 采集时,HT 和 TC 指示似乎与我的预期相反。 例如,对于长度为 2 的缓冲区,HT 指示在写入 SECOND 条目时发生 (DMA_CNDTR == 2),而 TC 指示在写入 FIRST 条目时发生 (DMA_CNDTR == 1)。抓取的数据是有序的位置,数据的解释也符合我刚才写的。 基于此,我查看了 ADC 上的 HT 和 TC 指示,再次,对于长度为 6 的缓冲区,HT 指示发生在其 DMA_CNDTR == 6,而 TC 指示发生在其 DMA_CNDTR == 3。 因此,TC 和 HT 指示与我的预期相反:我预计 HT 在 1/2 传输时,TC 在完成时,显示剩余缓冲区已满。 如上所述,正在收集的数据与相反的指示一致。(我利用正交定时器捕获的差异来计算速度,只有当 HT 和 TC 指示相反时,数据才有意义)。 有人可以向我解释我哪里出错了,或者我误解了什么吗? 谢谢你。 附言: 这是我的 TIM 捕获配置: DMA_InitStructure.DMA_PeripheralBaseAddr = (UINT32)&QUAD_TIMER->CNT; DMA_InitStructure.DMA_MemoryBaseAddr = (UINT32)dPdT_DMA_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = dPdT_BUF_LENGTH; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel3, &DMA_InitStructure); 这是我的 ADC 捕获的 DMA 配置: // 源是 32 位通用数据寄存器,用于组合 ADC1 和 ADC2 结果 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &(ADC1_2->CDR); DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) ADC_CUR_DMA_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = ADC_CUR_DMA_BUF_SIZE; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; 正如我提到的,所有 DMA TC 和 HT 指示似乎都有这个问题。 |
|
相关推荐
1个回答
|
|
我好尴尬!结果是 TC 和 HT 指示在 ISR 和处理程序例程之间被调换。
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2617 浏览 1 评论
3203 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1776 浏览 1 评论
3602 浏览 6 评论
5981 浏览 21 评论
931浏览 4评论
1308浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
576浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1296浏览 3评论
1350浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 10:19 , Processed in 1.040292 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号