OpenEdv-开源电子网

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

关于窗口看门狗初始化的源码,有一个问题看不懂,求教大神!!

[复制链接]

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
发表于 2015-4-11 18:12:57 | 显示全部楼层 |阅读模式
5金钱
这是F4探索者关于窗口看门狗初始化的源码:
 void WWDG_Init(u8 tr,u8 wr,u8 fprer) 
{    
RCC->APB1ENR|=1<<11;  //使能wwdg时钟 
WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.     
WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer 
WWDG->CFR&=0XFF80;      
WWDG->CFR|=wr;      //设定窗口值      
WWDG->CR|=WWDG_CNT;  //设定计数器值 
WWDG->CR|=1<<7;   //开启看门狗      
MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2     
WWDG->SR=0X00;  //清除提前唤醒中断标志位 
WWDG->CFR|=1<<9;        //使能提前唤醒中断 


其中这一句我觉得很有趣:

WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT. 

亲们,WWDG_CNT就是窗口看门狗的递减计数器对吧?tr是我们要装定的初值。那么我的问题来了:

如果是装定初值
,我们完全可以对WWDG_CNT直接赋值:WWDG_CNT=tr;为什么要位相与呢?意义何在?

假如是为了保险,我们可以先对WWDG_CNT清零,再赋值。而源码里的情况则是:如果WWDG_CNT初值本来就是0,那么位相与还是我们想要的装定值tr,没问题…………但这个相与好像完全没必要。


我有点好奇,这一次位与,里面有什么奥秘呢?

最佳答案

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

这个问题我已经想明白了:其实就是把tr、cnt扩展成一个7位二进制数。所以才能完成对全部7位应设置寄存器的赋值。直接赋值不能确保高位的值是否初始化。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-11 18:12:58 | 显示全部楼层
这个问题我已经想明白了:其实就是把tr、cnt扩展成一个7位二进制数。所以才能完成对全部7位应设置寄存器的赋值。直接赋值不能确保高位的值是否初始化。
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-11 19:16:06 | 显示全部楼层
哎呦我去,后面还有个类似的问题:

void WWDG_Set_Counter(u8 cnt) 

WWDG->CR =(cnt&0x7F);//重设置7位计数器 

//窗口看门狗中断服务程序 
void WWDG_IRQHandler(void) 
{      
WWDG_Set_Counter(WWDG_CNT);//重设窗口看门狗的值!         
WWDG->SR=0X00;//清除提前唤醒中断标志位 
LED1=!LED1; 
}

其中这一行:
WWDG->CR =(cnt&0x7F);//重设置7位计数器 

也是完全不明白:cnt在调用WWDG_Set_Counter(WWDG_CNT);是被赋值为cnt=WWDG_CNT,但问题是,WWDG_CNT不就是我们赋给计时器的值吗?怎么又变成cnt&0x7F了?我感觉这个与,存不存在没关系呀。 

晕了,完全看不懂…………原子哥连续使用两次相同的位相与,应该不是空穴来风吧?但我确实看不出意义,大神们给说道说道吧。
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-11 19:30:49 | 显示全部楼层
刚才写错,小小修改了一下…………唉,看晕了,脑子都乱了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-11 22:47:52 | 显示全部楼层
请先自行验证。
不要纯理论派
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2017-5-9
在线时间
18 小时
发表于 2017-5-20 17:18:55 | 显示全部楼层
没看原子哥的视频吧,视频中有讲的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 21:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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