STM32CubeMX自动生成SYSTICK配置

2023-05-16

1.SYSTICK原理及其寄存器

   1.1  SYSTICK原理

SysTick 是一个24位的倒计数定时器,当计到0时,将从RELOAD寄存器中自动重装载定时初值并继续计数,且同时触发中断。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。

SysTick 的最大使命,就是定期地产生异常请求,作为系统的时基,产生一个周期性的中断。

 

   1.2SYSTICK寄存器

  CTRL: Systick控制和状态寄存器 
  LOAD: Systick重装载寄存器 
  VAL: Systick当前值寄存器 
  CALIB: Systick校准值寄存器  

è¿éåå¾çæè¿°

  CLKCOURCE-时钟源  0:外部时钟源HCLK(AHB总线时钟)/8 72M/8 = 9M  1:内核时钟(HCLK) 72M 

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

     CURRENT: 每经过一个Systick时钟周期,寄存器值-1 。

è¿éåå¾çæè¿°

 

2.STM32CubeMX配置与代码生成

如下图STM32CubeMX配置所示,图中To Cortex System timer(MHz)就是Systick的时钟频率。

 自动代码生成如下:

    /**Configure the Systick interrupt time */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/8000);   //  = /8/1000 :1000 is 1ms ;1000000 is 1us

    /**Configure the Systick */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

 

3.相关重要的函数

  3.1中断处理函数

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  HAL_SYSTICK_IRQHandler();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}

__IO uint32_t uwTick;

__weak void HAL_IncTick(void)
{
  uwTick += uwTickFreq;
}

每次SysTick异常中断后,会执行SysTick_Handler() 函数,然后HAL_IncTick()函数。由于uwTick是                                               无符号32位整型数,所以根据C语言的定义,当累计到0xFFFFFFFF后,再加1等于0。

  3.2 延时函数

__weak void HAL_Delay(uint32_t Delay)
{
  uint32_t tickstart = HAL_GetTick();
  uint32_t wait = Delay;

  /* Add a freq to guarantee minimum wait */
  if (wait < HAL_MAX_DELAY)
  {
    wait += (uint32_t)(uwTickFreq);
  }

  while ((HAL_GetTick() - tickstart) < wait)
  {
  }
}

__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}

由于tickstart和HAL_GetTick()的返回值都是无符号32位整型,所以HAL_GetTick() - tickstart                                                  =HAL_GetTick() + (~ tickstart) ,如果tickstart > HAL_GetTick(),也可以计算出两者之间正确的差值。

 

4.注意事项

1.Systick的中断函数一定要在STM32CubeMX中设置自动生成出来;

2.由于Systick中断每次累加值uwTickFreq是在stm32f1xx_hal.c定义,且默认是1U(以1kHz为默认频率)。而Systick配置函数是在stm32f1xx_hal_cortex.c和core_cm3.h定义,各自完全独立。因此,如果Systck配置频率不是1kHz时,需要利用stm32f1xx_hal.c的HAL_SetTickFreq()函数重新配置累计值uwTickFreq;

3.当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeMX自动生成SYSTICK配置 的相关文章

  • 使用stm32CubeMX自动配置的工程文件,进行串口的不定长接收(非DMA方式)

    方法描述 xff1a 使用stm32CubeMX自动配置的工程文件 xff0c 进行串口的不定长接收 xff08 非DMA方式 xff09 实际问题解决尝试 xff1a 1 HAL库函数只有接收定长数据HAL UART Receive xf
  • STM32CubeMX SDIO SD卡 FATFS

    390条消息 STM32CubeMX系列09 SDIO xff08 SD卡读写 SD卡移植FATFS文件系统 xff09 stm32cubemx sdio 32Haozi的博客 CSDN博客 https blog csdn net weix
  • STM32CubeMX——FREERTOS学习:消息队列Queue

    什么是队列 队列 xff0c 也叫消息队列 xff0c 就是把消息一条一条的排个队 比如创建了一个消息队列 xff0c 这个消息队列可以存10条消息 任务A可以往里存消息 xff0c 任务B也可以往里存 这个存的消息是要讲先来后到的 xff
  • FreeRTOS-Systick笔记

    1 在Cortem M内核中 xff0c 继承了systick的定时器 xff0c 属于NVIC的一部分 xff0c 异常类型为 15 systick是一个24位的向下计数器 2 Systick寄存器 3 如何使用该定时器 1 xff09
  • STM32CubeMX驱动4x4键盘模块

    文章目录 1 4x4键盘模块简介2 4x4键盘模块原理2 1 独立按键的原理2 2 矩阵键盘的原理 3 移植源码到工程4 实验 1 4x4键盘模块简介 4x4键盘模块是一种常用的电子组件 xff0c 它由16个按钮或开关以矩阵方式排列而成
  • 【stm32CubeMX】基于STM32F103C8T6的LED闪烁并用Keil的软件仿真逻辑分析仪功能观察

    stm32CubeMX 基于STM32F103C8T6的LED闪烁并用Keil的软件仿真逻辑分析仪功能观察 一 安装STM32CubeMX二 安装HAL库三 新建项目四 keil仿真调试五 实现六 总结七 参考资料 一 安装STM32Cub
  • STM32CubeMX自动生成SYSTICK配置

    1 SYSTICK原理及其寄存器 1 1 SYSTICK原理 SysTick 是一个24位的倒计数定时器 xff0c 当计到0时 xff0c 将从RELOAD寄存器中自动重装载定时初值并继续计数 xff0c 且同时触发中断 只要不把它在Sy
  • STM32CUBEMX使用PWM+DMA驱动WS2812

    STM32CUBEMX使用PWM 43 DMA驱动WS2812 首先在stm32cubemx中设置pwm和dma 我设置了TIM1的CH1为PWM引脚编写DMA响应函数 xff0c 即PWM DMA完成数据发送后的回调函数 PWM DMA
  • STM32CubeMX串口通讯

    串口的简单介绍 RS 232与TTL 根据通讯使用的电平标准不同 xff0c 串口通讯可分为 TTL 标准及 RS 232 标准 而STM32的串口是TTL电平标准的 如果需要使用到RS 232则需要一个电平转换芯片 单工通信 半双工通信和
  • STM32CubeMX——霍尔编码器、L298N驱动电机

    前言 人生如逆旅 xff0c 我亦是行人 苏轼 临江仙 送钱穆父 目录 xff1a L298N电机驱动介绍编码器介绍电机介绍新建工程编写代码实验结果 一 L298N电机驱动介绍 B站 视频讲解 xff1a l298n电机驱动模块 电机正反转
  • stm32CubeMX中断模式编程点灯并实现串口点灯(中断方式)

    文章目录 一 中断介绍1 基础知识2 中断向量表3 中断过程 二 CubeMX中断方式点灯1 题目要求2 CubeMX设置设置管脚设置时钟源配置时钟优先级生成工程 3 代码编写4 连接测试 三 中断方式实现串口通信1 题目要求2 工程建立3
  • STM32cubeMx来对单片机串口1进行初始化

    步骤如下 xff1a 打开STM32CubeMX软件并新建一个工程在Pinout amp Configuration选项卡中选择正确的芯片型号 xff0c 然后在Pinout视图中找到串口1相关的引脚 默认情况下 xff0c 串口1使用PA
  • STM32CubeMX串口USART中断发送接收数据

    本文代码使用 HAL 库 文章目录 前言一 中断控制二 USART中断使用1 中断优先级设置 xff1a 2 使能中断3 使能UART的发送 接收中断4 中断收发函数5 中断处理函数6 中断收发回调函数 三 串口中断实验串口中断发送数据点亮
  • STM32CubeMX之RTC电子钟

    STM32CubeMX之RTC电子钟 1 简介 实时时钟是一个独立的定时器 RTC模块拥有一组连续计数的计数器 在相应软件配置下 可提供时钟日历的功能 修改计数器的值可以重新设置系统当前的时间和日期 2 特性 可编程的预分频系数 分频系数最
  • vim/gvim插件-verilog autodef-自动生成

    使用gvim插件效果如下 使用效果如下 总结 优点 1 这个使用效果是比emacs的auto reg和auto wire是方便且全面的 auto wire只能定义output的类型生成 2 这个插件还有AutoInstPortReAlign
  • stm32Cubemx:串口的空闲中断和接收中断------stm32f407zgt6

    介绍串口的接收中断与空闲中断 这两种中断都是在串口进行接收时可能会发生的中断 串口接收中断即每当串口完成一次接收之后触发一次中断 在 STM32 中相应的中断处理函数为 USARTx IRQHandler 中断回调函数为 HAL UART
  • Linux下使用STM32CUBEMX的makefile,报multiple defination错误的解决办法

    之所以报这个错是因为stm32cubemx生成makefile的一个bug 在C SOURCES部分会重复添加Src 下的c文件 上图是没有修改makefile之前 下图为修改后 要修改的部分
  • 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.8 TIM---PWM输出实验

    写在前面 STM32单片机开发应用教程 HAL库版 基于国信长天嵌入式竞赛实训平台 CT117E M4 第四章4 8 TIM PWM输出实验 讲解TIM 定时与PWM输出的STM32CubeMX配置和程序设计方法 官方例程下载 https
  • 【STM32CubeMX】位置式PID调节控制输出电压(超详解)

    本文将借助STM32CubeMX来配置ADC DMA DAC USART 并利用PID位置式算法实现对输出电压进行AD采集通过PID算法调节DAC 获取到我们想要的电压值 讲解的主要知识 何为PID以及为何需要PID STM32CubeMX
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理

随机推荐