STM32CubeIDE HAL库实现基本定时器及PWM

一、MX的配置

通用定时器设置,选择时钟源为内部时钟,预分频7200得到10KHz的计数频率(以系统时钟72MHz为例),计数重装值为5000-1,则每0.5s会从0计数到4999产生一次更新。开启更新中断响应,即可利用中断每隔0.5s执行相应任务。下图为中断配置:

TIM1和TIM8为高级定时器,这里我们只用到了更新中断。

利用TIM2产生PWM在对应引脚输出的配置:

预分频为0,重装数为1892,大约能产生38KHz的脉冲。其中Pulse为占空,可以填写小于重装数的任意数字。占空比位Pulse值除以重装数。

附:判断一个引脚是否具有定时器输出的功能可以在软件中左键点击引脚,如下图:

例如PA8可以看到可以配置到TIM1的通道1。选中之后,TIM配置里同样也会有选中。在代码生成后,引脚复用的配置也会自动生成(HAL_TIM_MspPostInit)。关于引脚复用的map表可以在STM32参考手册的<通用和复用功能  GPIO/AFIO>中查阅。

二、生成的代码

TIM1初始化函数

牵扯到的中断响应配置:

其中中断响应函数也已经有了,在<stm32f1xx_it.c>内

TIM2的配置

硬件底层配置:

三、用户代码

对于TIM1的定时中断及响应

1. 开启

  HAL_TIM_Base_Start_IT(&htim1);

2. 中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim==(&htim1))
    {
      HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//LED循环1秒亮灭一次
    }
}

3.  关闭

  HAL_TIM_Base_Stop_IT(&htim1);

TIM2产生PWM并输出

1. 重设PWM占空比函数

void user_pwm1_setvalue(uint16_t value)
{
    TIM_OC_InitTypeDef sConfigOC;

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}

2. 调用

user_pwm1_setvalue(946);

 3. 停止

HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);

 

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值