方式二:简单延时 优点:实现简单,如果是F1系列,HAL_RCC_GetHCLKFreq()获取的值是72000000,此方式经过测试还是比较准的,如果不考虑通用性,F1系列建议使用此种方式。 缺点:只适用F1系列72M主频。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 voiddelay_us(uint32_t us){uint32_t delay=(HAL_RCC_GetH...
#include "stm32f4xx_hal.h" void udelay(uint32_t us) { uint32_t ticks = us * (HAL_RCC_GetHCLKFreq() / 1000000); // 计算需要的SysTick滴答数 uint32_t start = SysTick->VAL; // 获取当前的SysTick计数值 uint32_t now; while (1) { now = SysTick->VAL; if (now >...
void HAL_Delay_us(uint32_t us) { HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000); HAL_Delay(us-1); HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); } 实现原理: 假设我们的时钟频率设为了180MHz HAL_RCC_GetHCLKFreq()用于获取当前系统中的计数值 HAL_SYSTICK_Config()用于设置多少...
AI代码解释 __weak HAL_StatusTypeDefHAL_InitTick(uint32_t TickPriority){/*Configure the SysTick to have interrupt in 1ms time basis*/HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000U);/*Configure the SysTick IRQ priority */HAL_NVIC_SetPriority(SysTick_IRQn,TickPriority,0U);/* Return functio...
Cache初始化,需要用到core_cm7.h文件。 HAL库初始化函数HAL_Init,需要用到文件stm32h7xx_hal.c。 系统时钟初始化,需要用到库文件stm32h7xx_hal_rcc.c。 前面的两步完成后,就可以开始做用户需要的按键、串口等方面的初始化和应用代码的实现了。这里把我们需要学习的几个库文件整理出来,依次有: ...
HAL_RCC_GetHCLKFreq()用于获取当前系统中的计数值 HAL_SYSTICK_Config()用于设置多少时间中断一次 180M / 1000 = 180000 HAL_SYSTICK_Config(180000)代表了延时了180000 / f主频 = 1 /1000s 即 1ms 中断一次 同理HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000) 即 1us 中断一次 ...
方案一: 参考博客:https://blog.csdn.net/qq_34752070/article/details/82620374 // HAL_RCC_GetHCLKFreq()/1000 1ms中断一次,即HAL_Delay函数延时基准为1ms // HAL_RCC_GetHCLKFreq()/100000 10us中断一次,即HAL_Delay函数延时基准为10us // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次,即HAL_Delay函数...
uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);while (delay--){ ;} } void ...
优点: 实现简单,如果是F1系列,HAL_RCC_GetHCLKFreq()获取的值是72000000,此方式经过测试还是比较准...
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);//1ms 到此,关于systick的工作流程就算是介绍差不多了,还有最后一步,Systick中断回调函数需要添加到中断回调句柄中 可以看到systick中断回调函数依然是_weak修饰符,意思就是我们自己一个一样名字的函数,不会报错 ...