STM32学习006_Systick使用(一)

发布者:快乐的成长最新更新时间:2017-10-26 来源: eefocus关键字:STM32  SysTick 手机看文章 扫描二维码
随时随地手机看文章

Systick是STM32中特有的系统时钟

Systick有两个功能:

1.可以产生精确延时;

2.可以提供给系统一个单独的时钟节拍。

一般延时程序:

DELAY(N)

{     for( i=0  ; i<=x ; i++ )  ;

}

对于STM32系列的微处理器中,执行一条指令只需要几十ns,进行for循环时,要实现N毫秒延时,那么x的意义非常大,而且由于系统频率的宽广,很难计算出延时N毫秒的精确值,那么在一些高速电路中,是不允许的,容易出现问题,很难查找出来。尤其在液晶驱动中,延时要求非常精确。针对STM32的处理器中,需要重新设计一个方法实现该功能,来代替DELAY(N)延时;

cortex-m3中包含了一个Systick时钟,Systick是一个24位的递减计数器,设定初值并使能后,每经过1个系统时钟周期,该计数器减1,计数到零时,systick自动重装初值,并继续计数,同时内部的COUNTFLAG标志位会置1,触发中断(中断如果使能);

外部晶振是8MHz,9倍频,系统时钟为72MHz,systick的最大值为9MHz(最大值为HCLK/8),在这个条件下,如果将计数器的效验值设置为9000,将systick设置为9MHz,能够产生1ms的时基值,即systick产生1ms的中断,

systick时钟共包含4个寄存器:

1.CTRL    COUNTFLAG     CLKSOURCE    TICOUNT    ENABLE

2.LOAD

3.VAL   

4.CALIB

利用ST库函数设置Systick的方法

1.调用SysTick_CountCmd()       失能SysTick计数器

2.调用SysTick_ITConfig()       失能SysTick中断

3.调用SysTick_CLKSourceConfig()      配置SysTick的时钟源

4.调用SysTick_SetReload()             设置SysTick 的效验值

5.调用SysTick_ITConfig()               使能SysTick中断

6.调用SysTick_CountCmd()             使能SysTick计数器

void SysTick_Config()    //配置好,并将计数器使能

{

        SysTick_CountCmd(SysTick_CountCmd_DISABLE);

        SysTick_ITConfig(DISABLE);      

        SysTick_CLKSourceConfig( SysTick_CLKSourceConfig_EXTERN) ;     

        SysTick_SetReload(SysTick_SetReload_9000);   

        SysTick_ITConfig(ENABLE) ;             

        SysTick_CountCmd(SysTick_CountCmd_ENABLE);

}

延时函数:

void Delay_MS(u16 diy)

{

Delay=diy;

while(Delay);

}

extern vu16 Delay;

void SysTickHandle()         /systick中断服务程序/

{

Delay--;

}

如果延时较长,那么该延时程序一定程度上还是在耗CPU的资源。


关键字:STM32  SysTick 引用地址:STM32学习006_Systick使用(一)

上一篇:关于STM32GPIO的详细解析
下一篇:STM32学习007_Systick使用(二)

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

STM32里的基础配置(寄存器,库函数)
前言 所有IO口配置,芯片:STM32F103R8T6 一、配置LED /**************************** 函数名称:LED_Config 函数作用:LED初始化 管脚: LED1 PB0 LED2 PB1 ****************************/ LED.c 寄存器: #include led.h void LED_Config(void) { RCC- APB2ENR |= (1 3);//GPIOB GPIOB- CRL &= ~(0XF 0);//清零操作 GPIOB- CRL |= (0X3 0); GPIOB- CRL &=
[单片机]
<font color='red'>STM32</font>里的基础配置(寄存器,库函数)
stm32编程配置一个I/O为EXTI中断的步骤
配置一个I/O为EXTI中断的步骤: GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //1.使能EXTIx线的时钟和第二功能AFIO时钟 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,ENABLE); // NVIC_CONFIG(); //2.配置EXTIx线的中断优先级 NVIC_Priority
[单片机]
stm32中关于读取状态标志位函数的自我理解
为了让程序能够读取多个状态标志位的状态。固件设计了一个通用的函数RCC_GetStatus(),来读取各标志位的状态。 下面是RCC的所有标志位: * - RCC_FLAG_HSIRDY: HSI oscillator clock ready * - RCC_FLAG_HSERDY: HSE oscillator clock ready * - RCC_FLAG_PLLRDY: PLL clock ready * - RCC_FLAG_LSERDY: LSE oscillator clock ready *
[单片机]
STM32 关于GPIO的问题集锦
1、关于GPIO 问:STM32的IO口初始化为输入浮空,那管脚是高电平还是低电平呢? 答:既不是高电平也不是低电平,悬空的意思是没有使用的状态。 2、有关stm32f103端口复用的问题? 问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子: PB6PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 当我要使用I2C1的重定义时,我要打开, RCC_APB1PeriphClockCm
[单片机]
STM32之内部FLASH原理
不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。大容量产品的 Flash 模块组织结构如图 40.1.1 所示: STM32F1 的闪存(Flash)模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。下面我们就来介绍下这些组成部分: ①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从
[单片机]
<font color='red'>STM32</font>之内部FLASH原理
单片机STM32时钟详解
众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实他只有四个,因为从上图中可以看到PLL都是由HSI或HSE提供的。 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号. 高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用
[单片机]
单片机<font color='red'>STM32</font>时钟详解
ARM开发(10)基于STM32的通用定时器中断控制蜂鸣器响
一 通用定时器原理: 1.1 本实验实现通用定时器中断控制蜂鸣器1s鸣叫一次。 1.2 实验思路:理解中断控制寄存器,DMA/中断使能寄存器,预分频寄存器,初始化定时器参数,中断优先级设置,编写中断服务函数,中断服务函数里面我们实现蜂鸣器1s鸣叫一次 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 timer.h代码: #ifndef __TIMER_H #define __TIMER_H #include sys.h void TIM3_Int_Init(u16 arr,u16 psc); #endif 1 2 3 4 5 2.2 timer.c代码(通用定时器参
[单片机]
认识STM32的复位与电源管理
复位功能是一个非常重要的功能,大到PC,小到单片机,每一台计算机系统都有。在我小时候,去网吧的时候,但凡是电脑出现任何一点小问题,网管的第一回答一定是重启。重启和复位就是同一个意思。 发展到现在PC已经很稳定了,复位按钮慢慢的淡出我们的视野,但是在主板上我们依然可以找到复位电路的存在。单片机上的复位功能也有着类似的变化,在我们学单片机那个年代,需要在单片机的外部一个复位电路,从专用引脚上接一个电阻和电容组成的复位电路。如果没有这个电路,单片机就没法工作。现在的新款单片机都把复位功能内置到单片机中。如果是开发项目要手动复位,我们可以在复位引脚上接一个按键用来手动复位。 复位 复位功能的作用是让RAM 中的数据清空,让所有连接
[单片机]
认识<font color='red'>STM32</font>的复位与电源管理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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