
你好: 我的目的是使用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中断接受数据,该怎么处理呢? 谢谢 |
最近在做单极倍频SPWM
stm32G474RBT3的flash擦除寿命是多少?
stm32g431rbt怎么显示汉字
F103和G474的180°移相區別
STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?
STM32G431K COMP 比较器下降沿中断
STSPIN32G4内部驱动电压输出问题
STM32G431 用MCSDK5.4.8 进行PMSM永磁同步电机FOC控制,转速上升到某一值(3500rpm)无法继续上升,上不去
STM32G431CBU6 驱动STDRIVE101,自己配置的PWM互补输出,死区时间为500ns,为什么STDRIVE101的报警灯会亮,CP接10K接地了,scref接的+5V
STM32G474, I2C设备地址,总出现多余地址0x20,是什么原因?
[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
非常感谢!在您的帮助下问题已经。