一、概述
本文主要通过学习定时器、中断知识与相关原理,实现稍微复杂一点的PWM呼吸灯功能,旨在通过此文掌握STM32的相关技能。
题目要求:(1)请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁,实现一个多任务并发运行的功能。
(2)使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。
二、定时器原理
定时器的本身是一个计数器,他记录着时钟信号周期数,每个时钟周期都会使定时器里的计数器增加或减少,当我们知道了时钟周期的频率,算出每个时钟周期的时间,进而就可以通过定时器中的计数器进行定时的操作。
定时器的模式有向上计、向下计、中心计数的模式,以向上计数为例,如下图,当计数值达到重装载值时,触发定时器中断,随后CNT继续从初始值开始计数。
三、定时器中断的配置
首先新建STM32CubeMx工程,并自主完成基础的时钟树配置与工程配置,随后开始进行定时器的配置。
在part name里选择自己的芯片(一般选择直接搜索所需芯片),本文采用STM32F103C8T6点击信息栏中的具体芯片信息选中,点击start project
配置定时器2和定时器3
这里我们使用定时器2和定时器3来实现定时的功能。如图所示,依次点击位置1,选中定时器2;位置2,配置定时器2的时钟源为内部时钟;位置3,分频系数为71,向上计数模式,计数周期为5000,使能自动重载模式。
时钟配置
四、代码编写
(1)启动定时器
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);