完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ADC配置为外部触发转换每40us tiM1触发一次(周期不变),第一次转换通道依次为 3,4,8,9(ADC初始化设定好的),进入DMA传输完成中断,读出来的数据是对的,在中断中把ADC的通道更改为2,3,8,9,第二次进DMA中断时读出来的数据出现了错误,我是每进一次中断改一次ADC通道(更改的顺序为上面写的序列3,4,8,9改为2,3,8,9)。
通道8,9始终不变DMA数据也是正确的。但是前两个数据就不对了。 正确的: 通道 数据 通道 数据 3: 119 2 10 4: 30 3 119 8: 315 8 315 9: 313 9 315 上面为同道序列固定时,不做切换时是正确的。 如果在中断中做上面两组序列切换,值就不对 错误的: 通道 数据 通道 数据 3: 10 2 119 4: 30 3 119 8: 315 8 315 9: 313 9 315 通道2和3在切换时的值互换了,但是这分明是两次不同的转换。 void DMA_Conf(void) { /* DMA1 clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE); /* DMA1 Channel1 Config */ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&ADC1->DR); DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(&ADCDataBuf); DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 4; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); /* Enable DMA1 Channel1 Transfer Complete interrupt */ DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE); /* Enable DMA1 channel1 IRQ Channel */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* DMA1 Channel1 enable */ DMA_Cmd(DMA1_Channel1, ENABLE); } |
|
相关推荐
5个回答
|
|
在中断中改了通道,要重新配置DMA
|
|
|
|
楼主在中断中,需要重新进行ADC配置(包括通道)以及DMA配置
|
|
|
|
在中断总重新配置下DMA和ADC就行了
|
|
|
|
我以前也被这个问题困扰很久。建议不要用循环存储,使用定时器外部触发,普通存储方式。关闭ADC的连续模式。
|
|
|
|
由于是DMA式采集数据,因此不能中途随意再变换通道,要变换通道则需要重新对其加以初始化,否则尽管你变换了采集通道,但它还是按你先前的设置采集.
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 08:40 , Processed in 0.629082 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号