OpenEdv-开源电子网

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

关于什么时候加入语句TIM_DeInit()

[复制链接]

77

主题

198

帖子

0

精华

高级会员

Rank: 4

积分
526
金钱
526
注册时间
2013-11-25
在线时间
0 小时
发表于 2014-3-19 14:04:30 | 显示全部楼层 |阅读模式
固件库使用手册上指出,TIM_DeInit()是将外设TIMX寄存器重设为缺省值的功能。
在.c文件中给出了它的定义是:
void TIM_DeInit(TIM_TypeDef* TIMx)
{
  /* Check the parameters */
  assert_param(IS_TIM_ALL_PERIPH(TIMx)); 
 
  if (TIMx == TIM1)
  {
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE);
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE);  
  }     
  else if (TIMx == TIM2)
  {
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE);
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE);
  }
  else if (TIMx == TIM3)
  {
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE);
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE);
  }
。。。 。。。
那么这个函数不就是定时器时钟使能的意思么?在初始化程序里面已经使能了时钟,还需要把:
TIM_DeInit(TIM2);
写进去么??
我在写定时器产生pwm的程序,看了例程里面是没有用到这个函数的,但是网上有些程序又加入这个函数了,所以很困扰这个函数到底什么情况下用呢?还是说这句话是用不用都没有关系的呢?
谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-19 14:33:33 | 显示全部楼层
这个不是使能时钟哦。RCC_APB2PeriphResetCmd注意是“Reset”
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

77

主题

198

帖子

0

精华

高级会员

Rank: 4

积分
526
金钱
526
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-3-19 14:58:44 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
哦,之前没有注意到,以为是一样的呢~
那么,这个函数具体是什么意思啊?重设为缺省值就是时钟复位到默认值的意思么?
那么到底在什么情况下需要写这个语句呢?定时器溢出后不是自动就会回到0重新开始计数么?
为什么有的人在PWM程序里面加上了这个一句话呢?
谢谢~
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-19 16:30:31 | 显示全部楼层
回复【3楼】馨馨泡沫:
---------------------------------
不加也行。不过加了代码更健壮。用JTAG跟踪下寄存器,结合中文手册,问题就没这么多了,呵呵。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2017-1-5
在线时间
9 小时
发表于 2017-2-21 21:30:29 | 显示全部楼层
有时候不用进不去中断,会卡死
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-1-28
在线时间
14 小时
发表于 2018-3-25 15:47:27 | 显示全部楼层
TIM_DeInit()复位timX的所有寄存器,也就是将外设 TIMx 寄存器重设为缺省值
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-5-18
在线时间
16 小时
发表于 2019-7-20 20:24:39 | 显示全部楼层
反初始化
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2019-6-12
在线时间
28 小时
发表于 2019-9-20 13:58:29 | 显示全部楼层
我遇到类似问题   项目中因会涉及到参数中途更新,而每更新一次就需要重新进行一次初始化。网上看别人讲“多次初始化时候一定要注意在初始化之前先反初始化,否则可能导致初始化不成功”。我就在重新初始化之前调用了这个反初始化函数 ——HAL_TIM_Base_MspDeInit(&htim8);  ,结果发现程序异常。如果去掉这个反初始化函数,程序就正常了。   很困惑,这个反初始化到底什么时候用呢?怎么用呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 01:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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