测试STM32库函数TIM_SetCompare()的工作机制
一、TIM_SetCompare()函数的定义
/**
* @brief Sets the TIMx Capture Compare1 Register value
* @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
* @param Compare1: specifies the Capture Compare1 register new value.
* @retval None
*/
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
{
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
/* Set the Capture Compare1 Register value */
TIMx->CCR1 = Compare1;
}
二、各定时器下能输出PWM的GPIO口汇总
三、实验程序
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
TIM3_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz
while(1)
{
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare2(TIM3,led0pwmval);
}
}
四、示波器测试结果分析
– 从示波器结果可以看出:
1.执行TIM_SetCompare()函数会将每个PWM周期完整的运行完毕,不会存在还未运行完毕就被打断的情况;
2.TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)函数中的第二个入口参数“uint16_t Compare2”,它的值是在上一个周期运行完毕之后,系统再给它赋值的;
3.TIM_SetCompare()函数的运行,并不会影响其他函数的正常运行,例如本例程中,运行TIM_SetCompare()函数并不会影响上面“if 函数”,TIM_SetCompare()在产生一个PWM周期的过程中,其他程序正常运转。