OpenEdv-开源电子网

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

关于滴答定时器

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2016-3-31
在线时间
2 小时
发表于 2016-5-1 19:54:24 | 显示全部楼层 |阅读模式
1金钱
新手请教:
void delay_us(u32 nus)
{
//填充重装载数
SysTick->LOAD =nus*9;
//启动定时器
SysTick->CTRL |=1<<0;
//等待计数溢出
  while(!(SysTick->CTRL &(1<<16)));
//关闭定时器
SysTick->CTRL &=~(1<<0);
//清除标志位
SysTick->VAL=0;
}

while(!(SysTick->CTRL &(1<<16))); 这句话是判断是否计数够了,然后位16置1,取反后为0,那while就不会成立,也就执行不了后面的程序。请教这句话该怎么去理解。
!(SysTick->CTRL &(1<<16))这句话等价于什么?

最佳答案

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

如果CTRL的16位为1,那么SysTick->CTRL &(1
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

354

主题

1475

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8093
金钱
8093
注册时间
2015-10-15
在线时间
2918 小时
发表于 2016-5-1 19:54:25 | 显示全部楼层
如果CTRL的16位为1,那么SysTick->CTRL &(1<<16)的值为1,那么!(SysTick->CTRL &(1<<16))的值为0,那么while(!(SysTick->CTRL &(1<<16))); 就会退出,进行下面的操作。。。
也就是,这句话的意思是,等待硬件设置CTRL的第16位到1(也就是计数到0了)。

CTRL的16位为0,那么就是while(1);等待。。。
CTRL的16位为1,那么就是while(0);顺序执行。。。

简单得很。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-4-27
在线时间
29 小时
发表于 2016-5-2 10:00:51 | 显示全部楼层
while循环 等待硬件自动置1,
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2016-3-31
在线时间
2 小时
 楼主| 发表于 2016-5-2 11:22:13 | 显示全部楼层
庄健宇 发表于 2016-5-2 10:00
while循环 等待硬件自动置1,

while(!(SysTick->CTRL &(1<<16)));         SysTick->CTRL &(1<<16)这句话是CTRL的第16位为1?取反就是while(0),那也就循环不了啊。  
回复

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-8-17
在线时间
16 小时
发表于 2016-5-2 12:29:28 | 显示全部楼层
小丑 发表于 2016-5-2 11:22
while(!(SysTick->CTRL &(1

循环不了,也就是说时间到了,可以跳出去了。顺序执行下面的语句。
回复

使用道具 举报

7

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-4-27
在线时间
29 小时
发表于 2016-5-2 14:56:30 | 显示全部楼层
小丑 发表于 2016-5-2 11:22
while(!(SysTick->CTRL &(1

时间没到 一直在等待时间到(硬件置1),时间到了执行下面代码。
回复

使用道具 举报

7

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-4-27
在线时间
29 小时
发表于 2016-5-2 14:56:53 | 显示全部楼层
小丑 发表于 2016-5-2 11:22
while(!(SysTick->CTRL &(1

我建议你 在学学C语言。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 22:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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