一、STM32的SysTick简介
SysTick是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。
systick的作用:
在单任务引用程序中,因为其架构就决定了它执行任务的串行性,这就引出一个问题:当某个任务出现问题时,就会牵连到后续的任务,进而导致整个系统崩溃。要解决这个问题,可以使用实时操作系统(RTOS).
因为RTOS以并行的架构处理任务,单一任务的崩溃并不会牵连到整个系统。这样用户出于可靠性的考虑可能就会基于RTOS来设计自己的应用程序。这样SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供一个有节奏的“心跳”。
微控制器的定时器资源一般比较丰富,比如STM32存在8个定时器,为啥还要再提供一个SYSTICK?原因就是所有基于ARM Cortex_M3内核的控制器都带有SysTick定时器,这样就方便了程序在不同的器件之间的移植。而使用RTOS的第一项工作往往就是将其移植到开发人员的硬件平台上,由于SYSTICK的存在无疑降低了移植的难度。
SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。
systick的时钟选择:
二、SYSTICK的寄存器
关键字:STM32 SysTick原理
引用地址:
STM32之SysTick原理
推荐阅读最新更新时间:2024-03-16 16:25
用STM32去读取CCS811气体传感器的数据
## 1 准备工作 1) 硬件设备:CCS811模块、六合一、USB-TTL、杜邦线、STM32F103C8T6单片机。给大家看下图片。 CCS811 STM32F103C8T6 2)软件准备 : KEIL 5 (5.17版本的) 3)示例代码: 游客,本帖隐藏的内容需要积分高于 1 才可浏览,您当前积分为 0 ## 2 接线方式 1、使用数据线将STM32F103C8T6与电脑连接通信 2、SHT30与STM32F103C8T6使用杜邦线连接。具体接线如下图所示: 具体接线方式如下: STM32F103C8T6---------------SHT30 VCC -------------------------V
[单片机]
STM32-DAC生成1Hz三角波【DAC触发方式深入理解】
前文《STM32-一文搞懂DAC》的1.2节对触发方式进行了详细的说明,也简单介绍了三角波的生成原理。本文记如何配置一定频率的三角波以及为什么这么配置。 1 概述 三角波的数据生成是由一个单独的计数器往复加减生成的,每次触发之后该计数器会加1/减1。在每个周期过峰值之前,每次触发条件之后加1;过峰值之后,每次触发条件之后减1。但是要先想生成三角波必须以固定的周期加减其输出幅度!也就是以固定的周期触发转换!怎么办呢?谁可以让它以固定的周期?哈哈蛤,定时器!通过设定三角波计数器最大值、定时器触发周期,就可以确定生成的三角波的频率。 前文回顾: DACx模块内部有一个三角波计数器,每次触发事件之后3个APB1时钟周期后累加1
[单片机]
STM32的GPIO寄存器概述
一 GPIO寄存器整体上分为三类:a.控制寄存器;b.数据寄存器;c.锁存寄存器 A.控制寄存器(GPIO_CRL或者GPIO_CRH(CRL对应低8,CRH对应高8位))。具体如下见手册106页 CNFx MODE XX00-----输入模式(一般不谈速率) XX01-----输出模式(10M速率) XX10----输出模式(2M速率) XX11----输出模式(50M速率) 在输出模式下(50M为例) 0011----通用推挽输出 0111----通用开漏输出 1011----复用推挽输出 1111----复用开漏输出 在输入模式下 0000---模拟输入(ADC用) 0100---浮空输入 1000---上拉/下拉输入(当
[单片机]
STM32 中断详解
中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。 1 EXTI控制器 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件
[单片机]
STM32学习—定时器中断TIME
定时器中断TIME 通用定时器配置步骤(TIME2-TIME5) (1)使能定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟 (2)初始化定时器参数,包含自动重装值,分频系数,计数方式等 voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); typedef struct { uint16_t TIM_Prescaler; //定时器预分频器 1-65535 uint16_t TIM_CounterMo
[单片机]
STM32的串口发送数据(字符,字符串,数字.......)
#include stm32f10x.h #include stdio.h //下面strlen函数需要此头文件 #include USART.h /********************************************************** ** 函数名:u32tostr ** 功能描述: 将一个32位的变量dat转为字符串,比如把1234转为 1234 ** 输入参数: dat:带转的long型的变量 str:指向字符数组的指针,转换后的字节串放在其中 ** 输出参数: 无 ***************************************************
[单片机]
通过BUG来理解STM32的HSE时钟
前言:最近在搞GPRS的时候,遇到了这么一个问题,所使用的单片机为STM32F103RBT6,刚开始先写了个串口打印的程序,波特率设置为19200,可是在上位机上输出的信息总是乱码,检查了好几遍的代码,硬件等等就是没找到问题。于是就在上位机上对波特率从115200往下一个一个的试,终于,当波特率设置为38400的时候,打印信息正确,额滴歌神啊,这是什么情况呢,我在程序中明明设置的波特率为19200,为什么上位机上波特率为19200的时候不对,而为38400的时候输出正确呢?于是,又回过头来检查电路原理图和代码,Oh,My god,原来问题在这里,因此这篇博客将以我遇到的问题为起点,对STM32的HSE时钟做一个总结。 一、
[单片机]
怎么使用C语言控制硬件
C语言的应用编程在单片机的领域占了很大一部分,使用的比较多的51单片机和STM32单片机都可以使用MDK软件编写固件。 单片机烧写了固件后可以点亮LED灯,可以驱动ADC检测电压,也可以驱动蜂鸣器发声,这就是简单地控制硬件。稍微复杂一点的,可以驱动NRF2401进行无线的连接,也可以使用ESP8266这类wifi芯片连接网络。 接下来,简单地讲讲如何使用C语言控制硬件。 1、电路连接 简单的模块可以直接使用高低电平来控制,比如红外线发射模块,当你在驱动引脚上的电压达到3.3v,就能发出红外线;然后将电平设置为0v,红外线发射就停止了。 一般而言,单片机的引脚输出电压能够达到3.3v,也是可以点亮红外线LED,但是可能会导致
[单片机]