
你好: 我的目的是使用G474的HRTIM 做平均电流控制电源环路: 想法是:使用HRTIM A 、B做移相控制,HRTIM A、B设置comp1和comp2做占空比控制,频率20KHz,设置HRTIM A设置comp3作为ADC触发源;ADC启动DMA,并使用DMA中断来处理ADC数据和环2路计算。 问题:当开启HRTIMA 的中断和DMA ADC中断后,DMA ADC中断一直被触发,系统其他的部分一直得不到运行,优先级也对该过,任然是一样的一直在DMA ADC中断。 现象1:关闭DMA ADC中断后,程序正常运行; 请教一下,如果使用HRTIM A触发ADC,使用ADC的DMA中断接受数据,该怎么处理呢? 谢谢 |
STM432G4单片机IAP程序+上位机
关于STM32G474 双BANK的测试问题
STM32G473 flash擦除时程序卡死
STSPIN32G4内部驱动电压输出问题
comp输出用于tim1刹车,消隐源和pwm输出是不是得是同一个TIM?
STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?
workbench6.3.2生成的代码,无法用pilot电机参数识别,无法通讯
stm32G474的flash模式如何判定?single bank 和dual bank
STM32G474高精度定时器HRTIM配置死区互补PWM极端输出问题
hrtim里update reset和reset update同时打开不会互相激励吗,另外为什么现在定时器周期值不用-1了
[md]你要注意一点,
你现在的DMA配置在循环模式,如果定时器频繁地触发ADC的话,
也就意味着频繁产生DMA完成中断。该中断如果总是频繁产生,势必
会对任务调度有影响。这个地方要合理规划下。
你说 DMA ADC中断一直被触发,到底是什么中断呢?ADC的EOC中断还是DMA传输中断,它又分半传输和传输完成中断。
你现在想通过TIMER触发ADC,使用DMA搬运数据。这时,一般是没必要开启ADC的EOC中断的。
如果使用CubeMx配置及Cube库API的话,DMA的半传输和传输完成中断都是默认开启了的,我们
基于传输完成或半完成中断处理数据即可。如果说你的TIMER触发是没完没了的循环的话,利用半传输
完成中断来处理接收数据是个不错的选择。
如基于库提供的回调函数来写代码的话,只需添加用户处理代码,标志位都交给库代码完成了。
如果全部是自己编写的代码,记得做中断标志的清零处理。
你好!是HRIM 触发ADC ,然后启动DMA完成中断,来处理数据。使用的是HAL的接口;ADC中关联DMA channel 1:
hdma_adc1.Instance = DMA1_Channel1; hdma_adc1.Init.Request = DMA_REQUEST_ADC1; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH;
在DMA.C中配置DMA1_Channel1中断:
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 3, 0); HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
在void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)中处理数据。
在主任务中开启ADC MDA:
ADC1_StartDMA();
运行程序,DMA中断就会导致UCOS系统的是任务不发正常调度了。UCOS的系统时钟用的SysTick的优先级为:
define TICK_INT_PRIORITY 2U
非常感谢!在您的帮助下问题已经。