1> 实验目的
通过F407定时器2,比较输出功能(电平翻转模式),在PA15引脚输出上图波形;
2> 理论基础
例如,使用定时器输出通道1,计算器从0~100循环计算,比较寄存器值为50,则每当计数器值为50时,OC1电平翻转;
2.1> 8种输出模式
8种输出模式:【OCxM[2:0]】
1》(000) 冻结:对输出无作用,定时器用于基本定时器功能;
2》(001) 有效电平:TIMx_CNT =TIMxCCRx,OCxREF为高电平;
3》(010) 无效电平:TIMx_CNT =TIMxCCRx,OCxREF为低电平;
4》(011) 电平翻转:TIMx_CNT =TIMxCCRx, OCxREF电平翻转, 可用于控制步进电机;
5》(100) 强制为无效电平: OCxREF = 0;
6》(101) 强制为有效电平: OCxREF = 1;
7》(110) PWM1:
递增计数模式: TIMx_CNT < TIMxCCRx, OCxREF = 1; 否则,OCxREF = 0;
递减计数模式: TIMx_CNT > TIMxCCRx, OCxREF = 0; 否则,OCxREF = 1;
8》(111) PWM2:
递增计数模式: TIMx_CNT < TIMxCCRx, OCxREF = 0; 否则,OCxREF = 1;
递减计数模式: TIMx_CNT > TIMxCCRx, OCxREF = 1; 否则,OCxREF = 0;
3> 硬件电路
4> 程序设计
4.1> Tim2初始化
使能中断:
4.2> Tim2翻转输出
/* 初始化 */
bsp_tim2_init();
/* 启动Tim2 */
HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_1);
/* 中断处理 */
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
printf("HAL_TIM_OC_DelayElapsedCallback");
}