void delay_ms_tim(uint16_t nms) { uint32_t i; for(i=0;i<nms;i++) user_delaynus_tim(1000); } 4、实现效果 通过延时翻转 IO,逻辑分析仪测试延时时间,分别测试了延时 20us,500ms,下面是测量图: 二、Systick 功能实现 us 延时 1、Systick介绍 CM3与CM4包含一个系统计数器SysTick,是一个24位...
普通定时器实现us延时 */voiduser_delaynus_tim(uint32_t nus){uint16_t differ=0xffff-nus-5;//设置定时器2的技术初始值__HAL_TIM_SetCounter(&htim2,differ);//开启定时器HAL_TIM_Base_Start(&htim2);while(differ<0xffff-5){differ=__HAL_TIM_GetCounter(&htim2);};//关闭定时器HAL_TIM_Bas...
普通定时器实现ms延时,可直接使用HAL库函数HAL_delay() */ void delay_ms_tim(uint16_t nms) { uint32_t i; for(i=0;i<nms;i++)user_delaynus_tim(1000); } 1. 2. 3. 4. 5. 6. 7. 8. 1.4、实现效果 通过延时翻转IO,逻辑分析仪测试延时时间,分别测试了延时 20us,500ms,下面是测量图: ...
1.3、代码实现 /* 普通定时器实现us延时 */ void user_delaynus_tim(uint32_t nus) { uint16_t differ = 0xffff-nus-5; //设置定时器2的技术初始值 __HAL_TIM_SetCounter(&htim2,differ); //开启定时器 HAL_TIM_Base_Start(&htim2); while( differ<0xffff-5) { differ = __HAL_TIM_GetCou...
STM32程序从标准库移植到HAL库的时候,会发现HAL库中只有一个毫秒级延时函数HAL_Delay(),而没有微秒级延时delay_us(),本文就在HAL库中用定时器实现这个delay_us()。 如下图,找到HAL_Delay()函数定义的地方,发现这个函数有__weak标识,是一个弱化函数,可以被重写。
1.3、代码实现 /* 普通定时器实现us延时 */voiduser_delaynus_tim(uint32_t nus){ uint16_t differ =0xffff-nus-5;//设置定时器2的技术初始值__HAL_TIM_SetCounter(&htim2,differ);//开启定时器HAL_TIM_Base_Start(&htim2);while( differ<0xffff-5) ...
delay_us(uint16_t nus); /* USER CODE END PFP */ /* USER CODE BEGIN 4 */ void delay_...
前面章节的实验我们使用的是HAL库里自带的API函数HAL_Delay来实现毫秒级别延时的,如果使用到更高精度的延时,例如us级别的延时,我们可以使用定时器来实现,也可以使用SysTick的时钟摘取法来实现。本节,我们介绍如何使用SysTick来实现us级别的延时。 本章分为如下几个小节: ...
在HAL库中,可以使用SysTick模块和相关的HAL函数来实现微秒级延时函数。以下是一个示例代码: 首先,需要配置SysTick模块的时钟源和计数器值。在初始化函数中添加以下代码: ```c ``` 然后,可以编写一个名为`delay_us`的延时函数。这个函数使用了SysTick模块的计数器来进行延时操作。在这个函数中,当计数器减为0时...
1. HAL_Delay() 该函数可以实现毫秒级别的延时,其原型如下: void HAL_Delay(uint32_t Delay); 其中Delay为需要延时的时间,单位为毫秒。该函数会阻塞当前线程,并等待指定时间后返回。 2. HAL_SuspendTick() 该函数用于暂停系统滴答定时器(SysTick),其原型如下: void HAL_SuspendTick(void); 调用该函数后,系统...