史兰昭 发表于 7 天前

PWM输出时相关设置问题

麻烦哪位大神帮忙回复下手册里面有说到:OC1PE必须在通道打开时(PWMA_CCER1寄存器的CC1E = 1)才是可写的,   那么如果是仅用到1通道的负极输出的话,是不是(PWMA_CCER1寄存器的CC1NE = 1)也是可写的。    另外同样的问题提到CC1S仅在通道关闭时(pwma_ccer1寄存器的CC1E=0)才是可写的,那么如果禁用到1通道的负极输出,是不是PWMA_CCER1寄存器的CC1NE = 0)也是可写的。


void user_pwm1n_init(unsigned int frequency)
{
        unsigned long temp_ulong_data = 0;
        unsigned short temp_ushort_data = 0;       
        PWMA_SMCR = 0x00;

        temp_ushort_data = (unsigned short)((unsigned long)((float)SYS_CLK / (SPEED_GRADE + 1) / frequency - 1));
        PWMA_PSCRH = (unsigned char)(temp_ushort_data >> 8);
        PWMA_PSCRL = (unsigned char)temp_ushort_data;
       
               
        PWMA_CCER1 &= ~(0x01 << 2);//关闭通道一
        PWMA_CCMR1 &= ~0x03;         //通道一设置为输出模式,仅在通道一关闭时可写
        PWMA_CCMR1 &= ~(0x07 << 4);//通道一恢复默认值
        PWMA_CCMR1 |= (0x06 << 4);   //通道一设置为PWM模式一        
        PWMA_CCER1 |= (0x01 << 2);   // 1p通道高电平有效, 比较输出使能
PWMA_CCMR1 |= (0x01 << 3);   //开启预装载使能,必须在通道启用后方可写入       

        PWMA_ARRH = (unsigned char)(SPEED_GRADE >> 8);
        PWMA_ARRL = (unsigned char)SPEED_GRADE;               
               

        PWMA_CCR1H = 0;               
        PWMA_CCR1L = 0;
       
       
        PWMA_ENO |= (0x01 << 1);             //开启PWM1n输出               
PWMA_BKR |= 0x80;                  //开启主输出         
         
        PWMA_CR1 |= (0x01 << 7);            //启用预装载寄存器
PWMA_CR1 |= 0x01;                       //开启计数器
PWMA_EGR |= 0x01;                   //产生一个更新事件          
}

附上代码

国芯人工智能 发表于 7 天前

关于PWM输出相关设置的问题,以下是基于手册内容的专业解答:

在使用PWM功能时,寄存器的写入权限通常与通道状态密切相关。根据手册说明,OC1PE(通道1预装载使能)仅在通道开启状态下(即PWMACCER1寄存器中的CC1E位为1)才可被写入。这表明,在通道启用期间,对OC1PE的修改需要确保系统处于稳定状态,以避免因配置变更导致的输出异常。

对于仅使用通道1的负极输出(即CC1NE位为1),该位的可写性同样依赖于通道的状态。根据手册逻辑,CC1NE的写入权限应与CC1E保持一致,即当CC1E为1时,CC1NE也应具备可写性。因此,在仅使用负极输出的情况下,若通道已启用(CC1E=1),则CC1NE位是可以被修改的。

关于CC1S(通道1模式选择)的写入权限,手册明确指出其仅在通道关闭状态下(CC1E=0)才可被写入。这意味着,当通道未启用时,方可对CC1S进行配置。同理,若禁用通道1的负极输出(即CC1NE=0),此时通道状态仍由CC1E决定。如果CC1E为0,则CC1NE位同样具备可写性,可用于重新配置负极输出状态。

综上所述,在通道启用(CC1E=1)时,OC1PE和CC1NE均可被写入;而在通道关闭(CC1E=0)时,CC1S和CC1NE均可被修改。实际应用中,建议在配置前确认通道状态,并按照手册要求进行寄存器操作,以确保PWM功能的正确运行。

[本文内容由国芯人工智能辅助生成,仅供参考]

王昱顺 发表于 6 天前

如果想要仅输出负极性PWM,可以使用CCER1中的极性设置为相反来输出,如果想要使用N通道引脚输出负极性,建议正常使能P和N通道,然后通过PWMA_ENO来关闭P通道输出即可
页: [1]
查看完整版本: PWM输出时相关设置问题