输出比较的一点问题
在编写第十一届赛题时发现stm32的输出比较在将占空比设置为0%或100%时是无法达到预期的结果的,因为我们
设置的模式为TIM_OCMode_Toggle所以每次达到比较值就会进行一次翻转。
我的解决方案是通过改变输出模式为TIM_OCMode_Inactive和TIM_OCMode_Active来解决的,每次改变占空比
会进行一次模式处理。
在这里要注意因为这是在程序中要反复调用的函数所以直接进行寄存器操作会提高效率。但始终会消耗资源,所
以也正在寻找是否有更高效的方案。
//怕以后忘记写所以在这里
void Duty_Deal()
{
switch ((uint)(setDuty1*100))
{
case 0:
{
TIM3->CCMR1&=0xff0f; //
TIM3->CCMR1|=0x0010;// TIM_OCMode_Active
}break;
case 100:
{
TIM3->CCMR1&=0xff0f;
TIM3->CCMR1|=0x0020;//TIM_OCMode_Inactive
}break;
default:
{
TIM3->CCMR1&=0xff0f;
TIM3->CCMR1|=0x0030;//TIM_OCMode_Toggle
}break;
}
switch ((uint)(setDuty2*100))
{
case 0:
{
TIM3->CCMR1&=0x0fff;
TIM3->CCMR1|=0x1000;//TIM_OCMode_Active
}break;
case 100:
{
TIM3->CCMR1&=0x0fff;
TIM3->CCMR1|=0x2000;//TIM_OCMode_Inactive
}break;
default:
{
TIM3->CCMR1&=0x0fff;
TIM3->CCMR1|=0x3000;//TIM_OCMode_Toggle
}break;
}
}