×
单片机 > 单片机程序设计 > 详情

STM32F0_SYSTICK在STM32CUBEMX中的设置

发布时间:2020-05-19 发布时间:
|

     用过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);



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
采用AT89C2051的数字可调稳压电源单片机源程序