[STM32U5] 【NUCLEO-U575ZI-Q测评】体验第N种闪灯之四——Tick实现非阻塞式点灯

[复制链接]
5372|3
 楼主| lulugl 发表于 2023-2-18 18:00 | 显示全部楼层 |阅读模式
https://bbs.21ic.com/icview-3284890-1-1.html
【目的】改造HAL_Delay阻塞式实现延时为非阻塞式延,实现每0.5秒来翻LED灯。
【开发环境】MacOS+STM32CubeIDE
【硬件】NUCLEO-U575ZI-Q开发板
【步聚】
1、利用两个变量来获取系统tick计数。
2、如果两个计数相差500个tick,则翻转LED灯。
【实现过程】
STM32CubeIDE在选择开发板生成基础工程时,已经初始化好了TICK,使用HAL_GetTick获取当前运行的tick计数。
代码如下:
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.         uint32_t last_tick;
  5.         uint32_t this_tick;
  6.   /* USER CODE END 1 */

  7.   /* MCU Configuration--------------------------------------------------------*/

  8.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  9.   HAL_Init();

  10.   /* USER CODE BEGIN Init */

  11.   /* USER CODE END Init */

  12.   /* Configure the system clock */
  13.   SystemClock_Config();

  14.   /* Configure the System Power */
  15.   SystemPower_Config();

  16.   /* USER CODE BEGIN SysInit */

  17.   /* USER CODE END SysInit */

  18.   /* Initialize all configured peripherals */
  19.   MX_GPIO_Init();
  20.   MX_ADC1_Init();
  21.   MX_UCPD1_Init();
  22.   MX_USART1_UART_Init();
  23.   MX_USB_OTG_FS_PCD_Init();
  24.   MX_RTC_Init();
  25.   /* USER CODE BEGIN 2 */

  26.   /* USER CODE END 2 */
  27.   last_tick = HAL_GetTick();
  28.   /* Infinite loop */
  29.   /* USER CODE BEGIN WHILE */
  30.   while (1)
  31.   {
  32.           this_tick = HAL_GetTick();
  33.           if((this_tick - last_tick)>=500)
  34.           {
  35.                   last_tick = this_tick;
  36.                   HAL_GPIO_TogglePin(LED_RED_GPIO_Port, LED_RED_Pin);

  37.           }
  38.     /* USER CODE END WHILE */

  39.     /* USER CODE BEGIN 3 */
  40.   }
  41.   /* USER CODE END 3 */
  42. }
【效果】板载的LED3实现每0.5秒翻转一次。
【提示】初学者往往会用阻塞式的delay来实现延时,但是在实际应用中,如果运用阻塞式的延时,会浪费大量的CPU资源。新手一定要改变这种习惯。当然实现非塞阻试的延习有很多种方式。利用系统的tick来实现是最简单的一种。
mikewalpole 发表于 2023-3-3 21:13 | 显示全部楼层
实现的效果怎么样              
pl202 发表于 2023-3-3 21:49 | 显示全部楼层
这个可以使用时间间隔实现的              
 楼主| lulugl 发表于 2023-3-3 22:14 | 显示全部楼层
对的,可以任意定多少时间来翻转。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

188

主题

844

帖子

12

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