[其他ST产品] STM32的标准库(HAL库)的例程

[复制链接]
1335|0
 楼主| 慢醇 发表于 2024-2-26 19:15 | 显示全部楼层 |阅读模式
STM32的标准库(HAL库)的例程,演示了如何配置系统定时器(SysTick)并使用定时器中断的方式。
这个例程中,我们将SysTick定时器配置为每秒触发一次中断,并在中断中更新一个全局变量来表示经过的秒数。



  1. #include "stm32f4xx_hal.h"

  2. // 全局变量,表示经过的秒数
  3. volatile uint32_t seconds = 0;

  4. // SysTick中断处理函数
  5. void SysTick_Handler(void)
  6. {
  7.     // 每秒钟递增一次
  8.     seconds++;
  9. }

  10. int main(void)
  11. {
  12.     // 初始化HAL库
  13.     HAL_Init();

  14.     // 配置系统时钟
  15.     SystemClock_Config();

  16.     // 配置SysTick定时器
  17.     if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
  18.     {
  19.         Error_Handler();
  20.     }

  21.     // 配置SysTick定时器为1秒一次
  22.     HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);

  23.     // 启动SysTick定时器
  24.     HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  25.     HAL_SYSTICK_Enable();

  26.     // 主循环
  27.     while (1)
  28.     {
  29.         // 在这里可以执行其他任务
  30.     }
  31. }

  32. // 系统时钟配置函数(由CubeMX生成)
  33. void SystemClock_Config(void)
  34. {
  35.     // 系统时钟配置代码
  36.     // ...
  37. }

  38. // 错误处理函数
  39. void Error_Handler(void)
  40. {
  41.     // 发生错误时的处理代码
  42.     while (1)
  43.     {
  44.         // 在这里可以添加错误处理的代码
  45.     }
  46. }

  47. #ifdef  USE_FULL_ASSERT
  48. // 断言失败处理函数
  49. void assert_failed(uint8_t* file, uint32_t line)
  50. {
  51.     // 发生断言失败时的处理代码
  52. }
  53. #endif /* USE_FULL_ASSERT */



这个例程中,SysTick定时器被配置为每秒触发一次中断。
在中断处理函数SysTick_Handler中,全局变量seconds会递增,表示经过的秒数。
在主循环中,你可以执行其他任务,同时使用seconds变量获取经过的时间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

1382

帖子

6

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