STM32CubeMX自动生成SYSTICK配置

发布者:恬淡如云最新更新时间:2019-06-17 来源: eefocus关键字:STM32CubeMX  自动生成  SYSTICK配置 手机看文章 扫描二维码
随时随地手机看文章

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定时器亦将暂停运作。


关键字:STM32CubeMX  自动生成  SYSTICK配置 引用地址:STM32CubeMX自动生成SYSTICK配置

上一篇:STM32串口中断的方式发送
下一篇:STM32CubeMX学习教程之二:GPIO输入之外部中断

推荐阅读最新更新时间:2024-11-11 03:00

使用STM32CubeMX创建STM32F407工程
创建项目 新建工程,选择对应的stm32f407芯片 设置相关引脚pin MiddleWares: 因为需要使用网络,选中LWIP。 Peripherals: 配置ETH使能,在右侧的引脚配图中相关引脚 配置RCC,使用外部晶振如图所示 配置SYS,配置系统时钟中断,使用ARM内部时钟 配置USART1,模式为异步,不使用硬件流控 在右边设置相关引脚: 时钟设置 LSE:外部低频时钟 HSE:外部高频时钟 LSI:内部低频时钟 HSI:内部高频时钟 由于需要配置168MHz系统时钟,只能使用PLL如图所示,(如果Pinout- RCC没有配置外部晶振,此处无法使用 HSE)
[单片机]
使用<font color='red'>STM32CubeMX</font>创建STM32F407工程
STM32CubeMX芯片包(固件库)使用注意
1. 解压本地固件库包后需要将文件夹放到指定路径,该指定路径为cubemx软件中的help - updater settings - updater settings - repository folder中的路径,本人的路径为C:/Users/WR/STM32Cube/Repository/。之前没有放到指定路径,因此Generate Code时会提示错误信息。 2. 将固件库放入指定路径后,需要在CubeMX软件中选择它,点击工具栏Project - Settings - Project - Firmware Package Name and Version中选择刚刚放置到指定位置的固件库,本人的固件库为STM32Cube
[单片机]
STM32CubeMX 下载和安装 详细教程
STM32CubeMX 下载 步骤1:点击官网链接下载 官网下载地址:https://www.st.com/en/development-tools/stm32cubemx.html 步骤2:点击 Get Software 步骤3:选择 Windows 系统,点击 Get latest 步骤4:点击 ACCEPT 步骤5:填写个人信息 步骤6:在刚刚填写的邮箱中,点击下载链接 步骤7:下载完成 步骤8:解压后,就是安装软件 STM32CubeMX 安装 步骤1:双击安装软件 步骤2:点击Next 步骤3:勾选同意,然后点击Next 步骤4:勾选第一个,然后点击Next 步骤5:选择安
[单片机]
<font color='red'>STM32CubeMX</font> 下载和安装 详细教程
STM32CubeMX图形配置工具
STM32CubeMX是ST意法半导体近几年来大力推荐的STM32芯片图形化配置工具,允许用户使用图形化向导生成C初始化代码。 实际应用中需配合STM32Cube库来使用,如各类HAL库。 STM32CubeMX和STM32Cube库的关系 STM32CubeMX运行需要两个必要条件:java运行环境和STM32CubeMX软件。其中,Java运行环境必须是V1.7及以上(安装过程中如果提示在当前网络连接环境下……,那是因为安装需要网络,解决方案是联网或者下载脱机安装包)。然后是安装STM32CubeMX软件,安装好之后设置STM32cubeFX包的地址,可以专门设置一个文件夹用来存放所有用到的芯片HAL库包。 安装好这些软
[单片机]
<font color='red'>STM32CubeMX</font>图形<font color='red'>配置</font>工具
STM32CubeMX系列教程20:Nand Flash
一、Nand Flash 简介 Flash 中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。功能性分为两种: NOR Flash:允许随机存取存储器上的任何区域,以编码应用为主,其功能多与运算相关 Nand Flash:主要功能是存储资料,适合储存卡之类的大量数据的存储。 本章以K9F1G08U0E芯片为例讲解Nand Flash。 二、Nand Flash存储结构 一个Nand Flash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(spare area),这个区
[单片机]
<font color='red'>STM32CubeMX</font>系列教程20:Nand Flash
STM32CubeMX系列 | 触摸屏
1.触摸屏简介 目前最常用的触摸屏有两种:电阻式触摸屏和电容式触摸屏 1.1 电阻式触摸屏 电阻式的触摸屏结构如下图示,它主要由表面硬涂层、两个ITO层、间隔点以及玻璃底层构成,这些结构层都是透明的,整个触摸屏覆盖在液晶面板上,透过触摸屏可看到液晶面板。表面涂层起到保护作用,玻璃底层起承载的作用,而两个ITO层是触摸屏的关键结构,它们是涂有铟锡金属氧化物的导电层。两个ITO层之间使用间隔点使两层分开,当触摸屏表面受到压力时,表面弯曲使得上层ITO与下层ITO接触,在触点处连通电路。 两个ITO涂层的两端分别引出X-、X+、Y-、Y+四个电极,这是电阻屏最常见的四线结构,通过这些电极,外部电路向这两个涂层可以施加匀强电场或检测电
[单片机]
基于STM32CUBEMX驱动TOF模块VL53l0x(2)----修改设备地址
概述 本章主要介绍如何修改VL53L0X传感器的I2C地址,并成功驱动设备以使用新的地址。VL53L0X是一种多功能、高性能的接近和环境光传感器,常用于测量物体与传感器之间的距离、检测物体的接近程度以及测量环境光强度等应用。 在某些情况下,可能需要在同一I2C总线上使用多个VL53L0X传感器,或与其他I2C设备共享总线资源。由于每个VL53L0X传感器具有默认的固定I2C地址,这可能导致地址冲突,从而阻碍多个传感器的同时使用。为了解决这个问题,可以通过修改传感器的I2C地址来避免冲突,并使其能够在同一总线上与其他设备共存。 修改VL53L0X传感器的I2C地址,通过配置传感器内部寄存器来修改I2C地址。将提供具体的寄存器配置值和
[单片机]
基于<font color='red'>STM32CUBEMX</font>驱动TOF模块VL53l0x(2)----修改设备地址
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved