在tim.c的用户代码区添加如下代码。 在tim.h的user code处添加如下引用代码,其中HAL_Delay_us()是微秒级延时函数,HAL_Delay_ms()是毫秒级延时函数。 main.c中添加如下代码,测试效果。 上面代码连续用了13个延时函数,是为了凑够1秒方便观察。另外延时函数的参数是uint16_t,无符号短整型,数值范围为0~65535,数值...
void Delay_us(u32 nus); //微秒级延时函数 void Delay_ms(u32 nus); //毫秒级延时函数 #endif Delay.c的程序: #include "Delay.h" static u16 fac_us; //计fac_us个数为1us - SysTick时钟频率 static u32 fac_ms; //计fac_ms个数为1ms /*** *函数名: SysTick_Init *函数功能: SysTick...
void SysTick_Init(u8 SYSTICK); //SysTick时钟初始化函数 void Delay_us(u32 nus); //微秒级延时函数 void Delay_ms(u32 nus); //毫秒级延时函数 #endif Delay.c的程序: #include "Delay.h" static u16 fac_us; //计fac_us个数为1us - SysTick时钟频率 static u32 fac_ms; //计fac_ms个数...
delay_us((u32)(nms*1000)); //普通方式延时 } 带操作系统的delay_ms函数,会判断需要延时的时间是否大于之前在init里面设置的最小时间周期fac_ms,如果大于fac_ms,就会进行nms/fac_ms次时间延时,并且这段时间操作系统进行正常的任务调度,最后计算nms%=fac_ms,如果存在余数表示最后差nms没有延时完成,所以又用de...
HAL_Delay(1000)是延时1秒吗 假设我们配置的tick为1ms,那么HAL_Delay(1000)是延时1000ms吗? 其实不是延时1000ms。 实际延时是1001ms。 我们看下代码 typedefenum{HAL_TICK_FREQ_10HZ =100U,HAL_TICK_FREQ_100HZ =10U,HAL_TICK_FREQ_1KHZ =1U,HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ} HAL_TickFreq...
代码的书写过程中经常用到延时,这里主要讲述一下HAl延时,HAL库之HAL_Delay()函数在72M主频,STM32CUBEMX自动生成情况下,默认为延时1ms单位,即HAL_Delay(500)表示500ms延时,这是因为在默认状态下,SysTick()默认设置为1ms中断,下面就原理进行叙述。 Systick定时器延时原理 ...
在tim.h的user code处添加如下引用代码,其中HAL_Delay_us()是微秒级延时函数,HAL_Delay_ms()是毫秒级延时函数。 main.c中添加如下代码,测试效果。 上面代码连续用了13个延时函数,是为了凑够1秒方便观察。另外延时函数的参数是uint16_t,无符号短整型,数值范围为0~65535,数值超限会报错,如下图。
__weakvoidHAL_Delay(__IO uint32_t Delay) 可以看到,HAL_Delay()是一个虚函数,这表明用户可以在其它的位置重定义,如果这样,新的函数将会取代它,编译过程中也不会出现重定义的错误。该函数只有一个32位的参数,明显的,这个形参指定了延时的时间,它的单位是毫秒(ms)。关于这个函数的使用,是简单的,下面的例子...
普通定时器实现ms延时,可直接使用HAL库函数HAL_delay() */ void delay_ms_tim(uint16_t nms) { uint32_t i; for(i=0;i<nms;i++) user_delaynus_tim(1000); } 4、实现效果 通过延时翻转 IO,逻辑分析仪测试延时时间,分别测试了延时 20us,500ms,下面是测量图: ...
Delay:延迟时间,单位是ms 返回值:无 示例代码: HAL_Delay(50);//延迟50ms 2,GPIO函数 HAL_GPIO_WritePin 原型:void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 作用:使得某一个GPIO的Pin的状态变成高电平或者低电平 ...