STM32精确延迟1us和1ms的函数
2016-05-05 23:12
423 查看
STM32精确延迟1us和1ms的函数
延迟1us:/******************************************************************************* * 函 数 名 : delay_us * 函数功能 : 延时函数,延时us * 输 入 : i * 输 出 : 无 *******************************************************************************/ void delay_us(u32 i) { u32 temp; SysTick->LOAD=9*i; //设置重装数值, 72MHZ时 SysTick->CTRL=0X01; //使能,减到零是无动作,采用外部时钟源 SysTick->VAL=0; //清零计数器 do { temp=SysTick->CTRL; //读取当前倒计数值 } while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达 SysTick->CTRL=0; //关闭计数器 SysTick->VAL=0; //清空计数器 }
延迟1ms:
/******************************************************************************* * 函 数 名 : delay_ms * 函数功能 : 延时函数,延时ms * 输 入 : i * 输 出 : 无 *******************************************************************************/ void delay_ms(u32 i) { u32 temp; SysTick->LOAD=9000*i; //设置重装数值, 72MHZ时 SysTick->CTRL=0X01; //使能,减到零是无动作,采用外部时钟源 SysTick->VAL=0; //清零计数器 do { temp=SysTick->CTRL; //读取当前倒计数值 } while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达 SysTick->CTRL=0; //关闭计数器 SysTick->VAL=0; //清空计数器 }
注意:以上两函数中间的参数u32 i不能超过1800,举例,想定时一分钟,可以通过for循环让delay_ms(1000)走60次,而不能使用delay_ms(60000),不然程序就出错了。
相关文章推荐
- WPFINotifyPropertyChanged使用技巧
- BP神经网络的实例一则
- U盘制作ubuntu安装盘后无法格式化处理
- 狸猫的面试——JVM内存回收
- 一个地雷式的core dump------又是空vector惹的祸
- 在Android上使用Lambda表达式 - retrolambda插件
- PHP菜鸟应该如何学好PHP
- 软件生存周期
- zookeeper在集群负载均衡中的应用
- 最好的8个Java RESTful框架
- GUI
- POJ 1328 Radar Installation
- 在excel中,怎么单击一个超链接,链接到本地的一个文件
- css父盒子没有高度让子盒子撑开 且子盒子有浮动 清除浮动
- ArcGIS Server 可发布什么类型的服务?
- linux下挂载windows C、D、E盘
- 格式化输出的几种方法 主要介绍format函数的用法
- JAVA面向对象学习
- 学习进度表总结
- 机器学习--线性回归