【8】uC/OS-III应用开发————>软件定时器(STM32F767)

最新版IDA7.6发布 逆向工程最佳工具 IDA7.6免费版发布-IDA Freeware-现在包括基于云的反编译器 Hex-Rays很高兴宣布IDA Freeware已升级到最新的IDA版本(7.6),现在包括基于云的反编译器! IDA Freeware是IDA Pro的免费版本,旨在为个人用户¹提供机会查看IDA的运行情况,从而支持反汇编x86和x64二进制文件。它是任何想要启动逆向工程经验的人的首选工具! 版本: 版本从7.0升至7.6,因此受益于此期间出现的所有重大新增功能: 黑夜模式 支持对文件夹中的数据进行分类 golang支持 App 阅读详情
  1. 简述
    1. 定时器:是指从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可以自定义定时器的周期与频率
  2. 分类:
    1. 硬件定时器:
      1. 芯片本身提供的功能
      2. 每次在定时时间到达之后就会自动触发一个中断,用户在中断中处理信息
    2. 软件定时器:
      1. 由操作系统提供的一类系统接口,构建在硬件定时器(SysTick)基础上
      2. 软件定时器指定时间到过后要调用的函数(也称超时函数/回调函数,为了统一,下文均用回调函数),在回调函数中处理信息
  3. uC/OS定时模式
    1. 单次模式:启动定时器,时间到达,只执行一次回调函数后,将不再重复执行
    2. 周期模式:定时器会按照设置的定时时间,循环执行回调函数,直到用户将定时器删除
  4. 应用场景
    1. 适合于对时间精度要求不高的任务
  5. 软件定时器的精度
    1. 系统节拍是系统的心跳节拍,表示系统时钟的频率,OS_CFG_TICK_RATE_HZ,默认是1000,周期1ms
    2. 精度决定于系统时基频率,也就是变量OS_CFG_TMR_TASK_RATE_HZ的值,默认100,周期10ms
    3. 定时器任务的频率不能大于系统时基频率
  6. 相关函数
    1. OSTmrCreat();  创建定时器
    2. OSTmrDel();  删除定时器
    3. OSTmrStart();  启动定时器计数
    4. OSTmrStop();  停止定时器计时
    5. OSTmrRemainGet();  获取定时器剩余时间
    6. OSTmrStateGet();  获取当前定时状态
  7. 例程
    1. 创建,启动
      /**************************************************
       * 函数名:static void AppTaskTmr(void *p_arg)
       * 描述  :创建软件定时器
       * 输入  :无
       * 输出  :无
       * 返回  :无 
       * 调用  :内部调用 
       **************************************************/
      static void AppTaskTmr(void *p_arg)
      {
          OS_ERR err;
      
          OS_TMR my_tmr;  //声明软件定时器对象
          
          (void)p_arg;
          
          //创建软件定时器
          OSTmrCreate( (OS_TMR            *)&my_tmr,              //软件定时器对象
                       (CPU_CHAR          *)"MySoftTimer",        //命名软件定时器
                       (OS_TICK            )100,                   //定时器初始值,依10hz时基计算,即为1S
                       (OS_TICK            )100,                   //定时器周期重装值,依10Hz时基计算,即为1S
                       (OS_OPT             )OS_OPT_TMR_PERIODIC,  //周期性定时
                       (OS_TMR_CALLBACK_PTR)TmrCallback,          //回调函数
                       (void              *)"Time over!!!",       //传递实参给回调函数
                       (OS_ERR            *)&err);                //返回错误类型
          //启动软件定时器             
          OSTmrStart( (OS_TMR             *)&my_tmr,              //软件定时器对象
                      (OS_ERR             *)&err);                //返回错误类型
              
          ts_start = OS_TS_GET();     //获取定时前时间戳
                       
          while(DEF_TRUE)
          {
              OSTimeDly(1000, OS_OPT_TIME_DLY, &err);;   //不阻塞该任务
          }
      }

       

    2. 回调函数
      /**************************************************
       * 函数名:void TmrCallback (OS_TMR *p_tmr, void *p_arg)
       * 描述  :软件定时器的回调函数
       * 输入  :无
       * 输出  :无
       * 返回  :无 
       * 调用  :内部调用 
       **************************************************/
      void TmrCallback (OS_TMR *p_tmr, void *p_arg)
      {
          CPU_INT32U  cpu_clk_freq;
          printf("%s", (char *)p_arg);
          cpu_clk_freq = BSP_CPU_ClkFreq();   //获取CPU时钟
          
          LED1_TOGGLE;
          
          ts_end = OS_TS_GET() - ts_start;    //获取定时后的时间戳
          
          printf("\r\n 定时1S,通过时间戳测得定时 %07d us, 即%04d ms; \r\n",
                                                  ts_end / (cpu_clk_freq / 1000000),  //将定时时间折算成us
                                                  ts_end / (cpu_clk_freq / 1000) );   //将定时时间折算成Ms
          ts_start = OS_TS_GET();     //获取定时前的时间戳
      }

       

  8. 下载验证
  9. 总结
    1. 软件定时器核心是在底层的硬件定时器(SysTick内核定时器)上进行软件分频
    2. 回调函数是在定时器任务中被调用,所以回调函数的上、下文环境是在任务中,并且运行回调函数时调度器处于被锁状态
    3. 回调函数越简短越好,并且不能在回函函数中等待消息队列、信号量、事件等操作
  10. 参考资料:
    1. 正点原子《STM32F767 UCOS开发手册》
    2. 野火《uC/OS-III内核应用与开发》
    3. 《嵌入式实时操作系统 uC/OS-II原理及应用(第二版)》
    4. 官方源码
  11. 硬件平台:
    1. 正点原子阿波罗F767
  12. 软件平台:
    1. MDK5.2.5
  13. 库版本:
    1. TM32Cube_FW_F7_V1.4.0
  14. uC/OS-III版本
    1. UCOSIII 3.04
STM32F767单片机开发板实验例程HAL库版本60个软件工程源码合集.zip STM32F767单片机开发板实验例程HAL库版本60个软件工程源码合集: STM32F7开发指南-HAL库版本_V1.1.pdf 实验0-1 Template工程模板-新建工程章节使用 实验0-2 Template工程模板-调试章节使用 实验0-3 Template工程模板-使用STM32CubeMX配置 实验1 跑马灯实验 实验10 电容触摸按键实验 实验11 OLED显示实验 实验12 内存保护(MPU)实验 实验13 TFTLCD(MCU屏)实验 实验14 SDRAM实验 实验15 LTDC LCD(RGB屏)实验 实验16 USMART调试试验 实验17 RTC实时时钟实验 实验18 随机数发生器实验 实验19 待机唤醒实验 实验2 按键输入实验 实验20 ADC实验 实验21 内部温度传感器实验 实验22 DAC实验 实验23 PWM DAC实验 实验24 DMA实验 实验25 IIC实验 实验26 IO扩展实验 实验27 光照&接近传感器实验 实验28 QSPI实验 实验29 485实验 实验3 串口通信实验 实验30 CAN实验 实验31 触摸屏实验 实验32 红外遥控实验 实验33 DS18B20数字温度传感器实验 实验34 DHT11数字温湿度传感器实验 实验35 MPU9250九轴传感器实验 实验36 NRF24L01无线通信实验 实验37 FLASH模拟EEPROM实验 实验38 摄像头实验 实验39 内存管理实验 实验4 外部中断实验 实验40 SD卡实验 实验41 NAND FLASH实验 实验42 FATFS实验 实验43 汉字显示实验 实验44 图片显示实验 实验45 硬件JPEG解码实验 实验46 照相机实验 实验47 音乐播放器实验 实验48 录音机实验 实验49 SPDIF(光纤音频)实验 实验5 独立看门狗实验 实验50 视频播放器实验 实验51 FPU测试(Julia分形)实验 实验52 DSP测试实验 实验53 手写识别实验 实验54 T9拼音输入法实验 实验55 串口IAP实验 实验56 USB读卡器(Slave)实验 实验57 USB声卡(Slave)实验 实验58 USB虚拟串口(Slave)实验 实验59 USB U盘(Host)实验 实验6 窗口看门狗实验 实验60 USB鼠标键盘(Host)实验 实验61 网络通信实验 实验62 UCOSII实验1-1-任务调度 实验62 UCOSII实验1-2-任务创建删除挂起恢复 实验63 UCOSII实验2-信号量和邮箱 实验64 UCOSII实验3-消息队列、信号量和软件定时器 实验7 定时器中断实验 实验8 PWM输出实验 实验9 输入捕获实验 立即下载

相关推荐

【破局之道】LangChain4j 0.31.0 + Java 8 + Spring Boot:在“过时”环境中构建本地大模型应用的实战指南

本文为使用Java 8和Spring Boot等“过时”技术栈的团队提供了构建本地大模型应用的实战指南。通过采用LangChain4j 0.31.0这一兼容版本,结合Ollama部署本地大模型,开发者无需升级JDK即可在现有项目中快速集成AI能力,实现智能问答、文档摘要等功能,为传统项目注入创新活力。

t4y5u6i7o的博客 557

嵌入式系统学习——STM32之UCOS-III中断和时间管理及软件定时器

UCOSIII中断:       中断:应内部或外部异步事件的请求中止当前任务,而去处理异步事件所要求的任务的过程叫做中断。 void USART1_IRQHandler(void) { OSIntEnter(); //中断服务程序 OSIntExit(); } 进入和退出中断服务函数: 进入中断服务函数以后使用函数OSIntEnter(

hjf161105的博客 3150

海外最新AI营销AI销售书籍推荐AI营销培训讲师AI销售培训讲师人工智能营销培训师人工智能销售培训师AI赋能营销培训AI赋能销售培训企业AI营销内训企业AI销售内训AI营销课程讲师AI销售课程讲师

专栏|AI营销与AI销售实战 · 第46期在这个人类与算法共舞的时代,销售,已经不是你我熟悉的那个“打电话、见客户、做PPT”的老行当了。你还以为销售是“打感情牌”?错了,情感要继续,但方式已经升级。你还以为AI只是“写写文案”?错了,文案只是皮毛,真正的杀器,是思维方式的重构,是认知地图的重绘。首先,我们需要明确一个事实:AI并不会消灭销售这个职业,但它必然会重新定义销售的本质。在销售领域,真正的制胜之道不是简单地采用AI工具,而是的能力。

Akibfrycc的博客 1100

STM32F4X UCOSIII软件定时器

定时器在MCU中是一个很常用的外设,其作用是可以在某个事件点触发MCU中断,告知MCU处理事情。定时器跟生活中的闹钟很类似,可以设置闹钟每天什么时候响,还能设置响的次数,是响一次还是每天都响。定时器也有硬件定时器和软件定时器之分。

hwx1546的博客 639

在Jetson orin NX上安装部署Yolov8

1、环境准备与依赖安装2、安装PyTorch和Torchvision:从NVIDIA官方论坛或开发者下载中心获取与你的JetPack版本兼容的PyTorch wheel文件。例如,对于JetPack 5.1.2,可以安装PyTorch v2.1.0 8。:需要编译安装与PyTorch版本匹配的Torchvision。这里自己编译没有成功,下载了一个现成的可以用torchvision-0.16.2+c6f3977-cp38-cp38-linux_aarch64.whl。

xxxcccvvvbbb的博客 775

Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)

前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.

CYK_byte的博客 4万+

STM32F767 软件中断

软件中断

smallerlang的博客 389

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1951

STM32学习----通用定时器的应用(PWM)

TI1FP1和TI1FP2这两个信号的特性是一模一样的,都是通道1的信号经过滤波和边沿检测之后产生的信号,只是TI1FP1是送给捕获比较通道IC1,TI1FP2是送给捕获比较通道IC2。TI2FP1和TI2FP2这两个信号的特性是一模一样的,都是通道2的信号经过滤波和边沿检测之后产生的信号,只是TI2FP1是送给捕获比较通道IC1,TI2FP2是送给捕获比较通道IC2。如果要输出一个占空比可调的PWM信号,其实也很简单,就是改变对应通道的比较捕获寄存器的值就可以了,其他的跟固定占空比信号的设置一样就行。

m0_49968063的博客 3791

【安全启动】HSM安全启动原理与技术实现白皮书

摘要: 安全启动(Secure Boot)与度量启动(Measured Boot)通过硬件信任根(HSM/TPM等)确保系统启动链路的可信性,实现代码验证与状态记录。HSM作为核心组件,承担密钥保护、签名验证和密码运算任务,与SHE、TPM等协同构建分层信任链。通用计算与嵌入式/汽车场景的启动流程差异显著,前者依赖TPM的PCR度量,后者以HSM为核心实现硬件级安全闭环。工程实践中需权衡性能、合规性及抗攻击能力,并结合后量子密码(PQC)等演进技术优化方案。

weixin_46481662的博客 828

C#跨平台制图新纪元:Mapsui,一库在手,地图我有

深入学习Mapsui的渲染机制,定制属于你的地图样式,无论是颜色、图标还是文字,都可以随心所欲。

java专栏 1455

uCOS-III 学习记录(4)——时间戳

参考内容:《[野火]uCOS-III内核实现与应用开发实战指南——基于STM32》第 9 章。 文章目录1 时间戳2 DWT 外设2.1 DWT 外设简介2.2 初始化 DWT 的步骤2.3 DWT 外设的宏定义(cpu_core.c)3 CPU 和时间戳的初始化3.1 时间戳的相关定义(cpu_core.h)3.1.1 通过宏定义开启/关闭时间戳功能3.1.2 时间戳的数据类型定义3.1.3 时间戳的全局变量定义——CPU_TS_TmrFreq_Hz3.2 时间戳的初始化3.2.1 CPU 初始化函数 C

Mount256的博客 1702

Fiori Elements 从入门到精通开发教程的文章目录

Fiori Elements 开发技术相对 SAP 其他历史悠久,发展成熟的开发技术来说,是一个新事物。正因如此,迄今为止国内深入讲解 Fiori Elements 应用的中文材料几乎没有。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4712

面向PHM的民机飞行数据分析及应用研究进展

该模型输入为发动机的运行条件(海拔、标准温度偏差等)和环境条件(大气温度、大气压力等)、 工作过程参数(压气机流量、压气机压比、燃烧室出口温度、涵道比、压气机压比、涡轮前温度等)以及预测的部件效率和管道恢复系数,通过基于GasTurb进行设计点性能匹配和非设计点性能匹配,最终得到总体性能模型,模型输出数据为整机性能参数(油耗等), 各站位的压力、温度、流量,部件效率以及EGT 等参数,同时模型还可对不同工况点进仿真,输出不同工况点下整机及各站位的温度、压力和流量等参数。图5展示了某飞机在一年内的健康指数。

qq_41854911的博客 3161

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

从0到1教你写UCOS-III 第八部分:时间戳

本章实现时间戳用的是 ARM Cortex-M 系列内核中的 DWT 这个外设的功能,有关这个外设的功能和寄存器说明具体见手册“STM32F10xxx Cortex-M3 programming manual” 8.1 时间戳简介: 在 uC/OS-III中,很多地方的代码都加入了时间测量的功能,比如任务关中断的时间,关调度器的时间等。知道了某段代码的运行时间,...

sumjess 2754

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UCOIII时间片轮转调度

前提: 时间片轮转法:主要用于分时系统中的进程调度。为了实现轮转调度,系统把所有就绪进程按先入先出的原则排成一个队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位,通常为 10~100ms 数量级。当进程用完分给它的时间片后,系统的计时器发出时钟中断,调度程序便停止该进程的运行,把它放入就绪队列的末尾;然后,把它放入就绪队列的末尾;然后,把CPU分给就绪队列的队首进程,同样也让它运行一个时间片,如此往复。 实现思想:时间片轮转算法的基本思想是,系统将所有的就绪进程按先来先服务算法的

xuexiwd的博客 1493

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32F1(以 STM32F103 系列为例)入门与工程实践详尽指南

摘要 本指南为STM32嵌入式开发者提供从入门到进阶的实践指导,涵盖工程搭建、寄存器操作、标准外设库使用等核心内容。重点包括: 工程结构:推荐模块化目录设计,分离用户代码与库文件 开发流程:Keil工程创建、启动文件配置、时钟初始化解析 两种LED实现: 寄存器级操作:直接控制GPIO寄存器(CRL/BSRR) 标准库实现:使用GPIO_InitTypeDef结构体和RCC时钟使能函数 调试要点:常见编译/烧录问题解决方案,时钟配置注意事项 进阶路径:提供CMSIS规范、外设寄存器映射原理等深入学习方向 特

weixin_42107409的博客 1932

(STM32笔记)二、开发环境搭建

我用的是正点的STM32F767来进行学习。之后的这个系列笔记开头未标明的话,用的也是这个板子。 二、开发环境搭建 1、MDK软件安装 (1)MDK是什么? RealView MDK是Keil公司开发的,为基于Cortex 、ARM7、ARM9等处理器设备提供的一个完整的开发环境。 MDK=Keil for ARM, 大家学习51的时候就会用到Keil C51。 (2)下载 MDK安装包 即下载Keil软件 官网下载地址:点击进入 (注:因为是非注册版,所以只能编译不超过32K的代码!!超过32K需要注

一个放笔记的小书架 1279

uCOS-III ——时间戳(DWT外设)

在 uCOS 中,我们已经使用了 SysTick 作为系统的时间片,所以不能再使用 SysTick 来实现时间戳了。在 Cortex-M3 中有一个调试组件,其中有一个组件是跟踪组件,叫数据观察点与跟踪(Data Watchpoint and Trace,DWT)外设,该外设有一个 32 位寄存器 CYCCNT,它是一个向上的计数器,记录的是内核时钟 HCLK 运行的个数,当 CYCCNT 溢出之后,会清零重新开始向上计数。该计数器在 uCOS 中正好被用来实现时间戳的功能。

阅微草堂 1131

uCOS-III中的OS_CRITICAL_ENTER()和OS_CRITICAL_EXIT()使用

uCOS-III是uCOS-II的升级版本,虽然针对于后者有各种优化,但是有一点不是特别好,就是有些宏定义名称会做一些修改,这种修改可能更合理,但是可能会引起一些不必要的“误会 ”,例如在uCOS-II中临界区的使用函数名字为: #include "os_cpu.h" //包含该头文件 xxxx() { OS_CPU_SR cpu_sr=0; //必须要定义一个局部变量才

猪哥的专栏 1万+

STM32开发者指南:Keil MDK下载及基础设置操作指南

详细介绍Keil MDK下载步骤及在STM32开发中的基础设置,帮助新手快速搭建开发环境。掌握keil mdk下载与项目配置关键点,提升嵌入式开发效率。

weixin_42511373的博客 480

基于STM32F407VET6自学笔记

基于STM32F407VET6的自学笔记,Keil 5MDK下载与安装,STM32F07XX的工程配置

2302_76783933的博客 7415

uC/OS任务信号量

在实际任务间的通信中,一个或多个任务发送一个信号量或者消息给另一个任务是比常见的,而一个任务给多个任务发送信号量和消息相对比较少。前面所讲的信号量和消息队列均是单独的内核对象,是独立于任务存在的。这两章要讲述的任务信号量和任务消息队列是 任务特有的属性,紧紧依赖于一个特定任务。   任务信号量和任务消息队列分别与多值信号量和消息队列非常相似,不同之处是,前者仅发布给一个特定任务,而后者可以发布给多个任务。因此,前者的操作相对比较简单,而且省时。如果任务信号量和任务消息队列可以满足设计需求,那么尽量不要使用

weixin_41040351的博客 542

STM32f767之通用定时器

TIM3

m0_38012497的博客 1290

UCOS学习(六)——软件定时器

如何实现一个软件定时器

qq_52608074的博客 2488

uC/OSIII时钟节拍处理过程

uC/OSIII时钟节拍处理过程   时钟节拍涉及到的函数调用过程: 从main开始,创建了第一个任务AppTaskStart,在其一开始执行时,对BSP和CPU进行初始化,调用BSP_CPU_TickInit()函数; 该函数定义在bsp文件夹下的bsp.c文件中,该函数先读取时钟频率,然后按OSCfg_TickRate_Hz值计算应该为CM3的systick定时器设置的

gtkknd的专栏 2860
上一篇: 【7】uC/OS-III应用开发————>事件(STM32F767)
下一篇: 【9】uC/OS-III应用开发————>任务信号量(STM32F767)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值