实验二 呼吸灯功能实验

一、实验目的

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版本影响。


笔者小白,能力有限,以上内容难免存在不足和纰漏,仅供参考,各位阅读时请带着批判性思维学习,遇到问题多查查。同时欢迎各位评论区批评指正。谢谢。

相关推荐
一路往蓝-Anbo30 分钟前
第 1 篇:对象池模式 (Object Pool) —— 裸机下的动态内存革命
jvm·数据库·stm32·单片机·嵌入式硬件·网络协议·tcp/ip
大神与小汪1 小时前
STM32WB55蓝牙广播数据
stm32·单片机·嵌入式硬件
芯思路2 小时前
STM32开发学习笔记之七【LCD显示图片】
笔记·stm32·学习
秋深枫叶红3 小时前
嵌入式第五十一篇——IMX6ULL中断和EPIT定时器
单片机·嵌入式硬件
【赫兹威客】浩哥3 小时前
【赫兹威客】Arduino安装教程
stm32·单片机·嵌入式硬件
flashier4 小时前
ESP32学习笔记_WiFi(3)——HTTP
网络·笔记·单片机·网络协议·学习·http·esp32
兆龙电子单片机设计4 小时前
【STM32项目开源】STM32单片机智能宠物管家
stm32·单片机·物联网·开源·毕业设计·宠物
阿呀呀呀4 小时前
ESP32复位电路分析
单片机·嵌入式硬件
华清远见IT开放实验室4 小时前
【课程升级】STM32U5体系化课程深度升级!全103集,覆盖裸机开发+TouchGFX图形界面+智能手表项目,从入门到实战!
stm32·单片机·嵌入式硬件·智能手表
一路往蓝-Anbo5 小时前
第 2 篇:单例模式 (Singleton) 与 懒汉式硬件初始化
开发语言·数据结构·stm32·单片机·嵌入式硬件·链表·单例模式