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

关于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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版