定时器&PWM练习

目录

一、串口定时输出以及LED定时闪烁

 1.定时器原理(STM32F103C8T6)

1)定时器功能

2)定时器分类

3)定时器计数模式

4)通用定时器PWM工作原理

5)PWM输出模式

2.HAL库建立

1)新建工程

2)开始工程参数配置

 3.源程序

1)启动相应定时器(TIM2、TIM3)

2)串口通信

3)定时器回调函数

4)main.c

5)电路连接

6)编译运行

7)烧录运行

 二、PWM呼吸灯

 1.HAL库建立

 1)新建工程

 2)开始工程参数配置

 2.源程序

1)定义变量

 2)启动定时器,输出PWM

 3)设置周期

 4)main.c

 5)电路连接

 6)编译运行

 7)烧录运行

三、总结


一、串口定时输出以及LED定时闪烁

 1.定时器原理(STM32F103C8T6)

 1)定时器功能

定时、输出比较、输入捕获、互补输出,其中基本定时器只有定时功能、通用定时器只没有互补输出功能、高级定时器具有所有功能。

 2)定时器分类

(1)基本定时器:TIM6、7
(2)通用定时器:TIM2~TIM5
(3)高级定时器:TIM1、8

这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式

基本定时器(TIM6、TIM7)的主要功能:
只有最基本的定时功能,。基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动

通用定时器(TIM2~TIM5)的主要功能:
除了基本的定时器的功能外,还具有测量输入信号的脉冲长度( 输入捕获) 或者产生输出波形( 输出比较和PWM)

高级定时器(TIM1、TIM8)的主要功能:
高级定时器不但具有基本,通用定时器的所有的功能,还具有控制交直流电动机所有的功能,你比如它可以输出6路互补带死区的信号,刹车功能等

3)定时器计数模式

向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时
向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时
中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。(此种技术方法也可叫向上/向下计数)

4)通用定时器PWM工作原理

以PWM模式2,定时器3向上计数,有效电平是高电平,定时器3的第3个PWM通道为例:

定时器3的第3个PWM通道对应是PB0这引脚,三角顶点的值就是TIM3_ARR寄存器的值,上图这条红线的值就TIM3_CCR3
当定时器3的计数器(TIM3_CNT)刚开始计数的时候是小于捕获/比较寄存器(TIM3_CCR3)的值,
此时PB0输出低电平,随着计数器(TIM3_CNT)值慢慢的增加,
当计数器(TIM3_CNT)大于捕获/比较寄存器(TIM3_CCR3)的值时,这时PB0电平就会翻转,输出高电平,计数器(TIM3_CNT)的值继续增加,
当TIM3_CNT=TIM3_ARR的值时,TIM3_CNT重新回到0继续计数,PB0电平翻转,输出低电平,此时一个完整的PWM信号就诞生了。

5)PWM输出模式

STM32的PWM输出有两种模式:
模式1(110)和模式2(111),由TIMx_CCMRx寄存器中的OCxM位确定的。区别如下:
110:PWM模式1,在向上计数时,一旦TIMx_CNT
在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。

2.HAL库建立

1)新建工程

新建工程,选择STM32F103C8T6芯片

2)开始工程参数配置

 (1)配置复位和时钟

选择System Core进行配置

RCC

 

SYS

 

选择A0作为LED输出(可以自己设置输出引脚)

(2)定时器配置

这里选择TIM2、TIM3

选中Clock Source选择Internal Clock

选中Parameter Settings对其中参数进行相应配置

TIM2

 

TIM3

 

分频系数那里虽然写的是71,但系统处理时默认加1,所以实际进行的是72分频。由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,计数5000次,得到时间5000/1000000=0.005秒。即每隔0.005秒定时器2会产生一次定时中断。

(3)配置中断

开启TIM2、TIM3的中断

 

生成优先级配置代码

 

(4)时钟配置

选择HSE端口,PLLMul选择*9,选择PLLCLK端口,APB1选择/2。

(5)工程配置

Project

Code Generator

(6)生成工程

生成工程后打开工程进入keil进行下一步

 3.源程序

1)启动相应定时器(TIM2、TIM3)

该函数表示启动相应的定时器,“H”表示HAL库,“tim2”表示定时器2。所以这行代码的意思就是启动定时器2,定时器3。

HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);

2)串口通信

STM32需要给上位机发送的消息,进行串口通信,将其放入后续的定时器中断回调函数

uint8_t hello[20]="Hello Windows!\r\n";
HAL_UART_Transmit(&huart1,hello,20,100000);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值