【嵌入式07.2】STM32F103C8T6开发板下通过TIM3和TIM4输出PWM波形实现2个 LED呼吸灯的效果

目录

一、题目要求

二、PWM

​(一)什么是PWM

(二)PWM相关概念

1.pwm的频率

2.pwm的周期

3.占空比

(三)PWM输入模式

1.概念

2.PWM输出模式

(四)PWM模式

1.PWM边沿对齐模式

2.PWM中央对齐模式

(五)PWM操作步骤

三、工程建立+代码撰写

(一)CubeMX相关配置

(二)代码撰写

四、电路连接+效果展示

(一)实物图连接

(二)电路连接 

(三)效果展示

五、总结

六、参考文献


一、题目要求

使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。

二、PWM

​ (一)什么是PWM

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。  

(二)PWM相关概念

1.pwm的频率

是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);也就是说一秒钟PWM有多少个周期。单位: Hz


2.pwm的周期

T=1/f;周期=1/频率
如:50Hz = 20ms,如果频率为50Hz ,也就是说一个周期是20ms, 那么一秒钟就有 50次PWM周期。

3.占空比

是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)
表示方式:20%。

周期: 一个脉冲信号的时间 ,1s内测周期次数等于频率
脉宽时间: 高电平时间

比方说周期的时间是10ms,脉宽时间是8ms 那么低电平时间就是2ms, 总的占空比 8/(8+2)= 80%

这就是占空比为80%的脉冲信号。

而我们知道PWM就是脉冲宽度调制通过调节占空比,就可以调节脉冲宽度(脉宽时间) ,而频率就是单位时间内脉冲信号的次数。

以20Hz 占空比为80% 举例,就是1秒钟之内输出了20次脉冲信号,每次的高电平时间为40ms。

(三)PWM输入模式

1.概念

PWM输入捕获模式是输入捕获模式的特例,

输入捕获就是当连接到定时器的引脚上产生电平变化时对应的捕获装置会立即将当前计数值复制到另一个寄存器中。你可以开启捕获中断然后在中断处理函数中读出保存的计数值。

与输入捕获不同的是PWM输入模式会将同一个输入信号(TI1或TI2)连接到两个捕获装置(IC1和IC2)。这两个捕获装置一个捕获上升沿一个捕获下降沿。TI1FP1、TI2FP2它们中的一个被选择为触发输入且从模式控制器被配置为复位模式。

TIMx_CH1引脚输入一个pwm信号,经过输入滤波和边沿检测之后一路(TI1FP1)给到了IC1,一路(TI1FP2)给到了IC2,从而实现两个捕获通道捕获同一个pwm信号。IC1负责测量pwm信号的周期,而IC2负责测量pwm信号的脉宽。

2.PWM输出模式

①PWM模式1

向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

 ②PWM模式2

在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

(四)PWM模式

1.PWM边沿对齐模式

(1)向上计数配置
当TIM1_CR1 寄存器中的DIR位为低的时候执行向上计数。下面是一个PWM模式 1 的例子。当TIM1_CNT<TIM1_CCRx时PWM参考信号 OCxREF为高,否则为低。如果TIM1_CCRx中的比较值大于自动重装载值 (TIM1_ARR),则OCxREF保持为“1”。如果比较值为 0,则OCxREF保持为
“0”。
(2)向下计数配置
        当 TIM1_CR1 寄存器的 DIR 位为高时执行向下计数。 在 PWM 模式 1 ,当 TIM1_CNT>TIM1_CCRx 时参考信号 OCxREF 为低,否则为高。如果 TIM1_CCRx 中的比较值大于 TIM1_ARR 中的自动重装载值,则 OCxREF 保持为“1”。该模式下不能产生 0 %的 PWM 波形。

2.PWM中央对齐模式

      当TIM1_CR1 寄存器中的CMS位不为 00 时为中央对齐模式(所有其他的配置对OCxREF/OCx信号都有相同的作用)。根据不同的CMS位的设置,比较标志可能在计数器向上计数时被置 1、在计数器向下计数时被置 1、或在计数器向上和向下计数时被置 1。TIM1_CR1 寄存器中的计数方向位(DIR)由硬件更新,不要用软件修改它。
   
下图为中央对齐的 PWM 波形的例子,其中
TIM1_ARR=8
PWM 模式 1
TIM1_CR1 寄存器中的 CMS=01 ,在中央对齐模式 1 时,当计数器向下计数时标志被设置

(五)PWM操作步骤

  • 使能定时器和相关IO口时钟。调用函数:RCC_APB1PeriphClockCmd()
  • RCC_APB2PeriphClockCmd();
  • 初始化IO口为复用功能输出。调用函数:GPIO_Init();
  • 这里是要把PB6用作定时器的PWM输出引脚,所以要重映射配置,所以需要开启AFIO时钟,同时设置重映射;调用函数:RCC_APB2PeriphClockCmd();GPIO_PinRemapConfig();
  • 初始化定时器。调用函数:ARR,PSC等:TIM_TimeBaseInit();
  • 初始化输出比较参数。调用函数:TIM_OC2Init();
  • 使能预装载寄存器。调用函数:TIM_OC2PreloadConfig();
  • 使能定时器。调用函数:TIM_Cmd();
  • 不断改变比较值CCRx,达到不同的占空比效果;调用函TIM_SetCompare2()

三、工程建立+代码撰写

(一)CubeMX相关配置

1.选择STM32F103C8T6

 2.RCC配置

3.配置SYS

4.配置TIM3和TIM4

勾选内部时钟Internal Clock

Channel1选择PWM Generation CH1

Prtscaler (定时器分频系数) : 71

Counter Mode(计数模式):Up(向上计数模式)

Counter Period(自动重装载值) : 500

CKD(时钟分频因子) :No Division (不分频 )

 5.配置时钟树

6.接下来生成工程,打开进入Keil进行代码编写。

(二)代码撰写

1.main.c文件下添加全局变量

uint16_t pwm=0; //占空比

 2.main.c文件的while循环之上添加TIM3和TIM4的PWM通道1开启函数

    HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); 
    HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1); 

3.while循环中添加调用函数

while (pwm< 500)
      {
          pwm++;
          __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);  
    __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);              
          HAL_Delay(1);
      }
      while (pwm)
      {
          pwm--;
          __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);    
       __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);  
            
          HAL_Delay(1);
      }
      HAL_Delay(200);

四、电路连接+效果展示

(一)实物图连接

(二)电路连接 

1.STM32F103C8T6和USB to TTL

2.LED和STM32F103C8T6

LED长引脚3V3
LED短引脚PA6
PC13PB6

(三)效果展示

呼吸灯

五、总结

      在同时实现PA6连接的LED与焊接在板子上与PC13连接的LED的呼吸灯之前,单独对焊接在板子上与PC13连接的LED和PA6连接的LED的呼吸灯时,仅实现了外接的LED呼吸灯,即PA6连接的LED的呼吸灯,焊接在板子上的未实现,因为在CubeMX上进行对引脚配置时PB6会出现TIM4_CH1但是PC13并未出现TIM的相关选项,因此无法直接用PC13实现呼吸灯。

六、参考文献

https://blog.csdn.net/as480133937/article/details/103439546

https://blog.csdn.net/u011308691/article/details/38403743

https://blog.csdn.net/gogo0707/article/details/124763231

https://blog.csdn.net/qq_53112972/article/details/127577995

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值