STM32软件定时器
目录
什么是定时器?
软件定时器优缺点
软件定时器原理
软件定时器相关配置
单次定时器和周期定时器
软件定时器相关 API 函数
1. 创建软件定时器
2. 开启软件定时器
3. 停止软件定时器
4. 复位软件定时器
5. 更改软件定时器定时时间
实操
cubeMX配置
代码实现
什么是定时器?
软件定时器优缺点
软件定时器原理
软件定时器相关配置
单次定时器和周期定时器
软件定时器相关 API 函数
| 函数 | 描述 |
| xTimerCreate() | 动态方式创建软件定时 |
| xTimerCreateStatic() | 静态方式创建软件定时器 |
| xTimerStart() | 开启软件定时器定时 |
| xTimerStop() | 停止软件定时器定时 |
| xTimerReset() | 复位软件定时器定时 |
| xTimerChangePeriod() | 更改软件定时器的定时超时时间 |
| xTimerStartFromISR() | 在中断中开启软件定时器定时 |
| xTimerStopFromISR() | 在中断中停止软件定时器定时 |
| xTimerResetFromISR() | 在中断中复位软件定时器定时 |
| xTimerChangePeriodFromISR() | 在中断中更改定时超时时间 |
1. 创建软件定时器
TimerHandle_t xTimerCreate( const char * const pcTimerName ,const TickType_t xTimerPeriod ,const UBaseType_t uxAutoReload ,void * const pvTimerID ,TimerCallbackFunction_t pxCallbackFunction );
2. 开启软件定时器
BaseType_t xTimerStart ( TimerHandle_t xTimer ,TickType_t xBlockTime );
3. 停止软件定时器
BaseType_t xTimerStop ( TimerHandle_t xTimer ,TickType_t xBlockTime );
4. 复位软件定时器
BaseType_t xTimerReset ( TimerHandle_t xTimer ,TickType_t xBlockTime );
5. 更改软件定时器定时时间
BaseType_t xTimerChangePeriod ( TimerHandle_t xTimer ,TickType_t xNewPeriod ,TickType_t xBlockTime );
实操
cubeMX配置

代码实现
/* USER CODE BEGIN Header */
/********************************************************************************* File Name : freertos.c* Description : Code for freertos applications******************************************************************************* @attention** Copyright (c) 2023 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header *//* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables *//* USER CODE END Variables */
osThreadId defaultTaskHandle;
osTimerId myTimer01Handle;
osTimerId myTimer02Handle;/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes *//* USER CODE END FunctionPrototypes */void StartDefaultTask(void const * argument);
void Callback01(void const * argument);
void Callback02(void const * argument);void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) *//* GetIdleTaskMemory prototype (linked to static allocation support) */
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );/* GetTimerTaskMemory prototype (linked to static allocation support) */
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize );/* USER CODE BEGIN GET_IDLE_TASK_MEMORY */
static StaticTask_t xIdleTaskTCBBuffer;
static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
{*ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;*ppxIdleTaskStackBuffer = &xIdleStack[0];*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;/* place for user code */
}
/* USER CODE END GET_IDLE_TASK_MEMORY *//* USER CODE BEGIN GET_TIMER_TASK_MEMORY */
static StaticTask_t xTimerTaskTCBBuffer;
static StackType_t xTimerStack[configTIMER_TASK_STACK_DEPTH];void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
{*ppxTimerTaskTCBBuffer = &xTimerTaskTCBBuffer;*ppxTimerTaskStackBuffer = &xTimerStack[0];*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;/* place for user code */
}
/* USER CODE END GET_TIMER_TASK_MEMORY *//*** @brief FreeRTOS initialization* @param None* @retval None*/
void MX_FREERTOS_Init(void) {/* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN RTOS_MUTEX *//* add mutexes, ... *//* USER CODE END RTOS_MUTEX *//* USER CODE BEGIN RTOS_SEMAPHORES *//* add semaphores, ... *//* USER CODE END RTOS_SEMAPHORES *//* Create the timer(s) *//* definition and creation of myTimer01 */osTimerDef(myTimer01, Callback01);myTimer01Handle = osTimerCreate(osTimer(myTimer01), osTimerPeriodic, NULL);/* definition and creation of myTimer02 */osTimerDef(myTimer02, Callback02);myTimer02Handle = osTimerCreate(osTimer(myTimer02), osTimerOnce, NULL);/* USER CODE BEGIN RTOS_TIMERS *//* start timers, add new ones, ... *//* USER CODE END RTOS_TIMERS *//* USER CODE BEGIN RTOS_QUEUES *//* add queues, ... *//* USER CODE END RTOS_QUEUES *//* Create the thread(s) *//* definition and creation of defaultTask */osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);/* USER CODE BEGIN RTOS_THREADS *//* add threads, ... *//* USER CODE END RTOS_THREADS */}/* USER CODE BEGIN Header_StartDefaultTask */
/*** @brief Function implementing the defaultTask thread.* @param argument: Not used* @retval None*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void const * argument)
{/* USER CODE BEGIN StartDefaultTask *///osTimerStart(myTimer01Handle, 1000);xTimerChangePeriod(myTimer01Handle, pdMS_TO_TICKS(1000), 0);osTimerStart(myTimer02Handle, 2000);/* Infinite loop */for(;;){osDelay(1);}/* USER CODE END StartDefaultTask */
}/* Callback01 function */
void Callback01(void const * argument)
{/* USER CODE BEGIN Callback01 */printf("liangxu shuai\r\n");/* USER CODE END Callback01 */
}/* Callback02 function */
void Callback02(void const * argument)
{/* USER CODE BEGIN Callback02 */printf("laochen shuai\r\n");/* USER CODE END Callback02 */
}/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application *//* USER CODE END Application */
相关文章:
STM32软件定时器
目录 什么是定时器? 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 …...
[论文阅读] (30)李沐老师视频学习——3.研究的艺术·讲好故事和论点
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...
Java中List、Set、Map的区别和实现方式
Java中List、Set、Map的区别和实现方式 List List 是一个有序的集合,即元素按照插入的顺序进行排序,可以有重复的元素。因为是有序的,所以可以根据下标来获取元素或者遍历整个集合内的元素。常用的实现类包括 ArrayList 和 LinkedList。 A…...
@EnableScheduling和@Scheduled注解详解fixedrate和fixeddelay的区别
一、pom.xml中导入必要的依赖: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version></parent><dependencies><…...
打印金字塔图案总结
那么好了好了,宝子们,今天给大家总结一下“打印金字塔图案”,来吧,开始整活!⛳️ 最近在牛客网上刷题,遇到了这个打印类型的题目,我想总结一下,然后分享给大家。 一、正向金字塔 …...
SQL语句的执行顺序
1、SQL语句的一般执行顺序 1 from 找表 2 on 关联条件帅选 3 join 关联表操作 4 where 条件筛选 5 group by 进行分组 6 avg,sum… 执行函数 7 having 分组后筛选 8 select …...
Debian 版本代号与《玩具总动员》
作为最受欢迎的 Linux 发行版之一,Debian 是许多其他发行版的基础,许多非常受欢迎的 Linux 发行版,例如 Ubuntu、Knoppix、PureOS 、Tails、Armbian 以及 Raspbian,都基于 Debian。 经过近 20 个月的开发,2023 年 6 月…...
TypeScript 第一章
欢迎来到 TypeScript 学习!本章将为您介绍 TypeScript 的基础知识。 TypeScript 是 JavaScript 的一个超集,它提供了静态类型检查、类、接口等特性,使得编写大型应用程序变得更加容易和可维护。TypeScript 编写的代码可以被编译成 JavaScript…...
【SpringCloud入门】-- Ribbon入门
1.什么是Ribbon? Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式&…...
(二)Liunx下ElasticSearch快速搭建
1.下载安装 1)环境准备: 操作系统:centos7 es版本:8.8.1 jdk:17 es与jdk等兼容支持查看 2)下载安装包上传到服务器,官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3)解压文件…...
神经网络编程基础
目录 1、二分类(Binary Classification) 2、逻辑回归(Logistic Regression) 3、逻辑回归的代价函数(Logistic Regression Cost Function) 4、梯度下降法(Gradient Descent) 5、使用计算图求导数 6、逻辑回归中的梯度下降&…...
2023年北京/上海/深圳DAMA-CDGA/CDGP数据治理工程师认证报名
DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…...
Python之枚举类Enum定义错误码
在 web 项目中,我们经常使用自定义状态码来告知请求方请求结果以及请求状态;在 Python 中该如何设计自定义的状态码信息呢? 1、普通类字典设计状态码 class RETCODE:OK "0"ERROR …...
GIS大数据处理框架sedona(塞多纳)编程入门指导
GIS大数据处理框架sedona(塞多纳)编程入门指导 简介 Apache Sedona™是一个用于处理大规模空间数据的集群计算系统。Sedona扩展了现有的集群计算系统,如Apache Spark和Apache Flink,使用一组开箱即用的分布式空间数据集和空间SQL,可以有效地…...
C++基础(7)——类和对象(5)
前言 本文主要介绍C中的继承 4.6.1:继承和继承方式(公有、保护、私有) 4.6.2:继承中的对象模型,sizeof()求子类对象大小 4.6.3:子类继承父类后,两者构造和析构顺序 父类先构造、子类先析构 如…...
【Express.js】sql-knex 增删改查
Sql增删改查 本节使用knex作为sql框架,以sqlite数据库为例 准备工作 knex是一个运行在各自数据库Driver上的框架,因此需要安装相应的js版数据库Driver,如: PostgreSQL -> pg, mysql/mariadb -> mysql, sqlite -> sqlite3… 安装…...
构建基于前后端分离的医学影像学学习平台:Java技术实现与深度解析
在医学领域,影像学学习平台是一种重要的工具,用于帮助医学学生和专业人士学习和研究医学影像。本文将介绍如何使用Java构建一个基于前后端分离的医学影像学学习平台,通过结合前沿的Web开发技术和医学影像处理算法,为用户提供强大且高效的学习工具。 技术架构设计: 在构…...
从零开始学习R语言编程:完全指南
一、引言 R语言是一种流行的数据分析语言,广泛应用于学术界、商业界和社会科学研究等领域。与其它数据分析软件相比,R语言的优点包括免费开源、高效可靠、具有强大的数据分析和可视化能力等。R语言的编程基础包括了各种控制结构和函数,可以方…...
PulsarMQ系列入门篇
文章目录 介绍:部署安装讲解:安装单机版本测试(Linux下): 介绍: PulsarMQ 现托管于apache Apache 软件基金会顶级项目,2016年由雅虎公司开源的分布式多租户消息中间件 ,是下一代云原生分布式消息…...
编程的实践理论 第九章 交互
第九章 交互 根据状态的初始值和终止值,我们已经描述了计算。一个状态变量的声明如下: var x: T S ∃x, x′: T S 它说的是一个状态变量有两个数学变量,一个是初始值,一个是终止值。在这个 声明的作用域内,x和x…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...
