tmr dma报错

tmr dma报错,如下程序,为将输出脉冲停止下来,我在中断中将新的数组付给脉冲,但会报错

#include "ledpwm.h"

#include "CH57x_common.h"

__attribute__((aligned(4))) uint32_t PwmBuf[100];

__attribute__((aligned(4))) uint32_t PwmBuf1[100];

volatile uint8_t capFlag = 0;

void maichong()

{

  GPIOB_ModeCfg(GPIO_Pin_11, GPIO_ModeOut_PP_5mA);

  GPIOPinRemap(ENABLE, RB_PIN_TMR2);

  PRINT("TMR2 DMA PWM\n");

  TMR2_PWMCycleCfg(120000); // 周期 2000us

  PwmBuf[0]=12000;

  PwmBuf[1]=1200;

  PwmBuf[2]=120;

  TMR2_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf[0], (uint16_t)(uint32_t)&PwmBuf[2], Mode_Single);

  TMR2_PWMInit(High_Level, PWM_Times_1);

  /* 开启计数溢出中断,计满1000个周期进入中断 */

  TMR2_ClearITFlag(TMR1_2_IT_DMA_END);

  PFIC_EnableIRQ(TMR2_IRQn);

  TMR2_ITCfg(ENABLE, TMR1_2_IT_DMA_END);

}

__attribute__((interrupt("WCH-Interrupt-fast")))

__attribute__((section(".highcode")))

void TMR2_IRQHandler(void)

{

    if(TMR2_GetITFlag(TMR0_3_IT_CYC_END))

    {

        TMR2_ClearITFlag(TMR0_3_IT_CYC_END);

        /* 计数器计满,硬件自动清零,重新开始计数 */

        /* 用户可自行添加需要的处理 */

    }

    if(TMR2_GetITFlag(TMR1_2_IT_DMA_END))

    {

        TMR2_ClearITFlag(TMR1_2_IT_DMA_END);

        PwmBuf1[0]=0;

        PwmBuf1[1]=0;

        PwmBuf1[2]=0;

         TMR2_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf1[0], (uint16_t)(uint32_t)&PwmBuf1[2], Mode_Single);

        /* DMA 结束 */

        /* 用户可自行添加需要的处理 */

    }

}

1721466323356.png

检查这个c文件是否有包含,如果显示灰色,可以鼠标右击放在c文件,include。

image.png

停止脉冲可以参考博客:

CH58xPWM功能 - SweetTea_lllpc - 博客园 (cnblogs.com)


只有登录才能回复,可以选择微信账号登录