使用STM32CUBE生成STM32L073的工程,如何实现us级延时?
HAL库里面有ms级的延时__weak void HAL_Delay(__IO uint32_t Delay){
uint32_t tickstart = 0;
tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay)
{
}
},
但是如何实现us级的延时呢?
昨天尝试着修改了
__weak HAL_StatusTypeDef HAL_Delay_us(uint32_t TickPriority)
{
/*Configure the SysTick to have interrupt in 1ms time basis*/
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
/*Configure the SysTick IRQ priority */
HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0);
/* Return function status */
return HAL_OK;
}
没有实现要求,而且还出现了其他问题,程序不运行,所以想请教一下大家,如何在HAL库中实现us延时?
目前在做DHT11的程序
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
这个函数是设置重载寄存器值得,为1ms,如果想设置1us要改为HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
因为STM32F073最大32M时钟,函数调用等等操作有可能超过32个时钟,所以用中断函数实现1us延时是有难度的。根据需要可以试试10us或者更大时间的延时 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
修改成这个样子,昨天试过了,程序下载下去之后直接不运行了,不晓得什么原因 函数库里写明了HAL_Delay会用于HAL库本身配置过程中的很多地方,不能随便改,,可以用另外一个定时器实现 还是使用定时器实现吧,那样更好操作些 中山无雪 发表于 2016-5-10 12:41
还是使用定时器实现吧,那样更好操作些
好的,,我去试一下 风子 发表于 2016-5-10 12:09
函数库里写明了HAL_Delay会用于HAL库本身配置过程中的很多地方,不能随便改,,可以用另外一个定时器实现 ...
嗯嗯嗯,我去试一下
HAL_Delay 这个函数里面有说明的,它就是毫秒级的延时呀。 用systick写个定时,可以到1us,挺准的 试了,,但是也是不行,今天晚上回去写个像用51时的延时函数,不行的话就开个定时器