[嵌入式软件][启蒙篇][仿真平台] STM32F103实现定时器

上一篇:
[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键
[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集


一、定时器

(1) 简介

  1. 基本定时功能:1秒钟进入定时器中断干一件事,类似手机设置闹钟。
  2. 输入捕获功能:记录车轮滚动次数。
  3. 输出比较功能:生成精确的周期性信号或触发特定时序的操作
  4. PWM生成功能:用于控制电机速度、LED亮度调节,风扇风速调节等等。
  5. 编码器接口功能:旋转按钮、鼠标滚轮等等。
  6. 高级定时功能:实现更复杂的定时和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实现定时器

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现SPI控制OLED屏幕

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jianqiang.xue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值