实验二 呼吸灯功能实验
一、实验目的
1、掌握STM32F103定时器程序设计流程;
2、熟悉STM32固件库的基本使用。
二、实验要求
2.1 实验原理
1、使用SysTick定时方式控制LED闪烁;
2、使用通用定时器产生PWM脉冲,通过调整占空比实现两个目标:
(1)连接到STM32F103上的LED亮度从暗到亮、再从亮到暗,一次循环,实现呼吸灯效果;
(2)使用数字示波器查看PWM的波形图。
2.2 实验软件
电脑、Keil uVision5软件、Proteus 8 Professional软件。
三、实验过程
3.1 代码开发
按照书本中实验流程在Keil中完成中断实验的代码开发;
3.2 原理图设计
在Proteus中完成原理图的设计,下图为呼吸灯实验原理图。
图1 呼吸灯实验原理图
四、实验记录与总结
4.1 核心代码理解
本次实验核心需求在于利用PA7引脚控制LED实现呼吸灯效果。本质在于控制PA7端口生成PWM波形,并自动调整PA7输出的PWM波的占空比展示LED“呼吸”的效果。经查看数据手册得知PA7端口可复用TIM3的通道2,因此可以利用PA7的TIM3通道2的输出比较复用功能生成PWM波。
因此重点在于对PA7复用的TIM3_CH2的配置。首先必然是端口以及TIM3的基本初始化,查看参考手册容易得知TIM3挂载在APB1总线上,GPIOA挂载在APB2总线上,因此开启二者时钟代码如图2所示。
图2 时钟配置
然后对PA7端口进行配置,由于使用复用定时器功能,且要输出PWM波,因此配置为复用推挽输出模式即可,代码如图3所示。
图3 端口配置
接着就是对TIM3的输出比较功能的核心配置。本次使用的是TIM3的通道2,使用其输出比较功能生成PWM波形,因此重点在于使用的计数器频率以及自动重装载值ARR的设定。一般PWM生成使用100作为ARR即可,本次使用10MHz作为系统时钟,为方便计算使用10分频后的时钟作为计数器时钟频率即1us,最后产生一次PWM周期使用0.1ms可以躲避视觉暂留效应。然后计数方式一般为向上计数、高电平为有效电平使用PWM模式1等即可,其他配置一般非必要,最后使能TIM3即可,相关代码如图4所示。
图3 TIM3_CH2配置
最后主函数进行相关初始化并循环中不断高到低、低到高调整占空比即可基本实现LED呼吸灯效果,占空比调整逻辑如图4所示。
图4 占空比调整
4.2 实验结果
在Keil5中编译代码生成hex文件后,进入proteus8仿真环境加载对应hex文件后点击仿真,现象如图5所示。
图5 proteus仿真现象
4.3 问题与想法
1、问题
在代码无致命问题时,对于这种与系统时钟强相关的仿真运行而言,示波器显示PWM占空比变化情况出现逐渐偏离同步变化的情况。
2、想法
个人感觉,尽管proteus8软件仍在更新,但对于STM32单片机的仿真效果再一定条件小仍存在不足与缺陷,也可能受proteus版本影响。
笔者小白,能力有限,以上内容难免存在不足和纰漏,仅供参考,各位阅读时请带着批判性思维学习,遇到问题多查查。同时欢迎各位评论区批评指正。谢谢。