STMCU小助手
发布时间:2022-6-30 19:00
|
硬件设计 硬件电路非常简单,只使用到开发板上的 LED(D7),因为 D7 指示灯接在 PC6 管脚,而通过对 TIM3_CH1 复用功能完全重映射就可以映射到 PC6 脚。所以可以通过 TIM3 的 CH1输出PWM 信号,实现 D7 指示灯呼吸灯的控制。 软件设计 所要实现的功能是:通过 TIM3 的 CH1 输出一个 PWM 信号,控制D7 指示灯由暗变亮,再由亮变暗,类似于人的呼吸。程序框架如下: (1)初始化 PC6 管脚为PWM 输出功能 (2)PWM 输出控制程序 在前面介绍通用定时器PWM配置步骤时,就已经讲解如何初始化 PWM。下面我们打开“\4--实验程序\库函数版\13. PWM 呼吸灯实验”工程,在 APP工程组中可以看到添加了 pwm.c 文件,在 StdPeriph_Driver 工程组中添加了stm32f10x_tim.c 库文件。定时器操作的库函数都放在 stm32f10x_tim.c 和stm32f10x_tim.h 文件中,所以使用到定时器功能就必须加入 stm32f10x_tim.c文件,同时还要包含对应的头文件路径。 TIM3 通道 1的 PWM初始化函数 要使用定时器的 PWM 输出功能,我们必须先对它进行配置。TIM3 通道 1 的PWM 初始化代码如下:
在 TIM3_CH1_PWM_Init()函数中,首先使能 GPIOC 端口时钟、TIM3 时钟和AFIO时钟,其次配置 TIM3_CH1 为完全复用重映射功能,并将 PC6 管脚模式配置为复用推挽输出。然后配置定时器结构体 TIM_TimeBaseInitStructure,初始化PWM 输出参数,由于我们的 LED 指示灯是低电平点亮,而我们希望当 CCR1 的值小的时候,LED 暗, CCR1 值大的时候,LED 亮,所以我们设置为 PWM1 模式,输出极性为低电平,使能 PWM 输出。最后就是开启 TIM3。这一过程在前面步骤介绍中已经提了。程序中我们看到最后调用了 TIM_OC1PreloadConfig()和TIM_ARRPreloadConfig,他们是用来使能 TIM3 在 CCR1 上的预装载寄存器和自动重装载寄存器,第一个库函数必须调用,第二个的话如果不调用也没有关系。 TIM3_CH1_PWM_Init()函数有两个参数,用来设置定时器的自动装载值和分频系数,方便大家修改 PWM频率。 其实如果你会使用通用定时器 TIM3 的 CH1 输出 PWM,那么其他通用定时器通道都一样。 主函数 编写好 PWM 初始化函数后,接下来就可以编写主函数了,代码如下:
主函数实现的功能很简单,首先初始化对应的硬件端口时钟和 IO 口,然后调用我们前面编写的 TIM3_CH1_PWM_Init 函数, 这里我们设定定时器自动重装载值为 500,预分频系数为72-1,定时周期即为 500us,频率即为 2KHz,这里为什么减 1在定时器中断已经介绍。 初始化后,定时器开始工作,PC6 开始输出 PWM 波形,波形频率为 2K,你也可以修改这个频率值,但是要注意,不能将频率设置过大,否则会看到 D7 指示灯有明显的闪烁。通过变量 fx 控制 i 的方向,如果 fx=0,i 值累加,否则递减,然后将这个变化的 i 值传递给TIM_SetCompare1 函数, 这个函数功能是改变占空比的,因此可以实现 D1 指示灯亮度的调节,呈现呼吸灯的效果。程序中将 i 值控制在 300 内,主要是因为 PWM 输出波形占空比达到这个值时,D1 指示灯亮度变化就不明显了,而且我们在初始化定时器时,将自动重装载值设置为499,所以这个i 值也不能超过。 将工程程序编译后下载到开发板内,可以看到 D7 指示灯由暗变亮,再由亮变暗,呈现呼吸灯的效果。 |
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
一个软件引起的 LSE 驱动不良的问题
STM32 GUI LTDC 最大像素时钟评估方法
STM32 Cordic 运算速度评估
全新OpenSTLinux 6.1版本发布
ST-LINK Utility介绍、下载、安装和使用教程
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
微信公众号
手机版