814468684 发表于 2023-5-6 15:59:25

开天斧高级PWM输出指定次数脉冲历程修改 无法输出脉冲

根据历程的硬件PWM计数修改后,无法输出PWM(逻辑分析仪确认),但如果直接将 PWMA_CR1 |= 0x01,输出是正常的。求教!



void PWMA_Init()
{
        P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能

                //Timer0初始化
        AUXR &= 0x7f;    //Timer0 set as 12T, 16 bits timer auto-reload,
        TH0 = 0;
        TL0 = 0;
        ET0 = 0;    //Timer0 interrupt enable
        TR0 = 0;    //Tiner0 run
       
        PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
        PWMA_CCMR1 = 0x68; //通道模式配置:PWM模式1
        PWMA_CCER1 = 0x55; //开启比较输出并使能,高电平有效

        PWMA_PSCRH = (char)(PWM_PSCR>>8);   //设置分频
        PWMA_PSCRL = (char)(PWM_PSCR);
        PWMA_ARRH = (char)(PWM_PERIOD >> 8); //设置周期时间
        PWMA_ARRL = PWM_PERIOD;
        PWMA_CCR1H = (char)(PWM1_Duty >> 8); //设置占空比时间
        PWMA_CCR1L = (char)(PWM1_Duty);
       
        PWMA_ENO = 0x00;
        PWMA_ENO |= ENO1P; //使能PWM1输出
//        PWMA_ENO |= ENO1N; //使能输出

        PWMA_PS = 0x00;//高级 PWM 通道输出脚选择位
        PWMA_PS |= PWM1_2; //选择 PWM1_2 通道

        PWMA_BKR = 0x80; //使能主输出
//        PWMA_CR1 |= 0x01; //ARR预装载,开始计时

        IE2 |= 0x80;   //IE2相关的中断位操作使能后,需要重新设置EUSB
        EA = 1;   //打开总中断

}



//发送指定个数脉冲
void TxPulse(char rep)
{
        if(rep)
        {
                rep -= 1;
                PWMA_RCR = rep; //计数rep+1个脉冲后产生更新事件
                PWMA_CR1 |= 0x89; //ARR预装载,开始计时
        }
}




void main()
{
        Gpio_Init();
        PWMA_Init();
        Delay100us();
//        GetDistance();
//        if(UsFlag)
//        Distance = g_distance;
        TxPulse(20);
        while(1)
        {

        }
       
}


814468684 发表于 2023-5-6 16:19:17

直接烧录了试验箱的例程,用逻辑分析仪看P60,也是没有输出

814468684 发表于 2023-5-6 17:33:26

{:cry:}卡在这里好久了。求各位大神指点

神农鼎 发表于 2023-5-6 18:40:25

我也不懂,我是生产,只会贴图,贴错了,也是你错了






直接下载HEX,
#define   MAIN_Fosc       24000000L         //定义主时钟

烧录时选择 24MHz

页: [1]
查看完整版本: 开天斧高级PWM输出指定次数脉冲历程修改 无法输出脉冲