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;}}
}
相关文章:
STM32进阶 定时器3 通用定时器 案例1:LED呼吸灯——PWM脉冲
功能 它有基本定时器所有功能,还增加以下功能 TIM2、TIM3、TIM4、TIM5 多种时钟源: 外部时钟源模式1: 每个定时器有四个输入通道 只有通道1和通道2的信号可以作为时钟信号源 通道1 和通道2 的信号经过输入滤液和边缘检测器 外部时钟源…...
开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?
在选择即时通讯软件时,应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异,因此总结两个点简要分析这两种选择,有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…...
930[water]
算法...
2024论文翻译 | Multi-Review Fusion-in-Context
摘要 接地气的文本生成,包括长篇问答和摘要等任务,需要同时进行内容选择和内容整合。当前的端到端方法由于其不透明性,难以控制和解释。因此,近期的研究提出了一个模块化方法,每个步骤都有独立的组件。具体来说&#…...
(78)MPSK基带调制通信系统瑞利平坦衰落信道传输性能的MATLAB仿真
文章目录 前言一、MATLAB仿真1.仿真代码2.仿真结果 二、子函数与完整代码总结 前言 本文给出瑞利平坦衰落信道上的M-PSK通信系统性能仿真的MATLAB源代码与仿真结果。其中,调制方式M-PSK包括BPSK、QPSK、8-PSK、16-PSK、32-PSK等方式。 一、MATLAB仿真 1.仿真代码 …...
【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)
CART(Classification and Regression Tree) CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART …...
【金猿CIO展】复旦大学附属中山医院计算机网络中心副主任张俊钦:推进数据安全风险评估,防范化解数据安全风险,筑牢医疗数据安全防线...
张俊钦 本文由复旦大学附属中山医院计算机网络中心副主任张俊钦撰写并投递参与“数据猿年度金猿策划活动——2024大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 数据要素时代,医疗数据已成为医院运营与决策的重要基石…...
工业机器视觉-基于深度学习的水表表盘读数识别
字轮数字识别、指针读数识别(角度换算)、根据指针角度进行读数修正、根据最高位指针(x0.1)读数对字轮数字进行修正、得到最终读数。 基于深度学习的目标检测技术和OpenCV图像处理技术,可识别所有类型的表盘机械读数。...
基于ZooKeeper搭建Hadoop高可用集群
ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点,集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件: Active NameNode 和 Standby NameNode: 两台 NameNode…...
力扣88题:合并两个有序数组
力扣88题:合并两个有序数组 题目描述 给定两个按非递减顺序排列的整数数组 nums1 和 nums2,以及它们的长度 m 和 n,要求将 nums2 合并到 nums1,使得合并后的数组仍按非递减顺序排列。 输入与输出 示例 1: 输入&am…...
python 笔记之线程同步和死锁
同步: 共享数据: 如果多个线程共同对某个数据修改,则可能出现不可预测的结果,为了保证数据的正确性,需要对多个数据进行同步 同步:一个一个的完成,一个做完另一个才能进来 效率会降低 使用Thre…...
SpringBoot小知识(4):高级配置知识与bean的绑定
一、EnableConfigurationProperties ConfigurationProperties注解在我们之前讲过,他是从配置中读取参数封装给实体类的一个注解。 那么EnableConfigurationProperties是个啥呢? EnableConfigurationProperties 是 Spring Framework 中用于启用基于配置文…...
Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 电子产品管理 系统管理 数据可视化分析看板展示 摘要 本…...
Lua面向对象实现
Lua中的面向对象是通过表(table)来模拟类实现的,通过setmetatable(table,metatable)方法,将一个表设置为当前表的元表,之后在调用当前表没有的方法或者键时,会再查询元表中的方法和键,以此来实现…...
OpenCV的圆形检测HoughCircles
HoughCircles 函数是 OpenCV 库中用于在灰度图像中检测圆的函数,它基于霍夫变换(Hough Transform)的一种变体——梯度霍夫变换(HOUGH_GRADIENT)函数原型如下: void HoughCircles( InputArray image, OutputArray circles,int method, double dp, double minDist,double …...
iOS视图控制器的生命周期及各阶段的作用
iOS视图控制器(UIViewController)的生命周期是指从它被创建到最终被销毁的过程中所经历的一系列阶段。每个阶段都有其特定的作用和执行时机,这些阶段和作用对于开发高效、稳定的iOS应用至关重要。以下是iOS视图控制器的生命周期及其各个阶段的…...
四轮阿克曼(前轮转向、后轮驱动)车子仿真控制
目录 写在前面的话调用 libgazebo_ros_ackermann_drive.so 插件属性介绍补充 steering_wheel_joint 配置键盘控制命令 结果演示 写在前面的话 这里增加一个四轮阿克曼(前轮转向、后轮驱动)车子仿真控制的版本,使用的事gazebo的插件 参考资料…...
Blender均匀放缩模型
解决办法: 首先选中模型,按下“s”键,如下图所示,此时模型根据鼠标的移动放缩 或者在按下“s”后输入数值,再按回车键Enter,模型会根据你该数值进行均匀放缩 指定放大2倍结果——...
Python基于 Opencv+wxPython 的人脸识别上课考勤系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【AI工具】强大的AI编辑器Cursor详细使用教程
目录 一、下载安装与注册 二、内置模型与配置 三、常用快捷键 四、项目开发与问答 五、注意事项与技巧 参考资料 近日,由四名麻省理工学院(MIT)本科生共同创立的Anysphere公司宣布,其开发的AI代码编辑器Cursor在成立短短两年…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
