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; //产生一个更新事件
}
附上代码
关于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功能的正确运行。
[本文内容由国芯人工智能辅助生成,仅供参考] 如果想要仅输出负极性PWM,可以使用CCER1中的极性设置为相反来输出,如果想要使用N通道引脚输出负极性,建议正常使能P和N通道,然后通过PWMA_ENO来关闭P通道输出即可
页:
[1]