【STM32】快速使用F407通用定时器输出可变PWM

网上的文章太啰嗦,这里直接开始。 

使用的是STM32CubeIDE,HAL。以通用定时器TIM12在 通道2上输出1KHz的PWM为例。

要确定输出的引脚、定时器连接在哪里。

TIM2、3、4、5、12、13、14APB1上,最大计数频率84M

TIM1、8、9、10、11APB2上,最大计数频率168M

硬件配置

主要关注图中圈起来的部分。

  1. 选择输出通道。这个看你选的引脚和定时器搭配。图中是PB15,TIM12_CH2
  2. 预分频 Prescaler。APB1/2总线除以这个数就是定时器计数周期。图中是84M/840=100KHz,计数1次 = 0.01ms。
  3. 计数次数ARR。从0计数到ARR时,输出一个PWM周期。这里100*0.01ms=1ms,那么PWM=1KHz
  4. PWM模式。mode1时,在计数值<CCR,输出有效电平;mode2,在计数值<CCR,输出无效电平。
  5. Pulse。有效电平时间计数CCR,计数到CCR时切换高低电平。
  6. CH Polarity。输出极性即有效电平为高还是低。

那么按照上图的配置,用定时器12在CH2生成PWM。PWM的频率为1KHz,高/低电平=0.5ms,占空比50%,有效电平为低。

软件使用

在使用MX初始化后,开启定时器,开启PWM输出就可以了。下面用中断的方式开启,也可以不用中断。

  MX_TIM12_Init();
  HAL_TIM_Base_Start_IT(&htim12);
  HAL_TIM_PWM_Start_IT(&htim12, TIM_CHANNEL_2);

改变占空比。CCR从0~100对应占空比0%~100%(按照安图上的配置)

      __HAL_TIM_SetCompare(&htim12, TIM_CHANNEL_2, CCR);

改变频率

      __HAL_TIM_SET_AUTORELOAD(&htim12, ARR);

相关推荐

  1. GD32F4xx 通用定时器输出PWM

    2024-05-01 09:02:01       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-01 09:02:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-01 09:02:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-01 09:02:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-01 09:02:01       20 阅读

热门阅读

  1. P1025 [NOIP2001 提高组] 数的划分

    2024-05-01 09:02:01       13 阅读
  2. 大数据开发——PostgreSQL

    2024-05-01 09:02:01       10 阅读
  3. GIT使用

    GIT使用

    2024-05-01 09:02:01      9 阅读
  4. FFmpeg基础知识详解:音频视频处理的强大工具

    2024-05-01 09:02:01       15 阅读
  5. 使用Redis实现游戏排行榜

    2024-05-01 09:02:01       14 阅读
  6. 【C++之模板进阶知识】

    2024-05-01 09:02:01       11 阅读
  7. express graphql增删改查

    2024-05-01 09:02:01       10 阅读
  8. 4.30进程

    2024-05-01 09:02:01       10 阅读
  9. 2024-04-30 区块链-加密数字货币-法律风险-分析

    2024-05-01 09:02:01       12 阅读
  10. pnpm:基础使用及详解

    2024-05-01 09:02:01       13 阅读