1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用CUBEMX配置完adc和dma后在主函数中调用函数HAL_ADC_Start_DMA( hadc1,(uint32_t *) DMA_value,6);
会导致while循环中的delay延时函数失效,具体情况是: 不打开ADC,delay函数正常使用,可以1S打印一次信息, 但是打开HAL_ADC_Start_DMA( hadc1,(uint32_t *) DMA_value,6);函数后,打印频率不是1S,而是比1S快 同样,只使用ADC不使用DMA,在while循环之前打开HAL_ADC_Start_IT( hadc1);,可以1S打印一次信息, 但是如果同时打开HAL_ADC_Start_IT( hadc1);和HAL_ADC_Start( hadc1);,就会导致打印的频率比1S快 有没有大佬知道如何解决问题 |
|
相关推荐
1个回答
|
|
在使用DMA传输ADC数据时,可能会引发中断程序的竞争条件,从而导致delay函数无法正常工作。为了解决这个问题,可以尝试以下几种方式:
1. 使用操作系统的定时器模块:如果你的项目使用了操作系统(如FreeRTOS),你可以使用其提供的定时器模块来代替delay函数,以避免竞争条件。 2. 使用硬件定时器:将定时器配置为适当的频率,然后在定时器中断中执行所需的延时操作。 3. 单独的延时循环:在主函数中添加一个单独的延时循环,通过延时循环来实现所需的延时操作。可以使用一个计数器变量,在while循环中不断递增,并在达到一定值时执行所需的操作。 4. 改变优先级:尝试调整ADC和DMA中断的优先级,确保DMA中断具有较高的优先级,可以通过`HAL_NVIC_SetPriority()`函数来实现。 5. 将ADC转换为单次模式:将ADC的转换模式从连续模式改为单次模式,这样可以避免出现竞争条件。 6. 增加延时:在DMA传输之前,在调用`HAL_ADC_Start_DMA`函数之前增加一个适当的延时,以确保之前的delay函数能够正常执行。 请注意,以上解决方案可能需要根据具体的应用场景和代码实现进行调整和优化。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 09:42 , Processed in 0.795472 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号