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

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抽象类多态的原理单继承和多继承的虚函数表单继承下的虚函数表多继承下的虚函数表多态的定义和条件 定义&#xff1…...

动态库(二) 创建动态库

文章目录创建动态库设计动态库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解题…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

深入理解 React 样式方案

React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...

基于Java项目的Karate API测试

Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...

LINUX编译vlc

下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总&#xff08;最简化&#xff09;_底部的附件列表中】: ffmpeg - lzip…...