STM32F103CubeMX定时器
创始人
2024-06-01 13:34:48
0

前言

定时器作为最重要的内容之一,是每一位嵌入式软件工程师必备的能力。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);

结果

上一篇:VCO pulling

下一篇:Spark 键值对RDD的操作

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...