完善资料让更多小伙伴认识你,还能领取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 和处理程序例程之间被调换。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1472 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1524 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3674 浏览 1 评论
3864 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2483 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
752浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
684浏览 5评论
730浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
976浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
779浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 16:18 , Processed in 0.884983 second(s), Total 72, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
584