STM32 LL库+STM32CubeMX--LED呼吸灯

一、前期准备

  1. 硬件:STM32F103C8T6开发板
  2. 调试工具:DAPLink(本次使用)或USB-TTL
  3. 开发环境:STM32CubeMX、Keil、Vscode(可选)
  4. LED:使用PA0(TIM2_CH1)输出PWM,LED的阴极接GND

二、使用定时器中断产生PWM

STM32F103C8T6在72MHz的计数时钟下,可实现最大59.65s的定时。

  •  STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
  • 时基单元:16位预分频器 + 16位计数器 + 16位自动重装载寄存器

计数模式:

1. 向上计数模式(常用):从0开始累加,到自动重装值触发中断。

2. 向下计数模式:从自动重装值递减,到0触发中断

3. 中央对齐计数模式:从0开始累加,到自动重装载值触发中断,然后递减,到0再次触发中断。常用于电机控制的SVPWM算法中。

TIM输出比较原理:

  • OC(Output Compare):输出比较,输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道OC1~4
  • CCR(Capture Compare):捕获比较寄存器

PWM(Pulse Width Modulation)脉冲宽度调制

  1. 频率 = 1 / TS,一般在 几kHz~几十kHz。
  2. 占空比 = TON / TS
  3. 分辨率 = 占空比变化步距,也就是占空比变化的精细程度。一般1%足够使用。

注:定时中断的频率就是PWM波的频率,只不过占空比的变化范围由自动重装载值ARR决定。

输出比较模式:常用PWM模式1

 

2.1 PWM参数计算

  • PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
  • PWM占空比: Duty = CCR / (ARR + 1),CCR值可以设置PWM的占空比,因此ARR常设为100-1
  • PWM分辨率: Reso = 1 / (ARR + 1),即PWM的步长

参数说明:

  • CK_PSC:时钟源频率,72MHz
  • PSC:预分频器寄存器的值
  • ARR:自动重装寄存器的值
  • CCR:捕获比较寄存器的值

案例1:假如驱动SG90舵机:PWM频率为50Hz,即周期20ms

  • PSC = 72-1
  • ARR = 20K-1

案例2:输出频率为10K的PWM

  1. 先确定ARR的值:ARR = 100-1
  2. 再设置PSC的值:PSC = 72-1

2.2 STM32F103C8T6通用定时器输出通道

  • 因为涉及到GPIO的复用功能,所以要使用定时器输出PWM时,GPIO的工作模式需要设置为复用推挽输出模式
序号主功能默认复用功能
1PA0TIM2_CH1
2PA1TIM2_CH2
3PA2TIM2_CH3
4PA3TIM2_CH4
5PA6TIM3_CH1
6PA7TIM3_CH2
7PB0TIM3_CH3
8PB1TIM3_CH4
9PB6TIM4_CH1
10PB7TIM4_CH2
11PB8TIM4_CH3
12PB9TIM4_CH4

三、STM32CubeMX配置

1.设置RCC:使用外部高速时钟HSE

 2.SYS配置:配置成 SWD协议下载和调试

3. 定时器配置

使用TIM2,输出PWM频率10K

  • 设置ARR = 100-1
  • 设置PSC = 72-1

TIM2时钟源配置、通道输出配置: GPIO的工作模式会自动被设置为复用推挽输出模式

工作参数设置:PWM模式1

  •  ARR:决定PWM的分辨率
  • CCR:PWM的占空比

4.时钟树配置:72MHz

 5.导出代码:之后步骤参考之前的就可以了

四、程序编写

// 在TIMX_CH1通道上输出占空比为CompareValue的PWM
__STATIC_INLINE void LL_TIM_OC_SetCompareCH1(TIM_TypeDef *TIMx, uint32_t CompareValue)
{
  WRITE_REG(TIMx->CCR1, CompareValue);
}
 /* USER CODE BEGIN WHILE */
  LL_TIM_EnableAllOutputs(TIM2);
  LL_TIM_EnableCounter(TIM2);                        // 使能计数
  LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH1); // 使能输出比较通道
  while (1)
  {
    for (uint16_t i = 0; i <= 100; i++)
    {
      LL_TIM_OC_SetCompareCH1(TIM2, i); // PA0(TIM2_CH1)输出占空比为i的PWM
      LL_mDelay(10);
    }
    for (uint16_t i = 0; i <= 100; i++)
    {
      LL_TIM_OC_SetCompareCH1(TIM2, 100 - i);
      LL_mDelay(10);
    }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
en.stm32cubemx-win-v6-9-1是一个针对STMicroelectronics的STM32微控制器系列的软件工具。这个软件工具可在Windows操作系统上使用,其版本号为6.9.1。 STM32微控制器系列是STMicroelectronics推出的一种低功耗、高性能的微控制器芯片系列。这些微控制器芯片广泛用于嵌入式系统、物联网设备、工业自动化以及各种电子产品中。STM32微控制器系列有多个不同的型号和系列,每个型号都有不同的功能和性能特点。 en.stm32cubemx-win-v6-9-1是用于STM32微控制器系列的软件工具。它具有通过图形化界面进行配置和生成代码的功能,使得开发人员可以更加方便地进行STM32微控制器的软件开发。通过这个软件工具,开发人员可以选择不同的模块、外设和功能,然后生成相应的初始化代码。这个软件工具还可以提供一些自动生成的模版,使得开发人员可以快速开始开发。 除了代码生成外,en.stm32cubemx-win-v6-9-1还提供了一些其他功能。例如,它可以通过图形化界面配置时钟树、引脚映射、中断优先级等。此外,该软件工具还可以集成其他开发环境,例如Keil或IAR,以便更直接地进行代码编辑和编译。 总而言之,en.stm32cubemx-win-v6-9-1是一个用于STM32微控制器系列的软件工具,它提供了图形化界面配置和生成代码的功能,帮助开发人员更方便地进行STM32微控制器的软件开发。它是一个很有用的工具,可以提高开发效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值