赞
踩
下文出现参考XXX章,默认为 《STM32中文参考手册_V10》里的章节
实现功能:
定时时间计算:
所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 7200 /5000 = 2Hz;
定时时间T = 1 / f 则: 1s / 2Hz = 1000 000us / 2Hz = 500 000us =500ms。
HAL_TIM_Base_Start_IT(&htim6);
int main(void)
{
HAL_TIM_Base_Start_IT(&htim6);
while (1){}
}
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) // 该函数在 stm32f1xx_hal_tim.c 中定义为弱函数(__weak),由用户再定义
{
if(htim == &htim6)
{
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
}
}
/* USER CODE END 1 */
将PE5接到逻辑分析仪,注意前提是已经将PE5初始化为输出,由图可以看出中断周期为500ms
该部分内容实现定时器同步,参考内容如下:
实现功能:TIM1的通道1输出互补PWM,带死区时间,带刹车引脚
其余的参数请参考:《STM32中文参考手册_V10》《零死角玩转STM32—F103霸道》
PWM的频率及周期计算:
芯片的时钟为72MHz;Prescaler为7200;Period为200;且计数方式为向上计数
频率:f = 72M / Prescaler / Period = 72000 000 / 7200 /200 = 50Hz;
周期:T = 1 / f 则: 1s / 50Hz = 1000 000us / 50Hz = 20 000us =20ms。
如果计数方式为中央计数: f = 72M / Prescaler / Period / 2 = 25Hz;T = 40ms
占空比的计算,Period为200;Pulse为100。所以占空比为50%
死区时间计算:
参考 13.4.18 TIM1 和TIM8 刹车和死区寄存器(TIMx_BDTR) 章的 DTG[7:0]
13.4.1 TIM1 和TIM8 控制寄存器 1(TIMx_CR1) 章的 CKD[1:0]
在 main 函数中 MX_TIM1_Init 初始化之后开启CH1和CH1N的PWM输出
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); /*开启CH1的PWM输出*/
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1); /*开启CH1N的PWM输出*/
定时周期计算:
所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 7200 /200 = 50Hz;
定时时间T = 1 / f 则: 1s / 50Hz = 1000 000us / 50Hz = 20 000us =20ms。
int main(void)
{
... /*系统其他的初始化*/
MX_TIM3_Init();
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/
while (1)
{
}
}
定时器TIM3的通道(引脚)映射:
使用逻辑分析仪查看产生的PWM
自定义函数,调节参数可以调节占空比,注意参数范围是0 ~ Counter Period 。
void TIM_SetTIM3Compare1(uint32_t compare)
{
TIM3->CCR1=compare; // 注意该值需要在定时器初始化参数Counter Period 范围内
}
int main(void)
{
... /*系统其他的初始化*/
MX_TIM3_Init();
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/
TIM_SetTIM3Compare1(20);
while (1)
{
}
}
产生的占空比
使用官方函数调节
__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,18);
使用逻辑分析仪查看PWM
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。