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的程序 |
这个函数是设置重载寄存器值得,为1ms,如果想设置1us要改为HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
因为STM32F073最大32M时钟,函数调用等等操作有可能超过32个时钟,所以用中断函数实现1us延时是有难度的。根据需要可以试试10us或者更大时间的延时
修改成这个样子,昨天试过了,程序下载下去之后直接不运行了,不晓得什么原因
好的,,我去试一下
嗯嗯嗯,我去试一下