野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17738|回复: 8

论--初始化之前使寄存器恢复缺省值的重要性

[复制链接]
发表于 2017-8-10 09:09:01 | 显示全部楼层 |阅读模式
本帖最后由 冷库的云 于 2017-8-10 10:17 编辑

TIM_BDTRInitTypeDef      TIM_BDTRInitStructure;
TIM_BDTRStructInit(&TIM_BDTRInitStructure);//缺省值(一般为0)必须要有,为了保证寄存器的 值不是上电随机数
TIM_BDTRInitStructure.TIM_DeadTime = 0x0A; //死区时间设置
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);   
如果没有TIM_BDTRStructInit(&TIM_BDTRInitStructure);代码运行就不会出现你想要的结果。那有人肯定会问“为什么类似初始化代码,我没有恢复缺省值,代码运行也没问题呀!”。下面我来详细分析一下这个问题:
如果这段初始化代码用寄存器方式写就一句话,非常简洁:TIM1->BDTR|=0x0A;      //死区时间设置
BDTR寄存器是16位的,有些人自己手动对寄存器的每个位都设定了自己所需要的值,那么这种情况下,是可以不恢复缺省值的,因为寄存器中的值都确定了。如果有些人只用到了寄存器的某几个位,那么其他位没用到,防止没用到的位上电默认的值是如果不是0(一般情况下为0),就会对整个配置造成影响。所以在配置前,最好先恢复缺省值!!!

QQ截图20170810075636.png
QQ截图20170810080855.png
QQ截图20170810081301.png
QQ截图20170810081652.png
QQ截图20170810082023.png
QQ截图20170810083006.png
QQ截图20170810084056.png
QQ截图20170810085555.png
回复

使用道具 举报

发表于 2017-8-10 09:20:18 | 显示全部楼层
初始化给默认值是很重要的,库函数有个xxxxstructinitxxx ,专门用来对结构体赋予默认值,这样用结构体初始化的时候有些成员没赋值也不会引起错误
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-10 09:25:10 | 显示全部楼层
flyleaf 发表于 2017-8-10 09:20
初始化给默认值是很重要的,库函数有个xxxxstructinitxxx ,专门用来对结构体赋予默认值,这样用结构体初始 ...

是的,用StructInit 就是给寄存器设置缺省值。确保寄存器中的值都被设置过,防止未设置而导致程序出问题
回复 支持 反对

使用道具 举报

发表于 2017-8-10 09:36:49 | 显示全部楼层
冷库的云 发表于 2017-8-10 09:25
是的,用StructInit 就是给寄存器设置缺省值。确保寄存器中的值都被设置过,防止未设置而导致程序出问题

曾经写adc程序,初始化赋值配置少了个结构体成员,出现奇怪问题,满满都是泪
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-10 09:40:58 | 显示全部楼层
flyleaf 发表于 2017-8-10 09:36
曾经写adc程序,初始化赋值配置少了个结构体成员,出现奇怪问题,满满都是泪

以前我也干过,所以今天有空写了这个帖子提醒下别人
回复 支持 反对

使用道具 举报

发表于 2017-8-10 09:50:51 | 显示全部楼层
对,最好加一个  DEInit(),在初始化结构体成员之前把所有的寄存器都回复到复位时候的值。
回复 支持 反对

使用道具 举报

发表于 2017-8-10 09:51:07 | 显示全部楼层
cool                          
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-10 10:22:04 | 显示全部楼层

谢谢火哥
回复 支持 反对

使用道具 举报

发表于 2017-8-10 15:48:35 | 显示全部楼层
学习一个,谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-1 06:51 , Processed in 0.049270 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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