OpenEdv-开源电子网

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

哪位大佬能帮我解答一下关于stm32f103精英版的中断问题

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2018-8-13
在线时间
16 小时
发表于 2018-8-14 11:08:21 | 显示全部楼层 |阅读模式
2金钱
在delay_ms函数里面,SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;这一句代码 SysTick_CTRL_ENABLE_Msk的值为1?它与SysTick->CTRL做或运算,结果不应该是CTRL的0位 被置1么? 那怎么会打开SysTick定时器的使能呢,图中while里面的搞不懂什么意思,调试看看结果值  temp的值变成了1,哪个大佬给解释一下啊 感激不尽

调试窗口,delay_ms函数

调试窗口,delay_ms函数

SysTick_CTRL_ENABLE_Msk的宏定义

SysTick_CTRL_ENABLE_Msk的宏定义

最佳答案

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

while((SysTick->Ctrl &1) && (SysTick->Ctrl & (1Ctrl & (1Ctrl & (1
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-14 11:08:22 | 显示全部楼层
while((SysTick->Ctrl &1) && (SysTick->Ctrl & (1<<16))
(SysTick->Ctrl &1) 是判断SysTick是否便能
(SysTick->Ctrl & (1<<16) 是判断SysTick是否到了设定的时间
0位是使能, 16位是益出

while((SysTick->Ctrl &1) && (SysTick->Ctrl & (1<<16))
完整的解释是, 当SysTick被使能, 同时又益出, 就跳到while的下一句执行
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-8-14 12:41:34 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2018-8-13
在线时间
16 小时
 楼主| 发表于 2018-8-14 14:16:16 | 显示全部楼层
edmund1234 发表于 2018-8-14 11:26
while((SysTick->Ctrl &1) && (SysTick->Ctrl & (1Ctrl & (1Ctrl & (1

那为什么temp在第二个断点的时候变成01了呢   temp不是Ctrl 的值么 也就是执行完SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;这个语句ctrl就变成01了么
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-14 15:49:56 | 显示全部楼层
w541554282 发表于 2018-8-14 14:16
那为什么temp在第二个断点的时候变成01了呢   temp不是Ctrl 的值么 也就是执行完SysTick->CTRL|=SysTick_ ...

之前SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ,  SysTick->CTRL就等于0x01, 所以之后的 temp= SysTick->CTRL, temp也是等于0x01啊
回复

使用道具 举报

29

主题

338

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2018-4-13
在线时间
170 小时
发表于 2018-8-14 19:13:22 | 显示全部楼层
第一个使SysTick->CTRL为0x01是使能SysTick定时器,让它工作。
第二个while自然是等待SysTick的bit16位为1了,为1就是定时到达了,不为1就继续等待。
执行while时SysTick在工作了,它会在计数到达时置位CTRL的bit16.
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2018-8-13
在线时间
16 小时
 楼主| 发表于 2018-8-15 11:02:18 | 显示全部楼层
edmund1234 发表于 2018-8-14 15:49
之前SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ,  SysTick->CTRL就等于0x01, 所以之后的 temp= SysTick-> ...

CTRL |= ENABLE_MSK  等同于 CTRL =CTRL | ENABLE_MSK ,   我不理解的地方就是 CTRL原先是有数值的  它 与 ENABLE_MSK做或运算  结果怎么会等于1,大哥  请教
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4521
金钱
4521
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-8-15 12:24:07 | 显示全部楼层
w541554282 发表于 2018-8-15 11:02
CTRL |= ENABLE_MSK  等同于 CTRL =CTRL | ENABLE_MSK ,   我不理解的地方就是 CTRL原先是有数值的  它  ...

只是让第0位变成1,其它位不会影响的
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 16:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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