STM32 SysTick 系统时钟 超简易定时器SysTick

发布者:CuriousMind123最新更新时间:2016-08-21 来源: eefocus关键字:STM32  SysTick  系统时钟  定时器 手机看文章 扫描二维码
随时随地手机看文章
/**

* @brief Configures the SysTick. 系统时钟配置函数   main.c 
* @param None
* @retval None
*/
void SysTick_Configuration(void)
{
/* Setup SysTick Timer for 100 msec interrupts */
if (SysTick_Config((SystemCoreClock) / 10))     //     1/10s=100ms

   /* Capture error */ 
    while (1);
}

   NVIC_SetPriority(SysTick_IRQn, 0x0);
}

/**
* @brief This function handles SysTick Handler. 系统时钟中断函数stm32f10x_it.c
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
/* Generate TIM1 COM event by software */
TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
}

SysTick_Config(SystemFrequency / 10)   函数的形参就是systick重装定时器的值。
systck计数频率为每秒72000000次,所以72000次就是1/10秒,也就是100ms。

SysTick是1个24bit递减计数器,通过对SysTick控制与状态寄存器的设置,可选择HCLK时钟(72M)或HCLK的8分频(9M,缺省是这个)作为SysTick的时钟源。
SysTick的重装寄存器决定了定时器频率。

 

若SysTick的时钟源是72M,   SystemFrequency = 72000000Hz
所以 SysTick_Config(SystemFrequency / 1000); 就是1ms时基。
//     1/1000 s=1ms

关于SysTick校准寄存器的介绍  (大多数情况下,我们可以不必理会它)


    校准值寄存器提供了这样一个解决方案:它使系统即使在不同的CM3产品上运行,也能产生恒定的SysTick中断频率。最简单的作法就是:直接把TENMS的值写入重装载寄存器,这样一来,只要没突破系统极限,就能做到每10ms来一次 SysTick异常。如果需要其它的SysTick异常周期,则可以根据TENMS的值加以比例计算。只不过,在少数情况下,CM3芯片可能无法准确地提供TENMS的值(如,CM3的校准输入信号被拉低),所以为保险起见,最好在使用TENMS前检查器件的参考手册。
   SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

 

 

下面利用 SysTick 产生的 硬件延时函数 延时 dly_ms 毫秒

/*******************************************************************************
* Function Name : SysTickHandler
* Description    :系统时钟,一般调教到1MS中断一次
*******************************************************************************/

void SysTick_Handler(void)
{
if(Timer1)
   Timer1--;
}

 

/********************************************
**函数名:SysTickDelay
**功能:使用系统时钟的硬延迟
**注意事项:一般地,不要在中断中调用本函数,否则会存在重入问题.另外如果屏蔽了全局中断,则不要使用此函数
********************************************/
volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)
{
Timer1=dly_ms;
while(Timer1);
}

关键字:STM32  SysTick  系统时钟  定时器 引用地址:STM32 SysTick 系统时钟 超简易定时器SysTick

上一篇:STM32学习笔记之正交编码器接口
下一篇:STM32 TImer几种模式_通用定时器

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

基于STM32定时器实现毫秒延时函数
STM32定时器包含基本定时器、通用定时器和高级定时器,其中TIM6和TIM7是STM32当中的基本定时器,作为初学者,先从最基本的学起最容易,下面我们用这个定时器实现毫秒延时函数来入门STM32定时器的应用。 学习单片机,就是学习使用它的寄存器。即便你用库函数,寄存器也是必须要学习的。 TIM6 TIM7的寄存器如下所示: 先略览一下寄存器,CR1和CR1是控制寄存器,SR是状态寄存器,ARR就是溢出值寄存器,CNT就是计数器的当前值,PSC是预分频寄存器。预分频寄存器?听的傻眼了吧,前面几个个寄存器听的还能理解,一听到预分频寄存器,好像不知道是干嘛用的。瑞生来给你解释一下吧,你可以给预分频寄存器里面写一个从0~6
[单片机]
基于<font color='red'>STM32</font><font color='red'>定时器</font>实现毫秒延时函数
STM32延时函数的方法
STM32延时函数的方法 1.普通延时法 这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。 2.SysTick 定时器延时 CM3 内核的处理器,内部包含了一个SysTick 定时器,SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD寄存器中自动重装载定时初值。 延时函数delay的编写 原理:3层for循环,循环次数是 NUM = 4X5X248 = 4960次,由每次循环都有条件判断(如 i 》0)和自减语句(如 i--),因此每次循环又耗费两个机器周期 所以,总耗费的机器周期为 SUM = NUM x 2 = 9920个。 整合自:CS
[单片机]
9、STM32的PWM的原理与使用(内附代码)
1、PWM是什么? 是脉冲宽度调制,简称脉宽调制。利用微处理器数字输出对模拟电路进行控制的一种有效的技术,就是对脉冲宽度的控制。 这里说的脉冲,就是我们产生的方波。方波就是N个这样的周期连续的产生。 一个周期内高电平持续的时间就是脉冲宽度(脉宽),而PWM(脉冲宽度调制)就是控制一个周期内的高电平的持续时间。 2、简单的PWM的原理示意图 CNT:是当前值寄存器,计数寄存器。 ARR:是自动重载寄存器(初始化设定)。 CCRx:比较值寄存器(TIM_SetCompare1()设定修改占空比)。 假定定时器工作在向上计数PWM模式下: 当CNT CCRx时,引脚输出0,当CNT =CCRx时,引脚
[单片机]
9、<font color='red'>STM32</font>的PWM的原理与使用(内附代码)
STM32驱动舵机
舵机控制原理: 提供周期为20ms的pwm信号,调节pwm的占空比为0.5ms-2.5ms可使舵机从0-180度线性变化 舵机控制程序: 首先我们要利用stm32定时器产生合适周期的pwm输出信号,这里使用的是PWM高级定时器1的CH1(即PA8),可以通过配置输入参数arr和psc产生合适的频率的pwm脉冲信号。 //高级定时器1pwm输出初始化 //arr:自动重装值(周期) psc:时钟预分频数 void tim1_pwmInit(uint16_t arr, uint16_t psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeD
[单片机]
详解STM32 ISP设置及使用说明
1. STM32的BOOT概述 STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 用户闪存: BOOT1=x BOOT0=0 芯片内置的Flash,即主存储器Flash SRAM: BOOT1=1 BOOT0=1 芯片内置的SRAM 区,就是内存啦。 系统存储器:BOOT1=0 BOOT0=1 芯片内部一块特定的区域,叫做系统存储器。芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM 区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区
[单片机]
STM32之HAL库和标准库的GPIO
HAL库 使用CubeMX自动生成需要的代码。 一、初始化GPIO 自动生成的HAL库GPIO初始化代码: void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO
[单片机]
基于ZigBee和STM32的智能家居控制系统的设计与实现(五)--终结
##基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇 ###说明 首先祝贺自己顺利的完成了毕业答辩工作,想起整个过程还是挺让自己感动的。最后还被评为优秀毕业设计,虽然并没有什么luan用,但是,马上毕业了,还是挺让人怀念的。整个资料从第一篇博客说起就说会全部开源的,期间承蒙各位朋友的支持,给与资助,在此感谢了。虽然资料中私人信息删除了一些,但是不免有疏漏,所以有关个人信息还挺各位删除掉,小弟在此谢谢了! ###总结 下面简单介绍下系统使用到的一些资料和系统实现的功能。 开发系统:Windows10 64位 Ubuntu 14.04 32 位 软件版本:Qt 4.8.6 IAR .0 Altium Des
[单片机]
基于ZigBee和<font color='red'>STM32</font>的智能家居控制<font color='red'>系统</font>的设计与实现(五)--终结
RC522读写程序代码分享
#include stm32f10x.h #include stm32f10x_spi.h #include stm32f10x_gpio.h #include stm32f10x_rcc.h #include delay.h #include mfrc522.h #include stdio.h #define SPI_CE_LOW() GPIO_ResetBits(GPIOA,GPIO_Pin_4) #define SPI_CE_HIGH() GPIO_SetBits(GPIOA,GPIO_Pin_4) void SPI1_Init(void) { RCC_AP
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

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

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


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

502 Bad Gateway


openresty