STM32F0_SYSTICK在STM32CUBEMX中的设置

     用过STM32CUBEMX的童鞋们都知道,代码生成的时候默认HAL_Delay延时单位为ms,当程序中要用到us延时的时候该怎么办呢!

     最终评估下来,感觉原子的思路比较靠谱,不带OS的设计理念是搞清楚SYSTICK的RELOAD寄存器的数值代表什么,代码生成时默认为47999,也就是说

     定时器从47999减1减到0的时候,时间过了1000us,换算后得出数值从47减到1的时候时间过了1us.

void HAL_Delay_us(__IO uint32_t delay_us)
{
	uint32_t first_value = 0;            
	uint32_t current_value = 0;       
	uint32_t reload = SysTick ->LOAD; 
	
	
	uint32_t nus_number = delay_us * ((reload + 1) / 1000);
	uint32_t change_number = 0;

        first_value = SysTick ->VAL;
	while(1)
	{
		  current_value = SysTick ->VAL;
		  if(current_value != first_value)
			{

				 if(current_value < first_value)
				 {
					   change_number += first_value - current_value;
					   //change_number = first_value - current_value + change_number;
				 }
				
				 else
				 {
					  change_number += reload - current_value + first_value;
				 }
				 first_value = current_value;  
				 if(change_number >= nus_number)
				 {
					  break;
				 }
			}
	}
}
无需更改任何其它代码,直接在需要的地方插入HAL_Delay_us(nus);

猜你喜欢

转载自blog.csdn.net/liuxinyong236/article/details/75386369