-
使用两个定时器输出PWM卡死
请教各位大牛一个问题,卡住我几天了。我使用如下定时器配置PWM,如下示:PA6->PWM0tim1_cha(4)PA7->PWM1tim2_cha(5)PB0->PWM2tim3_ch1b(2)在应行如下初始化代码后,直接卡死了,请问是什么原因呢voidpwm_init(){Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);//端口外设时钟使能TimerPortCfg(PWM0);TimerPortCfg(PWM1);TimerPortCfg(PWM2);Timer1Cfg(100,PWM_DUTY);Bt_M23_EnPWM_Output(TIM1,TRUE,FALSE);//端口输出使能Timer2Cfg(100,PWM_DUTY);Bt_M23_EnPWM_Output(TIM2,TRUE,FALSE);//端口输出使能Timer3Cfg(100,PWM_DUTY);Tim3_M23_EnPWM_Output(TRUE,FALSE);//端口输出使能Bt_M23_Run(TIM2);//运行。Bt_M23_Run(TIM1);//运行。Tim3_M23_Run();//运行。}完整模块代码发下:#include"pwm.h"#include"timer3.h"#include"bt.h"#include"gpio.h"#include"motor.h"volatilecharpwm_duty=95;//PA6->PWM0tim1_cha(4)//PA7->PWM1tim2_cha(5)或tim3_ch0b(4)//PB0->PWM2tim3_ch1b(2)typedefenum{PWM0=0u,PWM1,PWM2,}pwm_index_t;/********************************************************************************中断服务函数******************************************************************************/voidTim1_IRQHandler(void){//Timer1模式23更新中断if(TRUE==Bt_GetIntFlag(TIM1,BtUevIrq)){Bt_M23_CCR_Set(TIM1,BtCCR0A,100-pwm_duty);//设置通道A比较值Bt_ClearIntFlag(TIM1,BtUevIrq);//清中断标志}}voidTim2_IRQHandler(void){//Timer2模式23更新中断if(TRUE==Bt_GetIntFlag(TIM2,BtUevIrq)){Bt_M23_CCR_Set(TIM2,BtCCR0A,100-pwm_duty);//设置通道A比较值Bt_ClearIntFlag(TIM2,BtUevIrq);//清中断标志}}voidTim3_IRQHandler(void){//Timer3模式23更新中断if(TRUE==Tim3_GetIntFlag(Tim3UevIrq)){Tim3_M23_CCR_Set(Tim3CCR1B,100-pwm_duty);//设置CH1通道B比较值Tim3_ClearIntFlag(Tim3UevIrq);/
2024-09-14 8 -
GD32F407使用freeRTOS死机
在GD32F407跑了freeRTOS,串口接收使用了DMA+IDLE中断来实现不定长接收,串口的IDLE中断中接收完数据后,通过事件通知线程执行解析,但是中断中调用xEventGroupSetBitsFromISR函数后就会死机
2024-05-31 56 -
GD32F303 使用KEIL仿真,JLINK连不上什么原因?
GD32F303使用KEIL仿真,JLINK连不上什么原因?需要怎么设置?
2024-01-24 65 -
HC32L110 采集ADC有可能一直没有值吗
先说现象:1.试产了1000个大约有20个,ADC采样一直通不过。复位以后程序又正常工作,采样正常。2.对不能正常工作的产品测量对应引脚:(1)引脚上模拟信号量在变化,0~3V。(2)ADC连续转换中断有产生,因为我的程序在转换完成中断会关闭ADC使能,把检测口关闭。还把光敏电阻的电源关闭。通过测量光敏电阻电源,和引脚上的变化。确定ADC程序在运行,正常结束。程序结构:1.上电后初始化ADC功能。关闭ADC。因为是低功耗项目,所以不用的时候都关闭了外设。2.在需要的时候,开启转换。转换完成中断后,把ADC值保存在数组中,关闭ADC。3.程序任务判断ADC的值,做出对应动作。出错在这里,外部模拟量变化,这里没有反应。我怀疑是我的ADC设置不对,但是又没有找到哪不对。其中,我实际使用中因为不停的开关BGR,发现BGR的使能时间对结果影响非常大。我实际测试当BGR使能时间大于1ms,结果比较稳定。我程序中是使能了1.5ms才开启的转换。实际电路中因为输入阻抗大,所以程序开启了电压跟随器功能。看具体的操作:需要转换时:开启光敏电源使能对应扫描通道使能ADC时钟使能ADC使能BGR延时1.5ms清除ADC连续转换完成中断标志中断使能复位ADC连续转换状态启动ADC转换ADC中断程序:清除连续转换完成中断获取对应通道ADC值保存在数组中。禁止BGR禁止ADC禁止ADC时钟禁止ADC中断关闭光敏电源使用时:取ADC数据赋给局部变量局部变量参与运算,判断数据在哪个区间段根据区间段做出对应动作。最后,希望有大佬能提供思路。我在考虑是不是要周期性重新初始化ADC,但是这个是治标不治本的办法,我没有找到为什么会出现这个。
2023-12-20 12