你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于SysTick 1us延时的实验

[复制链接]
xyc2690 提问时间:2015-1-15 22:46 /
本帖最后由 xyc2690 于 2015-1-24 20:21 编辑

常常在论坛看到有关SysTick 不能实现1us延时的问题,晚上决定亲手用示波器测一下。
首先,我的板子是NucleoSTM32F072 ,没有外接晶振,设置使用内部晶振48M(HSI48)。

时钟频率:1/48M=0.0208333us
没有使用STM32的固件库,1us延时比较短,


  1. while (1)
  2.   {
  3.                 GPIOA->ODR ^=  GPIO_PIN_5;
  4.                 Delay_us(1);
  5.   }
复制代码
每1us   GPIO状态翻转。
  1. void Delay_us(uint32_t nTime)
  2. {
  3.     SysTick->VAL=0X00;                              //  初值
  4.     SysTick->LOAD=48*nTime;                   //  重装值;48个时钟周期=1us
  5.     SysTick->CTRL=0x00000005;               //  第0位:使能时钟   第3位:使用内部时钟
  6.     while(!(SysTick->CTRL&0x00010000));  //计时
  7.     SysTick->CTRL|=0x00000004;             // 第1位:产生异常请求
  8. }
复制代码


1.jpg

不能实现1us延时。

******************************************************************
我尝试将
SysTick->VAL=0X00;   注释掉
  1. void Delay_us(uint32_t nTime)
  2. {
  3. //SysTick->VAL=0X00;              //  初值
  4.   SysTick->LOAD=48*nTime;    //  重装值;48个时钟周期=1us
  5.   SysTick->CTRL=0x00000005;//  第0位:使能时钟   第3位:使用内部时钟
  6.   while(!(SysTick->CTRL&0x00010000));//计时
  7.   SysTick->CTRL|=0x00000004;// 第1位:产生异常请求
  8. }
复制代码
2.jpg
除了第一次之后的Delay_us(1)有改观,

进一步,如果将

SysTick->LOAD=48*nTime; // 重装值;48个时钟周期=1us
SysTick->CTRL=0x00000005;// 第0位:使能时钟 第3位:使用内部时钟
这两句在前面初始化,而不放进延时:



3.jpg

延时就比较精确了。


我的问题就是“SysTick->VAL=0X00; ” 为什么会有1us?

收藏 1 评论24 发布时间:2015-1-15 22:46

举报

24个回答
天天晓宇 回答时间:2015-1-16 08:31:15
这个没什么意义
数码小叶 回答时间:2015-1-16 07:55:00
论坛有好几个这样的帖子了,我也发过,都回答的很详细
holts1 回答时间:2015-1-16 08:18:35
本身中断切换要时间的,这个1U就是修正值
xyc2690 回答时间:2015-1-16 08:32:27
holts1 发表于 2015-1-16 08:18
本身中断切换要时间的,这个1U就是修正值

中断响应考虑进去了,没有1us这么长的,当然这里延时1us gpio翻转一次,示波器显示的是1个周期其实是延时2us了。我的疑问是清空SysTick->VAL  相对与其他寄存器操作很费时间。。。
我是酱油哥 回答时间:2015-1-16 08:33:57
不错    好东西  
holts1 回答时间:2015-1-16 12:01:11
xyc2690 发表于 2015-1-16 08:32
中断响应考虑进去了,没有1us这么长的,当然这里延时1us gpio翻转一次,示波器显示的是1个周期其实是延时 ...

即然费时间,哪它有没有预加载的机制?
大秦正声 回答时间:2015-1-16 14:26:51
学习,内部晶振有误差的
xyc2690 回答时间:2015-1-16 14:39:29
holts1 发表于 2015-1-16 12:01
即然费时间,哪它有没有预加载的机制?

就是不清楚为什么费时间呀~
hanmcustm 回答时间:2015-1-16 15:04:48
楼主用外部时钟试一下
123下一页

所属标签

相似问题

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版