参考:stm32 系统定时器 SysTick
作者:点灯小哥
发布时间: 2021-03-10 13:46:00
网址:https://blog.csdn.net/weixin_46016743/article/details/114633245

参考:stm32之系统定时器
作者:打酱油的;
发布时间: 2021-04-13 20:11:32
网址:https://blog.csdn.net/weixin_46098612/article/details/115669473

目录

  • 系统定时器原理(只能向下递减)
  • 定时时间的计算方法(1ms、1us)
  • SysTick相关寄存器
  • SysTick结构体(里面寄存器)
  • SysTick固件库函数
  • SysTick中断优先级(通过寄存器设置)
  • SysTick编写us、ms延时函数闪烁灯

系统定时器原理(只能向下递减)

定时时间的计算方法(1ms、1us)

SysTick相关寄存器

这是寄存器里面特殊的位:

SysTick结构体(里面寄存器)

在内核寄存器core_cm3.h里面

注:上面第三个是当前寄存器的值,用到最多的是前三个结构体成员。

SysTick固件库函数

在core_cm3.h最下面找

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);          //判断ticks值是否大于重装载值最大值 2^24(系统定时器是24位的)SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;    //配置reload重装载寄存器的初值NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); //配置中断优先级 1<<4 -1 = 16-1=15 即中断优先级是15  下面详解//内核的中断优先级要高于外设的中断优先级 数字越小 优先级越高SysTick->VAL   = 0;   //配置count的值                                                            SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |      //配置system时钟为 72MSysTick_CTRL_TICKINT_Msk   |      //使能中断SysTick_CTRL_ENABLE_Msk;          //使能systickreturn (0);
}

ticks值设置为72则延时1us,设置为720000延时1ms。

SysTick中断优先级(通过寄存器设置)


SysTick编写us、ms延时函数闪烁灯

SysTick.h

#include "stm32f10x.h" void ms_delay(uint32_t ms);
void us_delay(uint32_t us);

SysTick.c

#include "stm32f10x.h"                  // Device header
#include "SysTick.h"void ms_delay(uint32_t ms)//毫秒定时器
{   uint32_t i;//次数SysTick_Config(72000);//SysTick固件库函数 前面有讲 本质就是给重装载 Reload寄存器赋值//我理解的有点像多线程 上面线程独立于CPU资源不断重复进行重装载定时 下面是CPU资源处理的进程进行判断for(i=0;i<ms;i++)     //定时器(计数器)一个循环就是1ms  循环多少次就是多少毫秒{//系统定时器只能递减  判断是否减到0就可以了  一旦减到0则CTRL寄存器第16位为1 如下图所示:while(  !( (SysTick->CTRL) &(1<<16) ) );//}SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;//失能 置位回去
}void us_delay(uint32_t us)//微秒定时器
{   uint32_t i;SysTick_Config(72);for(i=0;i<us;i++){while(  !( (SysTick->CTRL) &(1<<16) ) );}SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}


下面是CTRL寄存器里面相应的位:

main.c

#include "stm32f10x.h"                  // Device header
#include "usart.h"
#include "led.h"
#include "tim.h"
#include "motor.h"
#include "SysTick.h"//添加头文件路径void delay(uint16_t time)
{uint16_t i = 0;while(time--){i=12000;while(i--);}
}int main(void)
{       LED_Init();GPIO_SetBits( GPIOC,  GPIO_Pin_13);while(1){GPIO_ResetBits( GPIOC,  GPIO_Pin_13);ms_delay(500);GPIO_SetBits( GPIOC,  GPIO_Pin_13);ms_delay(500); }
}

STM32系统定时器SysTick(只能向下递减)延时闪烁灯相关推荐

  1. STM32 系统定时器(SysTick)

    目录 SysTick定义 SysTick定时时间的计算 SysTick结构体 SysTick固件库函数 SysTick中断优先级 编写ms,us延时函数 systick和delay区别 案例 SysT ...

  2. STM32系统定时器SysTick

    1. SysTick系统定时器概述 学习完STM32的中断,下来就要学习STM32的定时器.就像电话最基本的功能是与人通话一样,定时器最基本的功能就是定时(STM32有些定时器的功能强大得超乎想象,当 ...

  3. c语言流水灯定时器延时,实现流水灯以间隔500ms的时间闪烁(系统定时器SysTick实现的精确延时)...

    /** ****************************************************************************** * @file main.c * ...

  4. 实现流水灯以间隔500ms的时间闪烁(系统定时器SysTick实现的精确延时)

    /** ****************************************************************************** * @file main.c * ...

  5. STM32基本定时器TIM6和TIM7

    1. STM32上定时器的分类 前面学习了STM32系统定时器SysTick,它的主要作用是为OS提供系统滴答,当然我们也可以利用它实现了精准延时.在STM32单片机中,除了属于CM3内核中的一个外设 ...

  6. 【STM32】HAL库-系统滴答定时器SysTick

    SysTick定时器被捆绑在NVIC中,是一个简单的定时器,对于CM3.CM4内核芯片,都有Systick定时器.Systick定时器常用来做延时,或者实时系统的心跳时钟.这样可以节省MCU资源,不用 ...

  7. 嵌入式开发(7)系统定时器(SysTick)之延时函数运用

    目录 一.系统定时器 1. 简介 2.工作原理 3.频率的概念 二.库函数SysTick定时器操作 系统定时器配置 三.寄存器SysTick定时器操作 1.系统定时器的用途 2.寄存器 3.官方示例 ...

  8. STM32基本定时器原理及应用:led实现精确延时

    TIM6/7 前言 1.定时器概念 2.基本定时器结构TIM6/7 2.1 时钟源 2.2 计数器时钟 2.3 计数器 2.4 自动重装载寄存器 3.定时时间计算 4.定时器初始化结构体 5.实验:精 ...

  9. STM32系统学习——RCC(使用HSE/HSI配置时钟)

    ** STM32系统学习--RCC(使用HSE/HSI配置时钟) ** RCC :reset clock control 复位和时钟控制器.主要讲解时钟部分,特别是要着重理解时钟树,理解了时钟树,ST ...

最新文章

  1. 智源神经元识别挑战赛发布:收获不只是10万元奖金
  2. docker 错误 A dependency job for docker.service failed. See ‘journalctl -xe‘ for details
  3. 新安装的mysql登录不了_mysql 5.6 新安装登录
  4. Git中Add后对部分文件进行取消
  5. python自动化第三周---文件读写
  6. poj 1201 差分约束
  7. C++/OpenCV:读取视频与调用摄像头
  8. HDU 1117 免费馅饼 二维动态规划
  9. python elem_Python
  10. cadence设计运算放大器_「好设计论文」一种用于高精度DAC的实用型CMOS带隙基准源...
  11. Json笔记-高德地铁数据分析
  12. 【小憩】流光容易把人抛,红了樱桃,绿了芭蕉
  13. 河南省第六届ACM程序设计大赛(共7道,目前只做了三道。待续)
  14. 单张像片空间后方交会
  15. vue怎么给pc端浏览器设置一个最小屏幕_vue项目实现移动端适配的案例
  16. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己 索引缓存的故事
  17. python 列表写入excel_Python读写excel表格的方法一
  18. 重新装mysql出现乱码,数据库出现乱码的原因和解决办法
  19. RTI1.3时间管理支持的两种模式
  20. 计算机应用基础是背的吗,计算机应用基础Excel2003电子表格系统

热门文章

  1. JAVA_出神入化学习路线大纲
  2. Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由RouteNavigation
  3. 大数据时代的公共安全治理
  4. SpringMVC连接多数据源配置
  5. CoreAnimation —— CAReplicatorLayer(拷贝图层)
  6. Linux网卡eth0变成eth1修改方法
  7. linux下的DNS服务器详解
  8. Getting the right Exception Context from a Memory dump Fixed
  9. 【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)
  10. ANSYS——固定斜度的变截面变截面的定义、自由耦合和变截面的定义