4893|8

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请问M4如何达到0.1us级别的延时呢? [复制链接]

如题,谢谢大家!

最新回复

這個延時並未使用中斷 , 直接使用就可以了 , 不過記得要先執行 SysTick_Init();   详情 回复 发表于 2014-7-2 16:35
 
点赞 关注

回复
举报

4

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
首先要确定的是你是否跑操作系统,若无,直接使用定时器即可实现或者使用delay计算指令数延时,还可以通过测试(如:驱动IO,示波器测试确定)。若跑系统,就复杂了,实时系统需要支持这样的延时时间。非实时delay延时会不稳定,无法使用。

点评

谢谢您的回复! 我没有跑OS,直接裸跑。。 下面是我写的程序,但是不行,去掉2个零可以输出10us的。SysCtlDelay是否有最小值限制呢?参数中的2是因为循环本身需要时间,因此我调整为2发现接近10us。[/backcolo  详情 回复 发表于 2014-6-18 16:50

赞赏

1

查看全部赞赏

 
 

回复

1119

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
过来看看~~~~~~~~我也不会
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

4
 
freewarm 发表于 2014-6-18 15:18
首先要确定的是你是否跑操作系统,若无,直接使用定时器即可实现或者使用delay计算指令数延时,还可以通过 ...

谢谢您的回复!
我没有跑OS,直接裸跑。。


下面是我写的程序,但是不行,去掉2个零可以输出10us的。SysCtlDelay是否有最小值限制呢?参数中的2是因为循环本身需要时间,因此我调整为2发现接近10us。


SysCtlClockSet(
SYSCTL_OSC_INT | //??????
SYSCTL_USE_PLL | //??PLL
SYSCTL_SYSDIV_4 | //4???50MHz
SYSCTL_MAIN_OSC_DIS); //?????Main_OSC
SysCtlDelay((SysCtlClockGet()/30)/200000); // 100ns

 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

5
 
写个延时函数就行了,干吗非要配置那么多寄存器?用示波器看波形.M3在96M的情况下,可以达到.

点评

感谢您的回复! 这也是个好方法! 我用的M4,最高只能到80M吧  详情 回复 发表于 2014-6-18 23:22
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

6
 
ienglgge 发表于 2014-6-18 21:00
写个延时函数就行了,干吗非要配置那么多寄存器?用示波器看波形.M3在96M的情况下,可以达到.

感谢您的回复!
这也是个好方法!
我用的M4,最高只能到80M吧
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

7
 
如果需要精確的delay時間可以使用 Systick. 系統時鐘在80MHz下, 每一個計數是 12.5 ns , 只要 8 個計數就是 100 ns了. 例如 :

//Initial Systick counter
void SysTick_Init(void){
      NVIC_ST_CTRL_R = 0;               
      NVIC_ST_CTRL_R = 0x00000005;      
}
// The delay is 12.5 ns at 80 MHz core clock.
void SysTick_Delay(unsigned long delay){
      NVIC_ST_RELOAD_R = delay-1;  
      NVIC_ST_CURRENT_R = 0;      
      while((NVIC_ST_CTRL_R&0x00010000)==0){
        }
}

SysTick_Delay(8);    // 12.5ns*8 = 100ns

点评

你这个延时要不要在启动文件设置中断什么的。直接使用嘛?还是需要配置那里。我直接使用貌似没有反应!  详情 回复 发表于 2014-6-28 16:21
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

8
 
Mikehuang822 发表于 2014-6-21 17:42
如果需要精確的delay時間可以使用 Systick. 系統時鐘在80MHz下, 每一個計數是 12.5 ns , 只要 8 個計數就是 ...

你这个延时要不要在启动文件设置中断什么的。直接使用嘛?还是需要配置那里。我直接使用貌似没有反应!

点评

這個延時並未使用中斷 , 直接使用就可以了 , 不過記得要先執行 SysTick_Init();  详情 回复 发表于 2014-7-2 16:35
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

9
 
ZhengLang 发表于 2014-6-28 16:21
你这个延时要不要在启动文件设置中断什么的。直接使用嘛?还是需要配置那里。我直接使用貌似没有反应!

這個延時並未使用中斷 , 直接使用就可以了 , 不過記得要先執行 SysTick_Init();
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表