前言 收到VEGA织女星开发板也有一段时间了,好久没玩了,想驱动个OLED屏,但是首先要实现IIC协议,而实现IIC协议,最基本的就是需要一个精确的延时函数,所以研究了一下如何来写一个精确的延时函数。众所周知,ARM Cortex M内核都有一个24位的SysTick系统节拍定时器,它是一个简易的周 ...
分类:
其他好文 时间:
2019-06-29 00:50:42
阅读次数:
156
1.STM32的systick定时器是一个24位的递减计数器,因此最大值为0XFFFFFF, 在设定初始值后,没经过一个系统时钟周期,计数值就减1,计数到0时systick计数器自动重装载, 并继续计数,同时CTRL的COUNTFLAG标志位置1,如果使能了中断就触发中断, ...
分类:
其他好文 时间:
2019-04-24 00:05:05
阅读次数:
152
上面代码的核心是:采用Cortex-M3/4内核中的跟踪组件DWT的时钟周期计数CYCCNT实现 参考链接 http://www.firebbs.cn/forum.php?mod=viewthread&tid=19059&fromuid=1 https://blog.csdn.net/linux_l ...
分类:
其他好文 时间:
2019-04-11 19:42:13
阅读次数:
380
1、什么是Systick定时器?---》Systick定时器是一个简单的滴答定时器,对于ST的M3、M4、M7内核芯片,都有滴答定时器。---》Systick滴答定时器常常用来做延迟,或者时时操作系统的心跳时钟。这样可以节省MCU的资源,不用另外浪费一个定时器。比如UCOS系统中,分时复用,需要一个... ...
分类:
其他好文 时间:
2019-02-25 00:54:59
阅读次数:
322
一开始在stm32参考手册里找关于systick的内容,没找到任何有用的信息,后来百度了下,发现是在cortex m3参考手册里有 几个寄存器的描述在第8.2节,寄存器的定义在core_cm3.h中而不是stm32f10.h,应该这个systick是属于cm3内核的内容,所以才放在这个文件中定义。 ...
分类:
其他好文 时间:
2019-01-28 21:12:41
阅读次数:
215
每一个支持多进程(线程)的系统都会有一个滴答时钟(系统时钟),这个时钟就好比系统的“心脏”,线程的休眠(延时)和时间片轮转调度都需要用到它。 Cortex-M系列的内核都有一个systick时钟,这个时钟就是设计用来支持操作系统的,是一个24位的自动重装载向下计数器,中断入口就位于中断向量表里面,定 ...
分类:
其他好文 时间:
2019-01-28 01:13:13
阅读次数:
191
HAL库驱动中,由于某些外设的驱动需要使用超时判断(比如I2C、SPI、SDIO等),需要精确延时(精度为1ms),使用的是SysTick,但是在操作系统里面,我们需要使用SysTick来提供系统时基,那么就冲突了,怎么办?答案是利用DWT重新编写HAL库的相关延时和超时函数HAL_InitTick ...
分类:
其他好文 时间:
2019-01-22 17:37:40
阅读次数:
245
新建工程简单流程 首先,新建文件夹存放总的工程,如test,在test下新建文件夹分类存放工程里的各个文件,我个人分类如下:StartUp、User、Lib、Hardware、Obj 分别存放stm32启动文件,用户文件、库文件、硬件驱动文件、生成目标文件 新建好了文件夹,再复制进相应的文件,Lib ...
分类:
其他好文 时间:
2019-01-19 00:54:27
阅读次数:
215
關於Cortex System Timer (Systick) 網上隨便google就可以找到許多相關範例。 他就是ARM提供的一個24-bit的下數(count-down)計時器我看大部分應用都是提供給delay使用,在RTOS也有一些應用. 簡單提及一下 Systick Register Sys ...
分类:
其他好文 时间:
2018-12-11 00:34:41
阅读次数:
242
systick的原理前一篇博文有介绍,简而言之就是SysTick定时器是一个24位的倒计数,当倒计数为0时,将从RELOAD寄存器中取值作为定时器的初始值,同时可以选择在这个时候产生中断(异常号:15)。例如从RELOAD的值为999,那么当倒计数为0时,就会从复位为999继续倒计数。库文件当中有s ...
分类:
其他好文 时间:
2018-10-03 00:50:22
阅读次数:
171