STM32-(SysTick定时器,EXTI外部中断/事件控制器)

发布者:清新生活最新更新时间:2021-12-13 来源: eefocus关键字:STM32  SysTick定时器  EXTI  外部中断  事件控制器 手机看文章 扫描二维码
随时随地手机看文章

Systick系统定时器

介绍:systick定时器上属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24位向下计数的计数器,计数器每一次计数的时间是1/SYSTICK,一般我们设置SYSTICK为72M。当重载数值寄存器的值递减到0时,系统定时器产生一次中断,以此循环。


使用范围:1.一般用于操作系统,用于产生时基,维持操作系统的心跳。


使用的寄存器:CTRL,LOAD,VAL,CALIB;


例程1:利用systick产生1s的时基。


步骤:

1.设置重载寄存器的值

2.清除当前数值寄存器的值

3.配置控制于状态寄存器

systick配置库函数:


_STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

//不可能的重装载值,超出范围

if((ticks - 1UL)>SysTick_LOAD_RELOAD_Msk){

return (1UL);

}

//设置重装载寄存器

SysTick->LOAD = (uint32_t)(tiicks - 1UL);

//设置中断优先级

NVIC_SetPriority(SysTick_IRQn,(1UL< //设置当前数值寄存器

SysTick->VAL = OUL;

//设置系统定时时钟源为AHBCLK=72M

//使能系统定时器中断

//使能定时器

SysTick->CTRL = SysTIck_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;

return (OUL);

}


用固件库编程的时候我们只需要调用库函数SysTick_Config()即可,形参ticks用来设置重装载寄存器的值,最大不能超过重装载寄存器的值2^24,当重载寄存器的值递减到0的时候产生中断,然后重载寄存器的值又重新装载往下计数,以此循环。


设置中断优先级:


void NVIC_SetPriority(IRQn_Type IRQn,uin32_t priority)

{

if((int32_t) IRQ<0){

SCB->SHP[(((uint32_t)(int32_t))IRQn)&0XFUL)-4UL] = (uint8_t)((priority<<(8-_NVIC_PRIO_BITS)) &(uint32_t)0xffUL);

}

}


使用:NVIC_SetPriority(Systick_IRQn,(1UL<<_NVIC_PRIO_BITS)-1UL);


配置系统定时器的时钟(AHBCLK)为72M:

SysTick初始化函数:


void SysTick__Init(void)

{

/*systickFrequency / 1000    1ms中断一次*/

/*systickFrequency / 100000   10us中断一次*/

/*systickFrequency / 1000000   1us中断一次*/

if(SysTick_Config(SystemCoreClock / 100000)){

while(1);

}

}


这个函数决定了多长时间产生一次中断。

使能定时器和定时器中断:

在这里插入图片描述
在这里插入图片描述

函数Delay_us()中我们等待TimingDelay为0,当它为零时表示延时时间到了。所以systick每进一次中断即10us时间


SysTick中断服务函数:


void TimingDelay_Decrement(void)

{

if(TimingDelay !=0x00)

{

TimingDelay--;

}

}

void SysTick_Handler(void)

{

TimingDelay_Decrement();

}


TimingDelay的值等于延时函数中传进去的nTime的值,比如nTime=100000,则延时时间等于100000*10us = 1s。


EXTI外部中断/事件控制器

EXTI(external interrupt/event controller) 一外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。


EXTI的功能框图:

在这里插入图片描述

EXTI可以分为两部分功能,一个产生中断,一个产生事件,这两个功能在硬件上就有所不同。

**中断与事件的区别:产生中断的线路的目的上把输入信号输入到NVIC,进一步会运行中断服务函数,实现功能,这样是软件级别的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级别的。


红色线路上EXTI产生中断的线路,绿色线路上EXTI产生事件的线路。

在这里插入图片描述

EXTI初始化结构体详解

typedef struct{

uint32_t EXTI_Line; //中断/事件线

EXTIMode_TypeDef  EXTI_Mode;//EXTI模式

EXTITrigger_TypeDef EXTI_Trigger;//触发类型

FunctionalState EXTI_LineCmd;//EXTI使能

}EXTI_InitTypeDef;


1.EXTI_Line:EXTI中断/事件选择,参考上表。

2.EXTI_MODE:EXTI模式选择,可以选择是产生中断还是事件。

3.EXTI_Trigger:EXTI边沿触发事件,可以选择上升沿触发还是下降沿触发或者是边沿触发。

4.EXTI_LineCmd:控制是否使能EXTI线,可选使能EXTI线(ENABLE)或禁用(DISABLE).

关键字:STM32  SysTick定时器  EXTI  外部中断  事件控制器 引用地址:STM32-(SysTick定时器,EXTI外部中断/事件控制器)

上一篇:【开篇】&【STM32】点亮LED
下一篇:STM32-(ADC,DMA,重映射)

推荐阅读最新更新时间:2024-11-18 13:13

STM32学习笔记(3):系统时钟和SysTick定时器
1. STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL (1) HSI是高速内部时钟,RC振荡器,频率为8MHz; (2) HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz 16MHz; (3) LSI是低速内部时钟,RC振荡器,频率为40KHz; (4) LSE是低速外部时钟,接频率为32.768KHz的石英晶体; (5) PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL的输入可以接HSI/2、HSE或者HSE/2。倍频可选择为2 16倍,但是其输出频率最大不得超过72MHz。 其中
[单片机]
STM32之_keil编译内存大小解析
Program Size: Code=28784 RO-data=6480 RW-data=60 ZI-data=3900 的含义 1. Code: 程序所占用的FLASH大小,存储在FLASH. 2. RO-data: Read-only-data,程序定义的常量,存储在FLASH中。 3. RW-data:Read-write-data,已经被初始化的变量,存储在SRAM中。 4. ZI-data:Zero-Init-data,未被初始化的变量,存储在SRAM中。 简单的说就是在烧写的时候是FLASH中的被占用的空间为: ROM(Flash) size = Code+RO-data+RW-data; 上面代码大小
[单片机]
<font color='red'>STM32</font>之_keil编译内存大小解析
stm32之GPIO配置及库函数学习笔记——以流水灯为例
1.GPIO全称:gpio general-purpose input/output 通用输入/输出端口 2.GPIO寄存器中文名称与英文缩写对照表 3.GPIO_InitTypeDef结构体定义 typedef struct { uint16_t GPIO_Pin;//选择待设置的GPIO引脚 GPIOSpeed_TypeDef GPIO_Speed;//设置选中管脚的速率 GPIOMode_TypeDef GPIO_Mode;//设置选中管脚的工作状态(模式) }GPIO_InitTypeDef; 4.GPIO_Mode:端口的每个位可以分别配置成多种模式,中文名称与英文缩写对照表如下:
[单片机]
<font color='red'>stm32</font>之GPIO配置及库函数学习笔记——以流水灯为例
stm32 Usart 初始化
库文件中给出了初始化stm32 USART 的范例 /** * @brief Fills each USART_InitStruct member with its default value. * @param USART_InitStruct: pointer to a USART_InitTypeDef structure * which will be initialized. * @retval None */ void USART_StructInit(USART_InitTypeDef* USART_InitStruct) { /* USART_InitStruct members
[单片机]
STM32串口发送数据第一个字节丢失问题
STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。 故障排除过程: 1、刚开始怀疑是接收端的错误,我是使用电脑串口,运行串口辅助调试工具接收,换成其他软件后,发现故障依旧,而且电脑软件一直是开启状态,不像和电脑软件有关。 2、使用单步调试,单步运行各个发送指令,都正常。能收到0x01
[单片机]
J-Flash下载STM32用J-link的设置方法
J-link几乎可以调试所有的arm芯片,不得不说是个好东东。这里记录三种stm32的下载程序方式: 1.J-Flash下载(需要用到J-link) 2.MDK配置下载(需要用到J-link) 3.ISP下载(串口下载,需要用到官配串口下载软件,用过stc51的对这个都不会陌生吧) ---------------------------------------------------------------------------------------------- 1.J-Flash下载(需要用到J-link)先安装J-link驱动,可以到 http://www.segger.com/cms/jlink.html 下载最新驱动
[单片机]
J-Flash下载<font color='red'>STM32</font>用J-link的设置方法
STM32学习之:定时器中断
定时器中断   STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器。在本章中,我们将利用 TIM3 的定时器中断来控制 DS1 的翻转,在主函数用 DS0 的翻转来提示程序正在运行。选择难度适中的通用定时器来介绍。 1、 STM32 通用定时器简介   STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。STM32 的每个通用定时器都是完全独立的,
[单片机]
采用STM32的远程温控系统设计
   温度控制是工业控制的主要对象之一,常用的温控数学模型是一阶惯性加上纯滞后环节,但其随着加热对象和环境条件的不同,会存在着较大的差异。因为温控对象这种较为普遍的含有纯滞后环节的特点,容易引起系统超调和持续的振荡,温度控制对象的参数会发生幅度较大的变化。因此无法采用传统的控制方法(如常规的PID控制)对温度进行有效的控制,而智能控制不需要对象的精确数学模型就可以对系统实施控制 。温度控制多采用由单片机系统来实现温度控制,其缺点是远程控制系统复杂,可靠性差,特别是当控制点较多、距离较远时,采取总线方式的通讯出错概率较高,影响到温度的控制精度 。   目前,多家厂商(如日本导电、岛通)均推出精度可达0.1级的基于PID算法的智
[单片机]
采用<font color='red'>STM32</font>的远程温控系统设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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