前言
今天讲解“STM32F103 SysTick系统滴答”,“SysTick系统滴答”是属于Cortex-M3内核的一部分,主要是为运行的操作系统提供滴答时钟,如常见的操作系统:uCOS、RTOS等。不管M3芯片属于哪一家公司,它都标配有SysTick这一部分。因此,它属于芯片内核的一部分,主要是为了方便操作系统的移植。
其实,SysTick能实现的功能,都可以由TIM来实现。SysTick无非就是定时中断的功能,它完全可以由TIM定时器来完成。之所以SysTick独立出来就是因为它属于内核一部分,方便用户移植,而且简单方便。学过uCOS的人都知道,以前在51,或者430上面是由定时器完成的时钟滴答,到后面ARM公司就用到了一个好的办法,就是在内核中标配一个SysTick,这样下来移植系统不用那么麻烦了。
SysTick除了在操作系统中起到作用,其实在裸机程序中也起到很大作用,比如:定期处理一段程序、超时定时、串口接收超时等,今天就以“定期处理一段程序”为例来说一下。
说到操作系统,后期我也会花一定时间讲解一下uCOS操作系统,感兴趣的朋友可以关注一下。
本文特点:1.提供讲解的软件工程; 2.重点代码截图,配讲解。
https://yunpan.cn/cSVIp4UeSpA9B 访问密码 f486
STM32F10x的资料可以在我360云盘下载:
https://yunpan.cn/crBUdUGdYKam2 访问密码 ca90
内容讲解
工程概要说明: 系统上电初始化完成,配置SysTick,1秒滴答(中断)10次,执行的一段程序就是“变化LED”,运行该程序就可以看到定义的LED不在1秒钟闪烁10次。
关于“STM32F103 SysTick系统滴答” 我把重要的几点在下面分别讲述:
一、配置并初始化SysTick
该函数位于main.c文件下面;
上图中红色箭头处10代表的意思就是:一秒钟滴答(中断)10次,可自行修改这个值。用于系统,我们一般在100 --- 1000之间,也就是要滴答100 --- 1000次。
获取系统时钟,正常情况下,我们这里的RCC_ClocksStructure.SYSCLK_Frequency应该和SystemCoreClock一样,最好像上面程序中直接获取系统时钟,原因很简单,有可能SystemCoreClock与实际的不一样。
二、SysTick_Config函数详情
该函数位于core_cm3.c文件下面;
这个函数是芯片标志的函数接口,我大概讲解一下吧,设置重载值,设置中断优先级,配置并初始化SysTick。
三、SysTick中断
该函数位于stm32f10x_it.c文件下面;
处理的程序就变化LED,也就是注释的语句。
四、SysTick寄存器
有4个寄存器控制SysTick定时器,在STM32参考手册中没有提到,位于“Cortex-M3权威指南Cn”中,在我提供的“STM32F10x的资料”中下载。
说明
今天提供的软件工程基于STM32F103大容量芯片,其实只要适当修改工程的部分配置,STM32F1的芯片都适用。
关键字:STM32F1 SysTick 系统滴答
引用地址:
STM32F1_SysTick系统滴答
推荐阅读最新更新时间:2024-11-12 21:02
STM32的SYSTICK详解
什么是SYSTICK: 这是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。 作用: 在单任务引用程序中,因为其架构就决定了它执行任务的串行性,这就引出一个问题:当某个任务出现问题时,就会牵连到后续的任务,进而导致整个系统崩溃。要解决这个问题,可以使用实时操作系统(RTOS). 因为RTOS以并行的架构处理任务,单一任务的崩溃并不会牵连到整个系统。这样用户出于可靠性的考虑可能就会基于RTOS来设计自己的应用程序。这样SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供一个有
[单片机]
stm32学习笔记之用systick写delay
一、系统滴答SysTick定时器 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。大多数操作系统需要一个硬件定时器来产生滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务霸占系统;或者吧每个定时器周期的某个时间范围赐予特定的任务等,还有提供各种定时功能,都与滴答定时器有关。因此,需要一个定时器产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统的“心跳”的节奏。该定时器的时钟源可以是内部时钟(FCLK),或者是外部时钟(CM3处理器上的STCLK信号)。SysTick定时器能产生中断,异常中断。(内容摘自《Cortex-M3权威
[单片机]
STM32 SysTick 精确延时(非中断方式)
SysTick是Cortex-M内核自带的一个24位定时器,所以我们可以在core_cm3.h或core_cm4.h头文件中看到它的寄存器定义和配置函数SysTick_Config()。SysTick的功能非常简单,仅仅提供一个时基功能,支持中断请求,因此它的寄存器寥寥无几。 以下是手册上对SysTick寄存器的介绍: CTRL为控制寄存器: ENABLE:使能位 TICKINT: 中断的开关,当计数溢出且TICKINT=1时SysTick将发出中断申请。 CLKSOURCE:时钟选择位,CLKSOURCE=1时选择系统时钟,如果是M3则为72MHz,M4则为168MHz。否侧选择外部时钟作为时钟源。 COUNTFLAG: 溢
[单片机]
LPC1768菜鸟学习之路systick
LPC1768在代码里用到使用systick时,是以如下形式出现 if (SysTick_Config(SystemCoreClock /1000))/1ms进入一次中断/ { while (1); /* 错误情况下就停在这里 } 这个函数的原型是 __STATIC_INLINEuint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1) SysTick_LOAD_RELOAD_Msk) return(1); /* Reload value impossible */ SysTick- LOAD = ticks - 1;
[单片机]
stm32f1按键检测使用外部中断以及定时器延时方式去抖
本来一个按键检测是很简单的功能,在大学的时候做的51单片机矩阵键盘更要复杂,但是如果要在操作系统中使用按键并且很好的去除抖动,不影响整个rtos系统的运行,保证中断不会长时间占用CPU,达到快进快出的目的。就需要另外启动一个定时器来完成计时功能(比如去抖20ms)后,产生定时器中断后再次检测按键电平。 一般51或stm32按键检测流程: #define key1 GPIOC_11 void delay(uint32_t n ) { while(n--); } void key_detected() { if (key1 == 0) { delay(20); if (ke1 == 0)
[单片机]
STM32F1的I/O最大能承受多大电压
1 大部分端口是能够承受+5V电压的,但是也有一些是不能的。 2 具体哪些能够承受+5V电压,要参考相应的数据手册,以STM32F103xC 系列的来看,参考数据手册 这里的FT就表示能承受+5V电压 PS:在今天的实际使用中,我的STM32芯片承受的电压到了4V多,但是芯片依然能正常工作。
[单片机]
stm32F1 DMA
DMA,全称是Direct Memory Access,中文意思为直接存储器访问 DMA可用于实现外设与存储器之间或者存储器与存储器之间数据传输的高效性 DMA请求映像 各通道的DMA1请求: 各通道的DMA2请求: DMA配置步骤 1.使能DMA控制器时钟 2.初始化DMA通道,DMA_InitTypeDef 3.使能外设DMA功能 4.开启DMA的通道 5.查询DMA传输状态 举例 u8 txBuffer = {0}; u8 rxBuffer = {0}; void DMA_send(u32 num) { DMA_Cmd(DMA1_Channel4, DISABLE); DMA_SetCur
[单片机]
STM32外设驱动---SysTick精准延时
单片机:STM32F103 库函数:V3.5 描述:利用系统内核文件core_cm3.c内部SysTick实现1ms,1us的精准延时,时钟72MHz,涉及中断服务SysTick_Handler的注册。 delay.h #ifndef __DELAY_H__ #define __DELAY_H__ #include stm32f10x.h extern void DelayMs(__IO uint32_t nTime); extern void DelayUs(__IO uint32_t nTime); //this function for systick handler function ext
[单片机]