OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4911|回复: 6

菜鸟求助—SysTick的延时程序

[复制链接]

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-5-12
在线时间
0 小时
发表于 2015-5-12 12:06:30 | 显示全部楼层 |阅读模式
5金钱
本人菜鸟,想问一下为什么这样的SysTick延时程序不行:
void delay_nms(u32 nms)
{
u32 temp;
SysTick->LOAD=9000*nms;
SysTick->VAL=0X00;
SysTick->CTRL=0X01;

temp=SysTick->CTRL;
if((temp&(1<<16)))   //改if 
{
SysTick->CTRL=0x00;
SysTick->VAL=0x00;
}
}
还有就是另一种方法就是:我直接判断VAL寄存器的值是否为零进行延时,为什么这样LED0,LED1有时能实现延时亮灭亮灭,有时一起亮,有时只亮红灯?
void delay_nms(u32 nms)
{
u32 temp;
SysTick->LOAD=9000*nms;
SysTick->VAL=0X00;
SysTick->CTRL=0X01;
do{
temp=SysTick->VAL;
}while(temp);
SysTick->CTRL=0x00;

}


最佳答案

查看完整内容[请看2#楼]

能告诉我,SysTick->VAL的值是多少么? 不能的话,你有办法知道么? 有办法的话,试试。 没办法的话,我告诉你,用printf。打印出来看看。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-12 12:06:31 | 显示全部楼层
能告诉我,SysTick->VAL的值是多少么?
不能的话,你有办法知道么?
有办法的话,试试。
没办法的话,我告诉你,用printf。打印出来看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-5-12
在线时间
0 小时
 楼主| 发表于 2015-5-12 12:34:22 | 显示全部楼层
自顶一个!原子哥和各位大神们,SoS...
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-12 23:15:19 | 显示全部楼层
楼主,知道if和while的区别吗?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-5-12
在线时间
0 小时
 楼主| 发表于 2015-5-13 15:41:18 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子哥,第一个问题已了解。我想问下第二个问题,不判断CTRL的第16位,能不能判断SysTick计数器倒计数为0时,说明延时时间已到,这种方法来延时?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-13 23:07:07 | 显示全部楼层
回复【4楼】xiaoyuge:
---------------------------------
你可以试试嘛
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-5-12
在线时间
0 小时
 楼主| 发表于 2015-5-14 10:06:55 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
void delay_mys(u32 ns)
{
u32 temp;

SysTick->LOAD=9000*ns;
//① SysTick->VAL =0x00; //为什么这行不注释的话,MINI开发板的红灯会延时2S ???
SysTick->CTRL =0x01;
do
{
temp = SysTick->VAL;
}while(temp!=0);
SysTick->CTRL = 0x00;
//② SysTick->VAL = 0X00; //为什么这行不注释的话,MINI开发板的绿灯会延时2S ???

}

原子哥请看
第一,我把以上①、②两行注释掉,有时候是正常的;但是有时重新下载后,又出现红灯绿灯其中一个延时2S。
第二,如果把以上两行其中一行取消注释,都会有一个灯延时2S。
我想问下为什么会这样
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 09:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表