基于stm32f10x Systick定时器编写延时函数的讲解
来源:互联网 发布:网络中控品牌 编辑:程序博客网 时间:2024/06/07 08:52
本文章选用参考原子STM32 mini板的例程,在学习中进行笔记记录
首先看看sysick的函数
delay.h
delay.c
链接:http://pan.baidu.com/s/1kUGxzgV 密码:n4s5
接下来,我们看下Systick寄存器,进行程序分析。
知道systick在系统中的地位后,我们来了解systick的实现。这里只是举例说明systick的使用。它有四个寄存器:
SysTick->CTRL, --控制和状态寄存器
SysTick->LOAD, --重装载寄存器
SysTick->VAL, --当前值寄存器
SysTick->CALIB, --校准值寄存器
我们先查看delay_init函数
void delay_init(u8 SYSCLK)
{
//SysTick->CTRL&=0xfffffffb;// HCLK/8
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); /* 时钟选择 HCLK/8 即系统时钟的八分频*/
fac_us=SYSCLK/8;/*us倍成数*/
fac_ms=(u16)fac_us*1000;/*ms倍成数*/
}
void delay_ms(u16 nms) /*本程序只能定时16777216 us ,否则会溢出*/
{
u32 temp; SysTick->LOAD=(u32)nms*fac_ms;/*24位定时器,只能够装载2的24次方的时钟周期,既是16777216*/
SysTick->VAL =0x00;/*清零当前计数值*/
SysTick->CTRL=0x01;/*开启定时器*/
do
{temp=SysTick->CTRL; }
while(temp&0x01&&!(temp&(1<<16)));/*等待定时计数到0,*/
SysTick->CTRL=0x00;/*关闭滴答定时器*
/SysTick->VAL =0X00;/*清零当前值*/
}
void delay_us(u32 nus) /*同理delay_ms*/
{
u32 temp;
SysTick->LOAD=nus*fac_us;
SysTick->VAL=0x00;
SysTick->CTRL=0x01 ;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL=0x00;
SysTick->VAL =0X00;
}
/*大概就到这里了,相应的程序我放在云盘,自行下载测试~*/
链接:http://pan.baidu.com/s/1kUGxzgV 密码:n4s5谢谢。dengweijie
- 基于stm32f10x Systick定时器编写延时函数的讲解
- Systick滴答定时器-延时函数
- STM32 SysTick定时器常见问题及延时函数的实现
- STM32 SysTick定时器做延时函数
- STM32F10x 学习笔记 2 (SysTick 定时器)
- STM32F10x 学习笔记之SysTick 定时器
- 浅谈STM32F10X芯片SysTick系统时钟定时器
- Systick 延时函数详解
- stm32 SysTick定时器常见问题和实现延时
- 利用STM32的SysTick设计精确延时函数
- STM32F10x的定时器使用
- stm32的Systick定时器
- STM32的Systick定时器
- 基于stm32 Systick 的简单定时器(裸机)-- 数组实现
- K60--滴答定时器(SysTick)实现精准延时
- STM32学习笔记——使用SysTick定时器做延时
- 定时器,延时函数
- 用SysTick值抓取法,实现DelayUS()的微妙延时函数
- 新文章
- 后台往前台传值,出现中文乱码问题。
- python入门(二十五):反射
- 获取当前日期时间
- SurfaceView 实现水波纹动画效果
- 基于stm32f10x Systick定时器编写延时函数的讲解
- 7.生存时间TTL
- mysql 查询当天、本周,本月,上一个月的数据
- 【kong系列七】之ACL策略插件
- angularjs的简单注意事项
- spring Ioc的bean的学习笔记
- OpenVR之IVRSystem
- 马拉松比赛(深搜)
- 问题:vc写的windows服务程序,怎么禁止用户停止