上一篇:
[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键
[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集
一、定时器
(1) 简介
- 基本定时功能:1秒钟进入定时器中断干一件事,类似手机设置闹钟。
- 输入捕获功能:记录车轮滚动次数。
- 输出比较功能:生成精确的周期性信号或触发特定时序的操作
- PWM生成功能:用于控制电机速度、LED亮度调节,风扇风速调节等等。
- 编码器接口功能:旋转按钮、鼠标滚轮等等。
- 高级定时功能:实现更复杂的定时和PWM应用。
STM32定时器计算公式
先上公式:
Tout = ((arr+1)*(psc+1))/Tclk ;
其中:
Tclk:定时器的输入时钟频率(单位MHZ)
Tout:定时器溢出时间(单位为s)
例如:
TIM1_Init();
TIM_Period = arr; eg;9
TIM_Prescaler = psc; eg:7199
以STM32F103ZET6为例,其时钟工作频率为72MHZ,即:
Tout = ((9+1)×(7199+1))/72000000 = 0.001s = 1ms
二、基本定时功能
设置一个时间,每次按这个时间执行功能。
生活中的闹钟、空调定时,都是这样实现的。
(1) 示例代码
#include "sys.h"
#include "stm32f10x_conf.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "tim.h"
#include <stdint.h>
#include <stdio.h>
uint32_t cnt = 0;
void TIM1_UP_IRQHandler(void) {
cnt++;
if (cnt >= 100000) { // 实际计数1000次,由于仿真时间不准确,所以这里写100000
cnt = 0;
LED = !LED;
}
}
int main() {
// LED初始化
LED_Init();
//串口初始化
uart_init(115200);
// 初始化定时器1
TIM1_Init();
while(1) {
}
}
(2) 仿真效果
三、PWM 呼吸灯
电路如图,(TIM3,通道1)–> PA6
(1) 示例代码
#include <stdint.h>
#include <stdio.h>
#include "sys.h"
#include "stm32f10x_conf.h"
#include "delay.h"
#include "pwm.h"
int main() {
// 初始化PWM (定时器3)
PWM_Init();
while(1) {
// 亮度逐渐变亮
for (uint8_t i = 0; i < 255; i++) {
TIM_SetCompare1(TIM3,i);
delay_ms(1);
}
delay_ms(100);
// 亮度逐渐变暗
for (uint8_t i = 255; i > 0; i--) {
TIM_SetCompare1(TIM3,i);
delay_ms(1);
}
delay_ms(100);
}
}
(2) 仿真效果
下一篇:
[嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器