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

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

文章目录

  • 一、定时器
    • (1) 简介
      • STM32定时器计算公式
    • (2) 示例代码(基本定时功能)
    • (3) 仿真效果 (基本定时功能)
    • (4) 示例代码(PWM 呼吸灯)
    • (5) 仿真效果 (PWM 呼吸灯)

一、定时器

(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

(2) 示例代码(基本定时功能)

#include "sys.h"
#include "stm32f10x_conf.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "tim.h"
#include 
#include 

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) {
      
    }
}

(3) 仿真效果 (基本定时功能)

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现定时器_第1张图片

(4) 示例代码(PWM 呼吸灯)

todo

(5) 仿真效果 (PWM 呼吸灯)

todo

你可能感兴趣的:(#,stm32,单片机,嵌入式硬件)