打印

究根问底:为何STM32在3.x的库中把NVIC_DeInit删除?

[复制链接]
8174|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sedatefire|  楼主 | 2012-7-20 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为何呢,st方面库的维护工程师是如何考虑的呢?
难道这个函数没人用吗,还是给维护带来困扰啊
虽然自己也可以实现,但总觉得心里一个疙瘩,难受
库一升级,就多了这些编译错误,ST方面有必要反省一下

缘起:
我做了一个引导程序进行应用程序更新
从应用程序跳过去后,需要关闭并且复位所有的中断
__disable_irq()并不适合

求解:.....
沙发
sedatefire|  楼主 | 2012-7-20 16:54 | 只看该作者
请教一下大家

原来在2.X库中有 NVIC_DeInit() 函数,我在3.X库中没有找到

我看2.X库中的源程序是这样实现的:
void NVIC_DeInit(void)
{
  u32 index = 0;
  
  NVIC->Disable[0] = 0xFFFFFFFF;
  NVIC->Disable[1] = 0x000007FF;
  NVIC->Clear[0] = 0xFFFFFFFF;
  NVIC->Clear[1] = 0x000007FF;
  
  for(index = 0; index < 0x0B; index++)
  {
     NVIC->Priority[index] = 0x00000000;
  }
}

3.X库的core_cm3.h中,NVIC_Type结构体和2.X库中的不太一样,我对比着看,这样可以实现吗?
<font color="#2B91AF">void NVIC_DeInit(void)
{
  u32 index = 0;
  
  NVIC->ICER[0] = 0xFFFFFFFF;
  NVIC->ICER[1] = 0x000007FF;
  NVIC->ICPR[0] = 0xFFFFFFFF;
  NVIC->ICPR[1] = 0x000007FF;
  
  for(index = 0; index < 0x0B; index++)
  {
     NVIC->IP[index] = 0x00000000<font color="#000000">;
  }
}

使用特权

评论回复
板凳
sedatefire|  楼主 | 2012-7-20 16:54 | 只看该作者

使用特权

评论回复
地板
李富贵| | 2012-7-20 20:52 | 只看该作者
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。

使用特权

评论回复
5
niba| | 2012-7-20 21:10 | 只看该作者
楼上说的有道理,ARM公司已经做了,ST就省这点事情了

使用特权

评论回复
6
sedatefire|  楼主 | 2012-7-20 22:02 | 只看该作者
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。
李富贵 发表于 2012-7-20 20:52

cmsis只看到开关总中断而已,一旦开了总中断,原先的那些中断还是照样开着的

使用特权

评论回复
7
研发之声| | 2012-7-20 22:07 | 只看该作者
这的确是个问题

使用特权

评论回复
8
sedatefire|  楼主 | 2012-7-21 19:28 | 只看该作者
顶起

使用特权

评论回复
9
xsgy123| | 2012-7-21 22:29 | 只看该作者
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。
李富贵 发表于 2012-7-20 20:52

分析的有些道理

使用特权

评论回复
10
秋天落叶| | 2012-7-21 22:36 | 只看该作者
我也不太理解为什么要把NVIC_DeInit删除

使用特权

评论回复
11
dfsa| | 2012-7-21 22:49 | 只看该作者
好多事情是不需要纠根问底的,需要抓住重点

使用特权

评论回复
12
sedatefire|  楼主 | 2012-7-23 15:16 | 只看该作者
好吧,如何用cmsis的库,来完整实现NVIC_DeInit的功能,谁能回答,即刻结贴给分

使用特权

评论回复
13
sedatefire|  楼主 | 2012-7-24 17:51 | 只看该作者
好吧,如何用cmsis的库来完整实现NVIC_DeInit的功能,谁能回答,即刻结贴给分
sedatefire 发表于 2012-7-23 15:16

自己顶

使用特权

评论回复
14
研发之声| | 2012-7-26 14:53 | 只看该作者
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。
李富贵 发表于 2012-7-20 20:52

+1

使用特权

评论回复
15
sedatefire|  楼主 | 2012-7-27 10:35 | 只看该作者
好吧,既然删了,那自有他的道理,自己适应吧

使用特权

评论回复
16
cool_coder| | 2013-9-6 21:44 | 只看该作者
李富贵 发表于 2012-7-20 20:52
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。 ...

也不完全是这样, MISC里面还是有几个NVIC_XXX()函数

使用特权

评论回复
17
hawksabre| | 2013-9-7 09:57 | 只看该作者
学习帖子   确实不错   好好看看   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4393

主题

5935

帖子

33

粉丝