文章目录
1.通过定时器Timer方式实现时间的精准控制,设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。
1.打开STM32CubeMX,点击“ACCESS TO MCU SELECTOR"创建工程,选择STM32F103C8。
2.设置RCC,“High Speed Clock(HSE)选择”Crystal、Ceramic Resonator”。
3.设置SYS,“Debug "选择“SerialWire”。
4.配置IO口,LED灯配置PB4.
5.设置定时器TIM,设置两个定时器,一个控制LED灯的周期性熄亮,一个控制输出”hello windows“。选择TIM2和TIM3。”Timer----->Tim2----->Clock Source(选择 Internal Clock)—>Parameter Settings",TIM3也一样。
系统处理时,分频系数会自动加上1,所以分频系数是72.时钟设置为72MHz,分频后得到1MHz的时钟。1MHz的时钟,计数5000次,得到时间5000/1000000=0.005S.即每个0.005秒,定时器2、3会产生一次定时中断。
6.设置中断。开启定时器TIM的中断:“NVIC----->NVIC–勾选”TIM2 global interrupt"。TIM3也一样。
生成定时器TIM的中断优先级配置代码。:“NVIC—>Code generation----》勾选”TIM2 global interrupt“。TIM3也一样。
7.设置时钟。如图。
8.设置Project Manager
创建完成。
9.增添代码
9.1 把要输出的字符串 保存在一个字符数组中。
9.2 启动定时器2、3.
该函数表示启动相应的定时器,“h”表示HAL库,“tim2”表示定时器2。所以这行代码的意思就是启动定时器2、3。
9.3
定时器中断回调函数。当产生中断的时候,会调用此函数。
设置一个静态变量time,一次中断的时间是0.005S,LED灯每隔两秒熄灭交替,所以需要400次中断。静态变量 time3,每隔5S 输出”hello Windows“ 所以需要1000次中断。
结果:
di7zhou
编译无误。
管脚连接:
led长脚------------PB4.
led短脚------------Gun.
2.使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED,实现2个 LED呼吸灯的效果。
1.打开STM32CubeMX,点击“ACCESS TO MCU SELECTOR"创建工程,选择STM32F103C8。
2.设置RCC,“High Speed Clock(HSE)选择”Crystal、Ceramic Resonator”。
3.设置SYS,“Debug "选择“SerialWire”。
4.设置TIM3和TIM4。选用TIM3的通道2,如图,TIM4也是如此
5.时钟设置如图。
6.跟之前一样设置“Project Manager”。
创建完成。
7.添加代码
7.1
定义变量存储占空比设为0。
7.2开启TIM3、4通道,输出PWM.
7.3
占空比函数__HAL_TIM_SetCompare(),占空比超过200自动变0;。抓捕、比较寄存器TIM->CCR。
8.编译无误
结果:
di7zhou 1
总结
把重要的函数多看几遍,思考,上网查查资料加深理解还是能做出来的。
参考链接
http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/
http://www.mcublog.cn/stm32/2021_01/stm32cubemx-pwm-huxideng/
https://blog.csdn.net/zmhDD/article/details/111942507
https://blog.csdn.net/qq_45237293/article/details/111997424