static u8 fac_us = ;//us与系统滴答的被乘数
static unsigned short fac_ms = ;//ms与系统滴答的被乘数
static unsigned int m_sys_seconds = ;//系统运行秒数
/**
* @description:系统滴答计时系统初始化
* @param 无
* @retval 无
*/
void SysTick_Init(void)
{
//配置系统滴答时钟源
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8
//设置预装载值
SysTick->LOAD = 0x895440;//时间加载
//计算ms & us转换因数
fac_us = SystemCoreClock/; //为系统时钟的1/8
fac_ms = (unsigned short)fac_us*; //代表每个ms需要的systick时钟数 //开启中断,使能计时
SysTick->CTRL |= (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk) ; //开始倒数 } /*-------------------------------------------------------------------------------------------------
*@description: 返回当前系统运行的秒数.(溢出不计)
--------------------------------------------------------------------------------------------------*/
unsigned long sys_seconds(void)
{
return m_sys_seconds;
} /*-------------------------------------------------------------------------------------------------
*@description: 返回当前系统运行的时间,Unit ms.(溢出不计)
--------------------------------------------------------------------------------------------------*/
unsigned long long sys_millis(void)
{
unsigned long long millisecond = (0x895440-SysTick->VAL)/fac_ms + m_sys_seconds*;
//当前系统运行时间ms
return millisecond;
} /*-------------------------------------------------------------------------------------------------
*@description: 返回当前系统运行的时间,Unit us.(溢出不计)
--------------------------------------------------------------------------------------------------*/
unsigned long long sys_micros(void)
{
unsigned long long microseconds = (0x895440-SysTick->VAL)/fac_us + m_sys_seconds*;
return microseconds;
} // couter 减1的时间 等于 1/systick_clk
// 当counter 从 reload 的值减小到0的时候,为一个循环,如果开启了中断则执行中断服务程序,
// 同时 CTRL 的 countflag 位会置1
// 这一个循环的时间为 reload * (1/systick_clk) void SysTick_Delay_Us( unsigned short ns_num)
{
unsigned long long current_us = sys_micros(); if((current_us + ns_num) <= 0x3e7fffb7bbf)//不存在溢出
{
current_us += ns_num;
do
{
;
}while(sys_micros() < current_us);
}
else//存在溢出
{
current_us = (current_us + ns_num) - 0x3e7fffb7bbf;
do
{
;
}while(sys_micros() <= 0x3e7fffb7bbf);
do
{ }while(sys_micros() < current_us);
}
} void SysTick_Delay_Ms( unsigned short ms_num)
{
unsigned long long current_ms = sys_millis(); if((current_ms + ms_num) <= 0xfffffed7)//不存在溢出
{
current_ms += ms_num;
do
{
;
}while(sys_millis() < current_ms);
}
else//存在溢出
{
current_ms = (current_ms + ms_num) - 0xfffffed7;
do
{
;
}while(sys_millis() <= 0xffffed7);
do
{
;
}while(sys_millis() < current_ms);
} } /**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
m_sys_seconds++;
}

STM32 系统滴答计时器的更多相关文章

  1. STM32嵌入式开发学习笔记(四):使用滴答计时器实现精准计时

    前面我们讲过,因为在STM32上没有系统时间的接口,因此无法调用sleep函数,在本文中,笔者将利用滴答计时器实现精准延时. 查阅技术手册,滴答计时器依赖于一个SysTick_Type类型寄存器,定义 ...

  2. STM32之系统滴答定时器

    一.SysTick(系统滴答定时器)概述 操作系统需要一个滴答定时器周期性产生中断,以产生系统运行的节拍.在中断服务程序里,基于优先级调度的操作系统会根据进程优先级切换任务,基于时间片轮转系统会根据时 ...

  3. STM32 的系统滴答定时器( Systick) 彻底研究解读

    作者:王健 前言 SysTick 比起那些 TIM 定时器可以说简单多啦~~~~~哥的心情也好了不少, 嘎嘎!! ARM Cortex-M3 内核的处理器内部包含了一个 SysTick 定时器,它是一 ...

  4. 系统滴答定时器(SysTick)中断配置

    系统滴答定时器(SysTick)中断配置 在STM32标准库中是通过SysTick_Config()函数配置时钟中断的,然后SysTick_Handler()函数自动定时触发其中的函数. if(Sys ...

  5. Cortex-M0系统滴答定时器Systick详解

    上图是LPC1114系统滴答定时器(SysTick)的结构图.系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器.其 ...

  6. liunx驱动----系统滴答时钟的使用

    2019-3-12系统滴答定时器中断使用 定义一个timer ​​ 其实就是使用系统的滴答定时器产生一个中断. 初始化timer init_timer函数 实现如下 void fastcall ini ...

  7. STM32 - SYSTICK(系统滴答定时器)

    SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15).在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基.例如,为多个任务许以不同数目 ...

  8. STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)

    系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...

  9. uCOS的软件定时器、uCOS时钟节拍和滴答定时器的关系

    uCOS2.81后的版本中有软件定时器的概念,如果要开启定时器任务,需要在OS_CFG.H文件中 #define  OS_TMR_EN                 1 软件定时器其实跟硬件中断是相 ...

随机推荐

  1. Ubuntu下手动安装vscode

    Ubuntu下手动安装vscode1.下载vscodewget https://vscode.cdn.azure.cn/stable/553cfb2c2205db5f15f3ee8395bbd5cf0 ...

  2. openjudge1.1

    目录 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.1.10 1.1.1 描述 对于大部分编程语言来说,编写一个能够输出"H ...

  3. CentOS7.4下安装部署HAProxy高可用群集

    目录第一部分 实验环境第二部分 搭建配置web服务器第三部分 安装配置haproxy服务器第四部分 测试验证第五部分 haproxy配置相关详细解释 第一部分 实验环境1.一台harpoxy调度服务器 ...

  4. 第01组 Alpha冲刺(2/6)

    队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/11861798.html 作业博客: https://edu.cnblogs.com/campus/fz ...

  5. kafka(五) 流式处理 kafka stream

    参考文档: http://www.infoq.com/cn/articles/kafka-analysis-part-7?utm_source=infoq&utm_campaign=user_ ...

  6. 苹果手机微信浏览器select标签选择完成之后页面不会自动回到原位

    说明: html默认select选择框控件在IOS的浏览器中 是底部弹出下拉选择. 这样到时页面位置错位,选择结束后对应不少元素的点击事件不响应. 这样看起来问题不大,但是选择完成之后点击确定提交弹出 ...

  7. vs2017下载安装

    https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes

  8. Hash算法及java HashMap底层实现原理理解(含jdk 1.7以及jdk 1.8)

    现在很多公司面试都喜欢问java的HashMap原理,特在此整理相关原理及实现,主要还是因为很多开发集合框架都不甚理解,更不要说各种其他数据结构了,所以造成面子造飞机,进去拧螺丝. 1.哈希表结构的优 ...

  9. Python10大热门项目

    文章地址:https://baijiahao.baidu.com/s?id=1625230403885659615&wfr=spider&for=pc 今天给大家盘点一下实验楼最热门的 ...

  10. 010 vue使用render方法渲染组件

    1.普通的组件渲染方式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...