STM32F103CubeMX定时器
前言
定时器作为最重要的内容之一,是每一位嵌入式软件工程师必备的能力。STM32F103的定时器是非常强大的。
1,他可以用于精准定时,当成延时函数来使用。不过个人不建议这么使用,因为定时器很强大,这么搞太浪费了。如果想精准延时,建议使用滴答定时器。STM32滴答定时器SysTick精准延时,兼容HAL库和标准库
2,STM32F103的定时器可以用于定时中断,每过一段事件执行另外一段代码。
3,STM32F103的定时器能够硬件输出PWM,这个是比较常用的。如果是从C51转到STM32的初学者能够深刻感受到硬件PWM的好处。如果是C51,只能使用定时器中断,模拟PWM,具有一定的误差,而且要时刻注意其他中断会不会影响到软件PWM。但是STM32的硬件PWM无需担心这么多,只需要开始配置好硬件PWM,他就会自己运转,极其简单方便。
4,STM32的定时器有输入捕获功能,能够借此计算出输入方波的周期。
5,STM32的定时器还有编码器模式,可以给小车进行精准测速。然后根据时间和速度,还可以在没有其他辅助定位的情况下,给小车进行定位。
6,STM32还有其他的高级玩法,比如SPWM输出,死区等等。对于初学者,个人建议只要学好2,3点即可,本文也只会介绍这两点。
定时器介绍
定时器分类
STM32F103的定时器有三种,基本定时器(TIM6-TIM7),通用定时器(TIM2-TIM5)和高级定时器(TIM1和TIM8)。
但是不是所有型号的STM32F103系列单片机都有这些功能,对于市面上最为常见的STM32F103C8T6而言,他只具备一个高级定时器(TIM1)和三个通用定时器(TIM2-TIM4)。
定时器作用
定时器类型 | 主要功能 |
基本定时器 | 没有输入捕获通道,常用于时基,即定时功能。(也就是只能用于定时器中断,无法硬件PWM,与C51的定时器一样作用) |
通用定时器 | 具有多路独立通道,可用于输入捕获/比较,也可用于时基。(多路独立通道是指,一个通用定时器可以同时输出4路硬件PWM。输入捕获,可以计算方波的高低电平持续时间。比较功能是指硬件PWM) |
高级定时器 | 除具备通用定时器所有功能外,还具备带死区控制的互补信号输出、刹车输入等功能。(可用于电机控制、数字电源设计等。新手建议将高级定时器当成通用定时器来使用,其他功能,建议需要的时候再学。) |
计数器分辨率:表示能够记录多少个数,如果是n位分辨率,那么可以记录个数。此处16位分辨率,所以可以记录0-65535,一共65536个数。
计数器类型:
如果计数器类型是向上计数,那么计数就是0,1,2...65535,0。
如果是向下计数,那么计数就是65535,65534...0,65535。(看图二)
预分频系数:假设我们现在的APB1是72MHZ,由图三可知TIM2是由APB1提供时基,所以此时TIM2的频率是72MHZ,这也代表了TIM2的计数寄存器跳变72次才等于1us。这样的话,TIM2的最大定时事件就只有6.5536ms(16位定时器)。这个定时事件太短了,而且高频代表着耗电(一般不考虑),所以我们需要一个预分频器进行分频。比如分频7199(注意,因为是从0开始,所以想要分频7200,就输入7199),那么现在定时器的实际频率就是10kHZ,表示TIM2计数寄存器增加1,代表着100us。
DMA:DMA是可以不经过CPU,就将数据传输到指定位置。对新手而言,学习定时器的时候,这个暂时不需要了解。
捕获/比较通道:这个可以用来捕获外界波形数据,本章暂时不介绍,如果我啥时候需要用了会补充。比较通道是用于输出硬件PWM的。
互补通道:互补通道就是,通道1输出高电平,那么通道2就输出低电平。



实操
定时器中断
cubemx配置
前期配置
这部分懒得再讲了,不知道为什么的看STM32CubeMX新建工程并点亮一个LED;



GPIO配置

定时器配置


文件生成
这部分懒得再讲了,不知道为什么的看STM32CubeMX新建工程并点亮一个LED;


keil编写
(1)这里需要做两步工作,第一步是再main函数中打开定时器中断。第二部是编写中断函数。


//中断函数随便找一个地方放着
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3)HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
}//这个放在main函数里面,死循环前面,定时器初始化后面
HAL_TIM_Base_Start_IT(&htim3);
结果
(1)这个我就用软件调试的方法来显示算了,因为图片看不出来效果.
(2)建议复制我的,不然容易出问题
DARMSTM.DLL
pSTM32F103ZE(前面有一个-,不过如果你双击鼠标不会包括-。因为我是F103ZE的芯片,所以是这个,如果是C8就改成pSTM32F103C8)

编译无误之后




硬件PWM
cubemx配置
前期配置
前期配置与上面一致
PWM配置
PWM介绍
STM32的PWM比较强大,有两种PWM模式,根据极性不同,又可以变成四种输出方式。比较花哨。

配置


文件生成
与定时器中断部分一致
keil编写
/****这个变量定义写在main.c里面即可*****/
uint16_t PWM_Compare_Value = 16;//PWM比较值/*****这个放在main函数里面,死循环前面,定时器初始化后面****/
// 使能 TIM3 第4通道 PWM 输出
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
//配置PWM比较值
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_4, PWM_Compare_Value);

结果


相关文章:

STM32F103CubeMX定时器
前言定时器作为最重要的内容之一,是每一位嵌入式软件工程师必备的能力。STM32F103的定时器是非常强大的。1,他可以用于精准定时,当成延时函数来使用。不过个人不建议这么使用,因为定时器很强大,这么搞太浪费了。如果想…...

多态且原理
多态 文章目录多态多态的定义和条件协变(父类和子类的返回值类型不同)函数隐藏和虚函数重写的比较析构函数的重写关键字final和override抽象类多态的原理单继承和多继承的虚函数表单继承下的虚函数表多继承下的虚函数表多态的定义和条件 定义࿱…...
动态库(二) 创建动态库
文章目录创建动态库设计动态库ABI兼容动态符号的可见性示例控制符号可见性通过-fvisibility通过strip工具删除指定符号创建动态库 在Linux中创建动态库通过如下过程完成: gcc -fPIC -c first.c second.c gcc -shared first.o second.o -o libdynamiclib.so 按照Li…...

opencv加水印
本文介绍opencv给图片加水印的方法。 目录1、添加水印1.1、铺满1.2、在指定区域添加1.3、一比一铺满1、添加水印 添加水印的原理是调低两张图片的透明度,然后叠加起来。公式如下: dst src1 * opacity src2 * (1 - opacity) gamma; opacity是透明度&a…...

Flume基操
Flume概述 Flume 定义 Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构,灵活简单。 Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到…...

图文详解红黑树,还有谁不会?
前言在MySQL中,无论是Innodb还是MyIsam,都使用了B树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B树作为索引结构。目录一、二叉查…...

多目标遗传算法NSGA-II原理详解及算法实现
在接触学习多目标优化的问题上,经常会被提及到多目标遗传算法NSGA-II,网上也看到了很多人对该算法的总结,但真正讲解明白的以及配套用算法实现的文章很少,这里也对该算法进行一次详解与总结。会有侧重点的阐述,不会针对…...
Spark 键值对RDD的操作
键值对RDD(Pair RDD)是指每个RDD元素都是(key,value)键值对类型,是一种常见的RDD类型,可以应用于很多的应用场景。 一、 键值对RDD的创建 键值对RDD的创建主要有两种方式: &#x…...

【SpringCloud】SpringCloud详解之Feign远程调用
目录前言SpringCloud Feign远程服务调用一.需求二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用(order服务内编写)四.构建Feign(order服务内配置)五.自定义Feign配置(order服务内配置)六.Feign配置日志(oder服务内配置)七.Feign调优(order服务内配置)八.抽离Feign前…...

文档团队怎样使用GIT做版本管理
有不少小型文档团队想转结构化写作和发布,但是因为有限的IT技能和IT资源而受阻。本文为这样的小型文档团队而准备,描述怎样使用Git做内容的版本管理。 - 1 - 为什么需要版本管理 当一个团队进行协同创作内容时,有以下需要: 在对…...
【java】Java中-> 是什么意思?
先看一个例子 EventQueue.invokeLater(() -> {JFrame frame new ImageViewerFrame();frame.setTitle("ImageViewer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}); // 上面那一段可以看成如下: EventQueue.invokeLater(ne…...

网络类型部分实验
1.实验思路: 首先用DHCP 给四台PC配置上地址,配置成功后 其次底层IP地址的下发完成的同时,进行检测是否可以ping通 接着进行R1和R5之间使用PPP的PAP认证,R5为主认证方 主认证方ISP 被认证方R1 其次进行R2和R5使用PPP的CHAP认证&am…...

java教程--函数式接口--lambda表达式--方法引用
函数式接口 介绍 jdk8新特性,只有一个抽象方法的接口我们称之为函数接口。 FunctionalInterface JDK的函数式接口都加上了FunctionalInterface 注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口。 如在Comparato…...

java——代理
什么是代理: 给目标对象一个代理对象,由代理对象控制着对目标对象的引用 为什么使用代理: ①:功能增强:通过代理业务对原有业务进行增强 ②:用户只能同行过代理对象间接访问目标对象,防止用…...
kubernetes中service探讨
文章目录序言kube-proxy代理模型userspace代理模型iptables代理模型ipvs代理模型修改代理模型Service资源类型ClusterIPNodePortLoadBalancerExternalName应用Service资源应用ClusterIP Service资源应用NodePort Service资源应用LoadBalancer Service资源外部IP序言 在Kuberne…...

Python3实现“美颜”功能
导语利用Python实现美颜。。。这是之前在GitHub上下载的一个项目。。。似乎有些日子了。。。所以暂时找不到原项目的链接了。。。今天抽空看了下它源代码的主要思想,似乎挺简单的。。。于是决定用Python3自己复现一下。。。T_T感觉还是挺有趣的。。。Just have a tr…...

【创建“待选项”按钮02计算坐标 Objective-C语言】
一、之前,我们已经把“待选项”按钮,创建好了,但是唯一的问题是,坐标都是一样的,所以都显示在一起了 1.下面,我们来设置一下,这些“待选项”按钮的坐标, 现在,“待选项”按钮的坐标,是不是都在同一个位置啊, 回忆一下,这个待选项按钮,是怎么生成的, 首先,是在…...

自组织( Self-organization),自组织临界性(Self-organized criticality)
文章目录1. 自组织概述原则历史按领域物理化学生物学2. 自组织临界性概述3. 自组织临界性的特征4. 自组织临界模型5. 自然界中的自组织临界6. 自组织临界性和优化7. 自组织临界性的控制7.1 方案7.2 应用1. 自组织 wiki: Self-organization 图 200 C 水热处理过程中微米级 Nb3O…...

Elasticsearch:集群管理
在今天的文章中,我们应该学习如何管理我们的集群。 备份和分片分配是我们应该能够执行的基本任务。 分片分配过滤 Elasticsearch 将索引配到一个或多个分片中,我们可以将这些分片保存在特定的集群节点中。 例如,假设你有多个数据集群节点&am…...
华为OD机试题 - 非严格递增连续数字序列(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:非严格递增连续数字序列题目输入输出示例一输入输出说明Code解题…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...