[STM32F0] STM32F0_SYSTICK在STM32CUBEMX中的设置

[复制链接]
449|1
 楼主| c17 发表于 2022-2-28 22:29 | 显示全部楼层 |阅读模式
用过STM32CUBEMX的童鞋们都知道,代码生成的时候默认HAL_Delay延时单位为ms,当程序中要用到us延时的时候该怎么办呢!

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

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

  1. void HAL_Delay_us(__IO uint32_t delay_us)
  2. {
  3.         uint32_t first_value = 0;            
  4.         uint32_t current_value = 0;      
  5.         uint32_t reload = SysTick ->LOAD;
  6.        
  7.        
  8.         uint32_t nus_number = delay_us * ((reload + 1) / 1000);
  9.         uint32_t change_number = 0;

  10.         first_value = SysTick ->VAL;
  11.         while(1)
  12.         {
  13.                   current_value = SysTick ->VAL;
  14.                   if(current_value != first_value)
  15.                         {

  16.                                  if(current_value < first_value)
  17.                                  {
  18.                                            change_number += first_value - current_value;
  19.                                            //change_number = first_value - current_value + change_number;
  20.                                  }
  21.                                
  22.                                  else
  23.                                  {
  24.                                           change_number += reload - current_value + first_value;
  25.                                  }
  26.                                  first_value = current_value;  
  27.                                  if(change_number >= nus_number)
  28.                                  {
  29.                                           break;
  30.                                  }
  31.                         }
  32.         }
  33. }


 楼主| c17 发表于 2022-2-28 22:31 | 显示全部楼层
无需更改任何其它代码,直接在需要的地方插入HAL_Delay_us(nus);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

c17

40

主题

312

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部