-
关于GD32F303RCT6的TImer0 CH0的PWM问题
我在使用Timer0的CH0控制蜂鸣器时发现一个奇怪的现象,问题如下:1、我把Timer0的CH0配置PWM用于控制蜂鸣器。2、在前期开发过程都一直正常3、随着开发代码量的增加,增加的代码量是应用层的代码,与硬件控制无关,发现在代码量超出一定值时,PWM变成无输出了!!具体编译后的代码情况如下:PWM正常时:ProgramSize:Code=46006RO-data=3118RW-data=2628ZI-data=30524PWM无输出时:ProgramSize:Code=46058RO-data=3118RW-data=2628ZI-data=305244、蜂鸣器的定时器开关在systick中断执行。5、进一步分析:我把定时器的溢出及比较中断打开,在中断发生时,输出调试信息,发现中断正常运行现在的解决方案:把定时器配置成普通16位定时器,在中断中手动翻转输出信号,是正常的。以上问题,有哪位大咖能解释下吗?
2025-06-15 4 -
华大hc32f460 DMA问题
最近项目拟用华大的HC32F460,在开发过程,遇到一个奇怪问题,我准备用DMA来传递数据,用定时器的比较匹配事件来触发DMA,发现无法启动DMA(定时器的比较匹配功能正常,有PWM波形输出)。如果改用定时器上溢事件启动DMA,DMA可以正常启动,不知道是何原因?测试代码如下:voiddma_rs232_init(){stc_dma_config_tstcDmaCfg;stc_irq_regi_conf_tstcIrqRegiConf;MEM_ZERO_STRUCT(stcDmaCfg);stcDmaCfg.u16BlockSize=1;stcDmaCfg.u16TransferCnt=0;stcDmaCfg.u32SrcAddr=(uint32_t)(&rs232_data);/*源地址*/stcDmaCfg.u32DesAddr=(uint32_t)(&(M4_USART1->DR));/*串口发送寄存器地址*/stcDmaCfg.u16SrcRptSize=1;stcDmaCfg.u16DesRptSize=1;stcDmaCfg.stcDmaChCfg.enSrcRptEn=Disable;stcDmaCfg.stcDmaChCfg.enDesRptEn=Disable;stcDmaCfg.stcDmaChCfg.enSrcInc=AddressFix;stcDmaCfg.stcDmaChCfg.enDesInc=AddressFix;stcDmaCfg.stcDmaChCfg.enTrnWidth=Dma8Bit;stcDmaCfg.stcDmaChCfg.enLlpEn=Disable;stcDmaCfg.stcDmaChCfg.enIntEn=Enable;PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_DMA1,Enable);DMA_Cmd(M4_DMA1,Enable);DMA_InitChannel(M4_DMA1,DmaCh1,&stcDmaCfg);DMA_ChannelCmd(M4_DMA1,DmaCh1,Enable);DMA_ClearIrqFlag(M4_DMA1,DmaCh1,TrnCpltIrq);/*配置DMA中断*/MEM_ZERO_STRUCT(stcIrqRegiConf);stcIrqRegiConf.enIntSrc=INT_DMA1_BTC1;stcIrqRegiConf.enIRQn=DMA_IRQn2;stcIrqRegiConf.pfnCallback=&dma1_ch1_tran_irq_callback;enIrqRegistration(&stcIrqRegiConf);NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);NVIC_SetPriority(stcIrqRegiConf.enIRQn,DMA_IRQn2_PRI);NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_AOS,Enable);DMA_SetTriggerSrc(M4_DMA1,DmaCh1,EVT_TMRA2_CMP);/*TIMRA_2的比较匹配*/}以上代码,无法启动DMA,串口无法发送数据如果改为DMA_SetTriggerS
2022-11-28 2