[电机控制专用MCU] APM32M3514 电机通用评估板 +SysTick 定时器

[复制链接]
669|3
 楼主| meiyaolei 发表于 2025-3-2 15:58 | 显示全部楼层 |阅读模式
在 APM32M3514 电机通用评估板 上使用 SysTick 定时器来实现计划任务LED 闪烁。SysTick 是 Cortex-M 内核提供的一个系统定时器,通常用于操作系统的任务调度或简单的定时任务。

以下是 SysTick 定时器的计划任务实现 LED 闪烁控制任务。

配置 SysTick 定时器
配置 SysTick 定时器,设置其定时周期。
  1. __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
  2. {
  3.   if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */

  4.   SysTick->LOAD  = ticks - 1;                                  /* set reload register */
  5.   NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
  6.   SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
  7.   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
  8.                    SysTick_CTRL_TICKINT_Msk   |
  9.                    SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
  10.   return (0);                                                  /* Function successful */
  11. }
LED 控制函数
实现 LED 的切换功能。
  1.   if (sysTick >= 1000)
  2. {
  3.     sysTick = 0;  // 重置计时器
  4.     static uint8_t ledState = 0;  // 用于记录 LED 的当前状态

  5.     if (ledState == 0)
  6.     {
  7.         APM_MINI_LEDOn(LED2);  // 打开 LED
  8.         ledState = 1;  // 更新状态为开
  9.     }
  10.     else
  11.     {
  12.         APM_MINI_LEDOff(LED2);  // 关闭 LED
  13.         ledState = 0;  // 更新状态为关
  14.     }
  15. }                 

实现效果
288ee019f3cc83d0e4dc7c062c57fc4f 00_00_00-00_00_30.gif


GalaxyStroll 发表于 2025-3-6 19:41 | 显示全部楼层
这个systick是不是还是内核里面的那个啊?
auzzz 发表于 2025-3-12 12:36 来自手机 | 显示全部楼层
这个sysTick变量是不是应该用volatile修饰防止编译器优化?
阳光爆裂 发表于 2025-3-25 22:50 | 显示全部楼层
systick设计的中断间隔是多少啊?
对于电机控制多少是合适的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

263

主题

836

帖子

6

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