一、实验内容和任务
深入了解STM32定时器原理,掌握脉宽调制pwm生成方法。
一.使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin(与GPIOx管脚复用,见下图),连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。
二. 接上,采用定时器pwm模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒,自己调整到一个满意效果。使用Keil虚拟示波器,观察 pwm输出波形。
三. 再接上,采用定时器的另外一个通道,编程采集上面的pwm输出信号,获得其周期和脉宽,并重定向输出到串口显示。
四. 学习 HC-SR04超声波测距模块工作原理,使用 stm32F103 完成一个超声波测距方案(第9周之前选做)。基于STM32和HC-SR04模块实现超声波测距功能 - 知乎基于STM32和HC-SR04模块实现超声波测距功能(标准库)
二、实验要求
1. 分组要求:每个学生独立完成,即1人1组。
2. 程序及报告文档要求:具有较好的可读性,如叙述准确、标注明确、截图清晰等。
3.把项目完整打包为 zip 文件,与实验报告(Markdown 源码及 PDF 文件)、作业博客地址一起提交到学习通。
三. 实验过程介绍 (此处可以填博客内容)
## 1.创建项目选择芯片
选择STM32F103C8T6
2.SYS设置
3.RCC设置
4.GPIO设置
5.TIM2设置
6.NVIC设置
7.clock设置
8.生成代码
在main.c文件中添加如下内容
该函数表示启动相应的定时器,“h”表示HAL库,“tim2”表示定时器2。所以这行代码的意思就是启动定时器2。
代码如下:
该函数为定时器的中断回调函数,当产生定时中断的时候,会自动调用这个函数。在函数内部定义了一个静态变量:time_cnt。当它大于等于100的时候,才会执行if里面的代码。也就是说需要发生100次中断,才会让LED的状态翻转。前面已经算过了,一次定时中断的时间是0.005秒,所以100次中断的时间是0.005*100=0.5秒。也就是说每隔0.5秒,LED的状态翻转一次。
修改后,保存,编译、下载,重新上电。可以看到LED1差不多每隔0.5秒翻转一次,实现了我们想要的效果。
9.烧录
9.实验效果