STM32F407学习记录2:SysTick嘀嗒定时器学习

发布者:TechGuru123最新更新时间:2018-07-17 来源: eefocus关键字:STM32F407  :SysTick  嘀嗒定时器 手机看文章 扫描二维码
随时随地手机看文章

Systick嘀嗒定时器是一个24位的递减计数器。该定时器的时钟源可以是内部时钟,也可以是外部时钟。 M4的Systick有四个寄存器,分别是

1. Systick control and  status register(STK_CTRL) 控制和状态寄存器;

2. Systick reload value register(STK_LOAD) 重装数值寄存器;

3. Systick current value register(STK_VAL) 当前计数值寄存器;

4. Systick calibration value register(STK_CALIB) 校准数值寄存器。

STM32F4中Systick相关函数主要在misc.c和core.cm4.h中。在misc.c中 void Systic_CLKSourceConfig(uint32_t SysTick_CLKSource) 主要实现时钟源的选择。

/**
  * @brief  Configures the SysTick clock source.
  * @param  SysTick_CLKSource: specifies the SysTick clock source.
  *   This parameter can be one of the following values:
  *     @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
  *     @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
  * @retval None
  */
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}

在core_cm4.h中函数SysTick_Config(uint32_t ticks)实现了嘀嗒定时器的配置。

/* ##################################    SysTick function  ############################################ */
/** \ingroup  CMSIS_Core_FunctionInterface
    \defgroup CMSIS_Core_SysTickFunctions SysTick Functions
    \brief      Functions that configure the System.
  @{
 */


#if (__Vendor_SysTickConfig == 0)


/** \brief  System Tick Configuration


    The function initializes the System Timer and its interrupt, and starts the System Tick Timer.
    Counter is in free running mode to generate periodic interrupts.


    \param [in]  ticks  Number of ticks between two interrupts.


    \return          0  Function succeeded.
    \return          1  Function failed.


    \note     When the variable __Vendor_SysTickConfig is set to 1, then the
    function SysTick_Config is not included. In this case, the file device.h
    must contain a vendor-specific implementation of this function.


 */
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */


  SysTick->LOAD  = ticks - 1;                                  /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                  /* Function successful */
}


#endif


/*@} end of CMSIS_Core_SysTickFunctions */


嘀嗒定时器使用方法:

1. 函数SysTick_Config()是属于CMSIS里面的一个函数,实现配置如下
  - 函数的参数是重载寄存器reload要赋予的初值
  - 配置嘀嗒定时器的优先级是最低优先级15
  - 配置HCLK作为系统的时钟源
  - 使能嘀嗒定时器中断
  - 启动嘀嗒定时器计数

2. 用户可以在调用函数SysTick_Config()后通过函数 SysTick_CLKSourceConfig()
  更改嘀嗒定时器的时钟源为HCLK/8。SysTick_CLKSourceConfig()在文件misc.c里面

3. 用户可以在调用函数SysTick_Config()后通过函数 NVIC_SetPriority()修改优先级,
  函数NVIC_SetPriority()在文件core_cm4.h文件里面

4. 通过下面的公式调整时基
  Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)
  Reload Value 是函数SysTick_Config()的参数,但是不能超过0xFFFFFF


关键字:STM32F407  :SysTick  嘀嗒定时器 引用地址:STM32F407学习记录2:SysTick嘀嗒定时器学习

上一篇:使用STM32的systick定时器中断实现RTC工作过程出错
下一篇:STM32F030 Nucleo-做个准确的延时SysTick

推荐阅读最新更新时间:2024-03-16 16:09

Stm32f407 key外部中断
硬件平台: stm32f407ve 软件平台: win10 (OS Name: Microsoft Windows 10 Enterprise OS Version: 10.0.18363 N/A Build 18363) Keil5 5.26.2 HAL库版本: 2.14.0(目前下载的最新的) 中断这个部分需要参考中文手册和权威指南。 这里我还是提一下NVIC这个东西,全称是Nested vectored interrupt controller,即嵌套向量中断控制器。这个器件是用来管理stm32所有中断的(在现实
[单片机]
<font color='red'>Stm32f407</font> key外部中断
STM32F407 独立看门狗 (IWDG)
概述 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。 看门狗(守护)就是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号的电路。看门狗命令在程序的中断中拥有最高的优先级。 单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间
[单片机]
MSP432滴答定时器SysTick)说明和配置
MSP432是 TI 的一款基于 arm cortex-M4 内核的 32 位低功耗处理器。低功耗表现十分优越。但是由于上市的时间较短,网上能查找到的相关资料是极其稀少的。所以作者想在此分享一些MSP432的相关学习经验。 首先要学习使用MSP432必需要有一份很重要的官方文档: 所有关于 432 这款芯片的技术问题都可以从中找到解决方法,当然前提是能看懂,目前还没有发现有中文版的。 好了,接下来就直奔这篇文章的主题滴答定时器了。 MSP432的滴答定时器实质就是一个 24 位的自减计数器,在参考文档 2.2.1(P70)可以找到相关说明。 Cortex-M4 includes an integrated sy
[单片机]
STM32F407--芯片解读
注:博主使用的是STM32F4探索者 一、参考资料 1、STM32F4数据手册:STM32F407ZGT6.pdf 2、STM32F4中文手册:STM32F4xx中文参考手册.pdf 3、开发板原理图:Explorer STM32F4_Vxx_SCH.pdf 二、芯片内部资源 1、芯片实物图片 2、芯片对应的参数表 3、内核 (1)32位 高性能ARM Cortex-M4处理器 (2)时钟: 高达168MHz,实际还可以超频一点点 (3)支持FPU(浮点运算)和DSP指令 4、IO口 (1)STM32F407ZGT6:144引脚 114个IO口 (2)大部分IO口都耐
[单片机]
STM32F407--芯片解读
STM32F407.FLASH 读写经验
现象: 如下代码: //从指定地址开始写入指定长度的数据 //该函数对OTP区域也有效!可以用来写OTP区! //OTP区域地址范围:0X1FFF7800~0X1FFF7A0F //WriteAddr:起始地址(此地址必须为4的倍数!!) //pBuffer:数据指针 //NumToWrite:字(32位)数(就是要写入的32位数据的个数.) void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite) { u8 status=0; u32 addrx=0; u32 endaddr=0; if(WriteAddr
[单片机]
STM32F407.FLASH 读写经验
STM32的SYSTICK_Init()配置
void SYSTICK_Init(void) { /* SysTick end of count event each 1ms with input clock equal to 4.5MHz (HCLK/8, default) SysTick_SetReload(4500); /* Enable SysTick interrupt SysTick_ITConfig(ENABLE); /* Enable the SysTick Counter SysTick_CounterCmd(SysTick_Counter_Enable); } 系统时钟定时器的周期与驱动的时钟频率和Reload值相关。
[单片机]
STM32F407玩控制—模式设别法PID参数自动整定
模式设别法PID参数自动整定,是指在闭环系统阶跃响应下(也可以是扰动响应下),设别出衰减比和振荡周期,这是主要两个量,另外也需要判断欠阻尼和发散振荡的情况,然后据此调整PID参数,理想目标是以4比1幅值衰减,这些量的辨识应该说并不难,但由于干扰的存在,问题就变得很复杂,识别有关状态后,就进行PID值得修改,这里修改就存在一个过犹不及的尴尬,pid参数调整幅度小了,就要增加次数,调整幅度过猛了,又要反过来再调,对这个系统是合适的调整,对另外一个未必是合适的调整,也不存在折中的办法,我们做的模式设别法PID参数自动整定效果如图1-图6所示,图1中系统响应曲线是振荡的,调整PID参数后,系统不再振荡,但调整过程时间太长,再一次调整PID
[单片机]
用<font color='red'>STM32F407</font>玩控制—模式设别法PID参数自动整定
关于STM32的systick定时器的详细说明
我不得不说意法半导体确实有点风骚!甚至有点变态。我对ST文档STM32F10XXX参考手册的编辑水平真是不敢恭维。手册中好多说明都是含糊不清,甚至将好多对初学者来说很重要的地方都一笔带过,让人着实摸不着头脑。比如前面我说过的关于NVIC嵌套向量中断控制器的介绍,这部分我认为是非常重要的,但当你看完他这部分介绍,你根本不会设置中断服务程序,他有哪些寄存器都不知道,更别说去设置了,NVIC的详细介绍是在Cotex-M3中有详细的介绍,不多说。今天我们说的是systick定时器。 systick定时器和我上面说的情况一样,在手册中根本没有介绍。我费了九牛二虎之力才在一个犄角格拉里找到systick定时器的英文版的说明。在Cotex-
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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