Nuru_Banmian
Nuru_Banmian
Published on 2025-04-23 / 15 Visits
0
0

系统滴答定时器-案例1-寄存器&HAL库实现

寄存器实现

systic.h

 #ifndef __SYSTICK_H
 #define __SYSTICK_H
 ​
 #include "stm32f10x.h"
 #include "led.h"
 ​
 void Systick_Init(void);
 ​
 #endif
 ​

systic.c

 #include "systick.h"
 ​
 void Systick_Init(void)
 {
     // 1. 设置重装载值,每1ms产生一次中断
     SysTick->LOAD = 71999;
 ​
     // 2. 配置时钟源,AHB = 72MHz
     SysTick->CTRL |= SysTick_CTRL_CLKSOURCE;
 ​
     // 3. 使能中断
     SysTick->CTRL |= SysTick_CTRL_TICKINT;
 ​
     // 4. 开启定时器
     SysTick->CTRL |= SysTick_CTRL_ENABLE;
 }
 ​
 // 定义一个变量,用于计数(单位ms)
 uint16_t count = 0;
 ​
 // 中断服务程序
 void SysTick_Handler(void)
 {
     count ++;
     // 如果已经达到了1000ms,就翻转LED1
     if (count == 1000)
     {
         LED_Toggle(LED1);
         count = 0;      // 清零count
     }
 }
 ​

main.c

 #include "usart.h"
 #include "led.h"
 #include "systick.h"
 ​
 int main(void)
 {
     // 初始化
     USART_Init();
     LED_Init();
     Systick_Init();
 ​
     while(1)
     {
     }
 }
 ​

HAL库实现

CubeMX配置

SYS,RCC,Clock Configuration都照常设置

PA0设置GPIO_output

GPIO设置

系统滴答定时器_案例1_GPIO设置.png

NVIC中断优先级不用更改

stm32f1xx_it.c

 /**
   * @brief This function handles System tick timer.
   */
 void SysTick_Handler(void)
 {
   /* USER CODE BEGIN SysTick_IRQn 0 */
 ​
   /* USER CODE END SysTick_IRQn 0 */
   HAL_IncTick();
   /* USER CODE BEGIN SysTick_IRQn 1 */
   if (uwTick % 1000 == 0)
   {
     HAL_GPIO_TogglePin(GPIOA, LED1_Pin);
   }
   
   /* USER CODE END SysTick_IRQn 1 */
 }

这里的uwTickFreq设置为1,uwTick是一个全局变量,代表单片机开始运行时运行的时间的时间

因此上面可以直接使用这个全局变量进行代码的编写

由于这是一个全局变量,因此不能随意将此位置0

所以只是做了整除然后判断

 /**
   * @brief This function is called to increment  a global variable "uwTick"
   *        used as application time base.
   * @note In the default implementation, this variable is incremented each 1ms
   *       in SysTick ISR.
   * @note This function is declared as __weak to be overwritten in case of other
   *      implementations in user file.
   * @retval None
   */
 __weak void HAL_IncTick(void)
 {
   uwTick += uwTickFreq;
 }



Comment