当前位置: 首页 > news >正文

STM32进阶 定时器3 通用定时器 案例1:LED呼吸灯——PWM脉冲

功能

它有基本定时器所有功能,还增加以下功能

TIM2、TIM3、TIM4、TIM5

多种时钟源:

外部时钟源模式1:

每个定时器有四个输入通道

只有通道1和通道2的信号可以作为时钟信号源

通道1 和通道2 的信号经过输入滤液和边缘检测器

外部时钟源模式2:

可以向上计数也可以向下计数还可以两者都用(中央对其模式)

输入捕获

输出比较

PWM生成

支持针对定位的增量(正交)编码器和霍尔传感器电路。

框图

通用定时器相关寄存器

捕获比较寄存器TIMx_CCMR1(有四个):输入捕获,输出比较

输出比较8种模式:三位来控制

冻结

强制输出高电平:条件计数器=比较寄存器

强制输出低电平:条件计数器=比较寄存器

输出翻转:等于60 会将电平翻转

强制输出高电平:无条件

强制输出低电平:无条件

PWM模式1:CNT<CCR 输出低电平

CNT>=CCR 输出高电平

PWM模式2:CNT>CCR 输出低电平

CNT<=CCR 输出高电平

OC1M和OC2M是相同的。

先配置CC2S位,配置输入还是输出。

CCM2

剩下两个通道

CCEN

使能

CCR1

比较的值

计数器寄存器TIM_CNT

计数器的值

CR1控制寄存器

配置计数方式,中央

案例1:LED呼吸灯——PWM脉冲

需求

使用通用定时器的输出比较功能

(输出比较功能)专门输出PWM脉冲

输出占空比可调的PWM波形,作用到二极管,使二极管(LED2)呈现呼吸灯的效果。

PWM波:

PWM(Puls-width modulation)脉冲宽度调制,不停地修改高电平的宽度。一般用于控制点击、LED亮度调节等应用。

被控制的电路必须要有一定的“惯性”。

所谓惯性时指,比如LED即使断电了,也不会立即熄灭,点击断定了也不会立即停止。

三个参数:周期、频率、占空比( 正脉冲的持续时间与脉冲总周期的比值。)

输出比较原理:

比较寄存器的值和计数器的进行大小比较

根据比较结果(> = <)不同,产生不同的输出:高电平或者低电平。

比较寄存器中的值不会变,计数器的值会变大或者变小

tim5.c
#include "tim5.h"void TIM5_Init(void){//1. GPIO PA1的配置(是默认复用功能不需要AFIO1)//1.1 放时钟RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;//复用推挽GPIOA->CRL |= GPIO_CRL_CNF1_1;GPIOA->CRL &= ~GPIO_CRL_CNF1_0;GPIOA->CRL |= GPIO_CRL_MODE1;//2.定时器 tim5 的配置//2.1 先放时钟RCC->APB1ENR |= RCC_APB1ENR_TIM5EN;//三大块// 控制器(时钟源)配置 默认不改就是就是72MHz//时基单元//输入和输出通道//2.2 时基单元//2.2.1 计数方向(默认像上,其实可以不用配置)TIM5->CR1 |= TIM_CR1_DIR;//2.2.2 预分频 TIM5->PSC = 7200 - 1;//2.2.3 自动重装载TIM5->ARR = 100 - 1;//3 输入输出通道//3.1 让通道2使用输出模式(默认就是输出,可以不用配置)TIM5->CCMR1 &= ~TIM_CCMR1_CC2S;//3.2 配置比较寄存器 具体的比较模式 (8选1 我们选择PWM模式1)TIM5->CCMR1 |= (TIM_CCMR1_OC2M_1|TIM_CCMR1_OC2M_2);TIM5->CCMR1 &= ~TIM_CCMR1_OC2M_0;//3.3 低电平有效,为了让CCR的值 能很好地表示亮度TIM5->CCER |= TIM_CCER_CC2P;
}void TIM5_PWMStart(void){//计数器是使能TIM5->CR1 |= TIM_CR1_CEN;//通道2使能TIM5->CCER |= TIM_CCER_CC2E;
}void TIM5_PWMStop(void){//关闭计数器使能TIM5->CR1 &= ~TIM_CR1_CEN;//关闭通道2使能TIM5->CCER &= ~TIM_CCER_CC2E;
}void TIM5_SetDuty(uint16_t duty){TIM5->CCR2 = duty;
}
tim5.h
#ifndef __TIM5_H__
#define __TIM5_H__#include "stm32f10x.h"void TIM5_Init(void);void TIM5_PWMStart(void);void TIM5_PWMStop(void);void TIM5_SetDuty(uint16_t duty);#endif /* __TIM5_H__ */
main.c
#include "usart1.h"
#include "string.h"
#include <stdio.h>
#include "m24c02.h"
#include "i2c.h"
#include "led.h"
#include "systick.h"
#include "tim6.h"
#include "tim5.h"typedef enum {LIGHT,DARK}LED_DIRCT;int main(void)
{TIM5_Init();TIM5_PWMStart();LED_DIRCT direct = LIGHT;while (1){if (direct ==  LIGHT){for (uint8_t i = 0; i < 100; i++){TIM5_SetDuty(i);Delay_ms(10);}direct = DARK;}else if(direct == DARK){for (uint8_t i = 0; i < 100; i++){TIM5_SetDuty(99-i);Delay_ms(10);}direct = LIGHT;}}
}

http://www.lryc.cn/news/497504.html

相关文章:

  • 开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?
  • 930[water]
  • 2024论文翻译 | Multi-Review Fusion-in-Context
  • (78)MPSK基带调制通信系统瑞利平坦衰落信道传输性能的MATLAB仿真
  • 【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)
  • 【金猿CIO展】复旦大学附属中山医院计算机网络中心副主任张俊钦:推进数据安全风险评估,防范化解数据安全风险,筑牢医疗数据安全防线...
  • 工业机器视觉-基于深度学习的水表表盘读数识别
  • 基于ZooKeeper搭建Hadoop高可用集群
  • 力扣88题:合并两个有序数组
  • python 笔记之线程同步和死锁
  • SpringBoot小知识(4):高级配置知识与bean的绑定
  • Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider
  • Lua面向对象实现
  • OpenCV的圆形检测‌HoughCircles
  • iOS视图控制器的生命周期及各阶段的作用
  • 四轮阿克曼(前轮转向、后轮驱动)车子仿真控制
  • Blender均匀放缩模型
  • Python基于 Opencv+wxPython 的人脸识别上课考勤系统,附源码
  • 【AI工具】强大的AI编辑器Cursor详细使用教程
  • DApp开发与APP开发的五大区别
  • 哪款云手机适合多开?常用云手机功能对比
  • Python几种常用数据结构(重制版)
  • C++ 游戏开发:开启游戏世界的编程之旅(2)
  • 用 Python 做数据分析需要掌握哪些基础?
  • UE5 像素流进行内网https证书创建
  • Envoy-istio
  • CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)
  • 【数据结构与算法】排序算法(上)——插入排序与选择排序
  • Linux操作系统性能优化
  • iOS与Windows间传文件