首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一种Cortex-M内核中的精确延时方法(ns级别)

,不过好在,HAL_Delay()是一个弱定义的,我们可以重写这个函数的实现,那么,采用内核延时当然是最好的办法啦(个人是这么觉得的)当然你有能力完全用for循环写个简单的延时还是可以的。...= 2.5),而如果是 i.MX RT1052这种比较牛逼的处理器,最长能记录的时间为:8.13s=2的32次方/528000000 (假设内核频率为528M,内核跳一次的时间大概为1/528M=1.9ns...(假设内核频率为400M,内核跳一次的时间大概为1/400M=2.5ns) 当CYCCNT溢出之后,会清0重新开始向上计数。...HAL库中使用,注释掉: uint32_t HAL_GetTick(void) { return ((uint32_t)DWT_CYCCNT/SysClockFreq*1000);...(218000000) 后记 其实在ucos-iii 源码中,有一个功能是测量关中断时间的功能,就是使用STM32的时间戳,即记录程序运行的某个时刻,如果记录下程序前后的两个时刻点

1.9K10

如何计算中断函数的执行时间

最简单可以使用使用GPIO来计算,将MCU的功耗和IO引脚关联起来分析 不仅可以计算时间还可以计算功耗。 使用一个 GPIO 引脚来记录中断函数的开始和结束时间。...在中断函数的开头将一个 GPIO 引脚置高。 在中断函数的结尾将这个 GPIO 引脚置低。 用示波器或逻辑分析仪测量 GPIO 的高电平持续时间,即为中断函数的执行时间。...可以精确计算运行时间。 需要占用一个定时器。这是什么狗屁话,我直接使用。定时器频率和计数溢出可能需要额外的处理,再说吧。 也可以使用 SysTick 定时器(系统滴答定时器)来记录时间。...启用 ARM Cortex-M 的 DWT(数据观察和跟踪单元)。 在中断开始和结束时记录 DWT 的计数值。 通过计数差值和时钟频率计算执行时间。...加个代码就行 在CMSIS里面打开 然后重定向 其实也是使用的DWT 再说吧 安富莱有着详细的教程。

9610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【STM32H7教程】第62章 STM32H7的MDMA,DMA2D和通用DMA性能比较

    62.3 MDMA性能测试程序设计 这里将MDMA的程序设计分为以下几部分,逐一为大家做个说明: 62.3.1 第1步,MDMA初始化 程序代码如下,采用块传输,源地址和目的地址都是64bit数据传输,...2.5n 62.5 通用DMA性能测试程序设计 这里将DMA1的程序设计分为以下几部分,逐一为大家做个说明: 62.5.1 第1步,DMA1初始化 程序代码如下,采用存储区到存储区传输方式,源地址和目的地址都是...62.7 MDMA驱动移植和使用 MDMA驱动的移植比较方便:   第1步:添加MDMA的HAL库文件,简单省事些可以添加所有HAL库.C源文件进来。  ...- 设置NVIV优先级分组为4。 */ HAL_Init(); /* 配置系统时钟到400MHz - 切换使用HSE。...- 设置NVIV优先级分组为4。 */ HAL_Init(); /* 配置系统时钟到400MHz - 切换使用HSE。

    1.4K20

    万字长文解读STM32-1

    Vdda通常用于ADC(模数转换器)和DAC(数模转换器)等模拟电路中。在ADC中,Vdda是参考电压,用于将模拟信号转换为数字信号。在DAC中,Vdda是数字信号转换为模拟信号时使用的参考电压。...ADC:STM32 微控制器中的 ADC(模数转换器)可以用于采集模拟信号并将其转换为数字信号,提供多种不同的采样率和分辨率选择。...例如,在使用STM32的ADC(模数转换器)时,可以选择在每个APB2时钟上采样来提高转换精度。...下面是一个基于STM32 HAL库的输入捕获示例代码,以测量外部脉冲信号的周期和脉宽为例: #include "stm32f4xx_hal.h" TIM_HandleTypeDef htim2; uint32...设置自动重装载寄存器ARR也为65475,当CNT计数器溢出时,自动重装载寄存器ARR就会自动装载到CNT计数器中,就能实现自动循环定时60秒。

    1.4K41

    【STM32】HAL库 STM32CubeMX教程五—-看门狗(独立看门狗,窗口看门狗)

    本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil...,计数器使能之后一直在累加 而喂狗就是重新写入计数器的值,时计数器重新累加, 如果在一定时间内没有接收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号) STM32的内置看门狗...STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。...值: 3时钟源设置 1选择外部时钟HSE 8MHz 2PLL锁相环倍频72倍 3系统时钟来源选择为PLL 4设置APB1分频器为 /2 32的时钟树框图 如果不懂的话请看《【STM32】系统时钟...1计数器的初始值 2 是我们设置的上窗口(W[6:0]值 3是下窗口值(0x3F) 窗口看门狗计数器的值只有在2和3 之间(上窗口和下窗口之间)才可以喂狗 窗口看门狗中断: 并且窗口看门狗还可以使能中断

    3.1K31

    【STM32】HAL库 STM32CubeMX教程十—DAC「建议收藏」

    前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6...数模转换器。又称D/A转换器,简称DAC,是指将离散的数字信号转换为连续变量的模拟信号的器件。 典型的数字模拟转换器将表示一定比例电压值的数字信号转换为模拟信号。...STM32F1中有两个DAC,可以同时使用STM32的DAC模块是12位数字输入,电压输出型的DAC。...DAC原理总括 数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。...分频器为 /2 32的时钟树框图 如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》 3DAC设置 这个其实没啥好讲的 1.OUT1 和 OUT2对应两个输出通道 2.External

    3.5K21

    STM32使用定时器实现微秒(us)级延时

    引言 目前开发STM32普遍使用HAL库,但 HAL 库封装的延时函数目前仅支持 ms 级别的延时,日常很多情况下会用到 us 延时,特别是一些传感器的数据读取过程,对时序要求比较严格,us 延时必不可少...,因此我们今天来介绍STM32如何使用定时器实现微秒(us)级延时。...使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制 到几毫秒。 通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。...使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。 基本定时器 TIM6 和 TIM7 包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。...(&htim2, us - 1);//定时器响应时间为period*定时器频率 HAL_TIM_Base_Start(&htim2);//start the timer //通过轮询的方式等待定时器的更新事件

    4.8K20

    【STM32】HAL库 STM32CubeMX教程六—-定时器中断

    是我们学习STM32最频繁使用到的外设之一,所以一定要掌握好,这节我们讲解定时器中断,本系列教程将对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具...72倍 3系统时钟来源选择为PLL 4设置APB1分频器为 /2 5 这时候定时器的时钟频率为72Mhz 32的时钟树框图 如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》 3...ADC的同步转换,) 这两个为定时器主从模式配置,很少用到,我们用不到,所以全部关闭 使能定时器中断: 定时器溢出时间: 这里我们 arr=4999 psc=7199 Tclk=72Mhz...和定时器通道 void HAL_TIM_PeriodElapsedCallback(&htim2); 进入相对应中断回调函数 在中断回调函数中添加用户代码 你也可以在在stm32f1xx_it.c...中找到中断回调函数 __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 例程: 定时器溢出时间为500ms

    3.7K30

    stm32cubemx使用教程pdf_库乐队完全新手教程

    前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6...STM32的定时器除了TIM6和TIM7(基本定时器)之外,其他的定时器都可以产生PWM输出。...当TIMx_CNT值达到ARR时,定时器溢出,重新向上计数…循环此过程 至此一个PWM周期完成 总结: 每个定时器有四个通道,每一个通道都有一个捕获比较寄存器, 将寄存器值和计数器值比较...4设置APB1分频器为 /2 32的时钟树框图 如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》 4项目文件设置 1 设置项目名称 2 设置存储路径 3 选择所用IDE 5.../* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /* USER CODE END 2 */ 在while循环中添加代码

    72310

    STM32定时器US延时

    看门狗也是定时器,启动后便开始计数,达到计数阈值则复位系统。STM32内置了两个看门狗定时器,即独立看门狗(IWDG)和窗口看门狗(WWDG)。该部分内容,后面章节再详细讲解。...定时器的定时时间主要取决于预分频系数和定时周期,计算公式为: 假设当前系统时钟频率为72MHz,APB1二分频为36MHz,TIMxCLK则为72MHz。...= t) // 直到定时器计数从 0 计数到 t 结束循环,刚好 t us { counter = __HAL_TIM_GET_COUNTER(&htim); // 获取定时器当前计数 } HAL_TIM_Base_Stop...1us,因此这里要t us,设置ARR为t,即定时器从0计数到t,刚好t us; 12行:使用HAL库提供的“__HAL_TIM_SET_COUNTER ()”直接设置CNT计数器的值,保证定时器从0开始计数...; 13行:启动定时器; 14~17行:此时定时器变从0到t开始计数,使用“__HAL_TIM_GET_COUNTER()”获取当前CNT计数器的值,当CNT计数器的值等于t时,时间经历了0到t个1us

    1.3K20

    【STM32H7】第4章 RTX5操作系统移植(MDK AC5)

    第8步,HAL库时间基准stm32h7xx_hal_timbase_tim.c 4.12 第9步,添加BSP驱动文件bsp_dwt.c 4.13 第10步,创建应用任务(重要,注意启动任务) 4.14...总的来说,这4步就可以完成移植, 下面将STM32H7的移植步骤和注意事项为大家做个说明。...4.11 第8步,HAL库时间基准stm32h7xx_hal_timebase_tim.c 由于RTX5和HAL库需要一个时间基准,而且默认都是用的滴答定时器,所有要有一个选用其它的时间基准。...当前的处理方案是为HAL库提供一个时间基准文件stm32h7xx_hal_timbase_tim.c。...添加bsp_dwt.c文件和bsp_dwt.h文件主要是因为第8步中的stm32h7xx_hal_timebase_tim.c文件里面的函数bsp_DelayMS要使用,此函数是基于DWT系统时钟周期计数器实现

    89810

    【STM32H7】第5章 RTX5操作系统移植(MDK AC6)

    第8步,HAL库时间基准stm32h7xx_hal_timbase_tim.c 5.12 第9步,添加BSP驱动文件bsp_dwt.c 5.13 第10步,创建应用任务(重要,注意启动任务) 5.14...总的来说,这4步就可以完成移植, 下面将STM32H7的移植步骤和注意事项为大家做个说明。...5.11 第8步,HAL库时间基准stm32h7xx_hal_timebase_tim.c 由于RTX5和HAL库需要一个时间基准,而且默认都是用的滴答定时器,所有要有一个选用其它的时间基准。...当前的处理方案是为HAL库提供一个时间基准文件stm32h7xx_hal_timbase_tim.c。...添加bsp_dwt.c文件和bsp_dwt.h文件主要是因为第8步中的stm32h7xx_hal_timebase_tim.c文件里面的函数bsp_DelayMS要使用,此函数是基于DWT系统时钟周期计数器实现

    84130

    Cubemx与HAL库系列教程|ADC+DMA多通道采集详解

    STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC),这些 ADC 可以独立使用, 也可以使用双重模式(提高采样率)。...STM32 的 ADC 最大的转换速率为 1Mhz,也就是转换时间为 1us(在 ADCCLK=14M,采样周期为 1.5 个 ADC 时钟下得到),不要让 ADC 的时钟超过 14M,否则将导致结果准确度下降...转换时间 采样周期最小是 1.5 个,即如果我们要达到最快的采样,那么应该设置采样周期为 1.5 个周期,这里说的周期就是1/ADC_CLK ADC 的总转换时间跟 ADC 的输入时钟和采样时间有关,...通常经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us 外部的 16 个通道在转换的时候可分为 2 组通道:规则通道组和注入通道组...,DMA为循环模式,数据在buffer中不断循环更新 配置为不连续模式,只转换一次 我是直接接到3.3V测试的,精度还可以 接GND,是有一些非零值的,所以必要的滤波还是要做的,这里我是用了最简单的均值滤波处理

    6.4K20

    【STM32F429】第6章 ThreadX操作系统移植(IAR)

    库时间基准stm32f4xx_hal_timebase_tim.c ThreadX系统时钟节拍默认是用的滴答定时器,STM32的HAL库时间基准也是用的滴答定时器。...简单的处理办法是重新下面两个函数即可,让HAL库和ThreadX都使用滴答定时器: /* ********************************************************...此文件主要用于为HAL库重新安排一个时间基准: 6.4.7 第2.7步,添加BSP驱动文件bsp_dwt.c 添加bsp_dwt.c文件和bsp_dwt.h文件主要是因为2.6步中的stm32f4x_hal_timebase_tim.c...文件里面的函数bsp_DelayMS要使用,此函数是基于DWT系统时钟周期计数器实现。...- 设置NVIV优先级分组为4。 */ HAL_Init(); /* 配置系统时钟到168MHz - 切换使用HSE。

    72620

    【STM32】HAL库 STM32CubeMX教程十三—RTC时钟

    RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。...系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。 上电复位后,所有RTC寄存器都会受到保护,以防止可能的非正常写访问。...RTC具体流程: RTCCLK经过RTC_DIV预分频,RTC_PRL设置预分频系数,然后得到TR_CLK时钟信号,我们一般设置其周期为1s,RTC_CNT计数器计数,假如1970设置为时间起点为0s,...RTC_ALR是设置闹钟时间,RTC_CNT计数到RTC_ALR就会产生计数中断, RTC_Second为秒中断,用于刷新时间, RTC_Overflow是溢出中断。...(1000); 程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。

    2.7K21

    【嵌入式】延时函数及其原理

    延时函数(Delay Function)在编程中是一种常见的功能,广泛用于控制程序的执行时间,尤其是在嵌入式系统和实时系统中。延时函数的实现和使用可以根据不同的硬件和软件环境有所不同。...本文将详细讲解延时函数的原理、实现方法、应用场景以及相关注意事项。 1. 什么是延时函数 1.1. 定义 延时函数是一种用于在程序中引入人为延迟的函数,其主要作用是让程序在指定的时间段内暂停执行。...} } 这个函数的延时长度取决于循环次数和每次循环执行所需的时间。...基于循环计数的延时 这是最简单的延时方法,但不推荐在需要精确延时的场合使用。实现方式如前面提到的空循环。 3.2. 基于硬件定时器的延时 硬件定时器可以产生精确的时间间隔,适用于高精度延时。...例如,在软件延时中,可以通过实验确定空循环的执行时间,从而调整循环次数。

    23010

    【STM32F429】第5章 ThreadX操作系统移植(MDK AC6)

    库时间基准stm32f4xx_hal_timebase_tim.c ThreadX系统时钟节拍默认是用的滴答定时器,STM32的HAL库时间基准也是用的滴答定时器。...简单的处理办法是重新下面两个函数即可,让HAL库和ThreadX都使用滴答定时器: /* ********************************************************...此文件主要用于为HAL库重新安排一个时间基准: 5.4.7 第2.7步,添加BSP驱动文件bsp_dwt.c 添加bsp_dwt.c文件和bsp_dwt.h文件主要是因为2.6步中的stm32f4xx_hal_timebase_tim.c...文件里面的函数bsp_DelayMS要使用,此函数是基于DWT系统时钟周期计数器实现。...- 设置NVIV优先级分组为4。 */ HAL_Init(); /* 配置系统时钟到168MHz - 切换使用HSE。

    87820

    【STM32F429】第7章 ThreadX操作系统移植(GCC)

    库时间基准stm32f4xx_hal_timebase_tim.c ThreadX系统时钟节拍默认是用的滴答定时器,STM32的HAL库时间基准也是用的滴答定时器。...简单的处理办法是重新下面两个函数即可,让HAL库和ThreadX都使用滴答定时器: /* ********************************************************...此文件主要用于为HAL库重新安排一个时间基准: 7.4.7 第2.7步,添加BSP驱动文件bsp_dwt.c 添加bsp_dwt.c文件和bsp_dwt.h文件主要是因为2.6步中的stm32f4xx_hal_timebase_tim.c...文件里面的函数bsp_DelayMS要使用,此函数是基于DWT系统时钟周期计数器实现。...- 设置NVIV优先级分组为4。 */ HAL_Init(); /* 配置系统时钟到168MHz - 切换使用HSE。

    1K20
    领券