打印
[应用相关]

发个贴问下大家用着stm32f10x_stdperiph_lib(V3.0.0)咋样???

[复制链接]
6097|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
id001|  楼主 | 2009-5-2 20:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

觉着(用着)怎么样?用着的讲解一下··感激 
沙发
McuPlayer| | 2009-5-2 20:40 | 只看该作者

比2.0有进步

至于ST库的优劣,仁者见仁智者见智

使用特权

评论回复
板凳
id001|  楼主 | 2009-5-2 20:48 | 只看该作者

这个函数NVIC_SetPriority()源码在哪里?

我在3.0.0中怎么没有看到这个函数的源代码呢?以下整个函数在core_m3.h中.

static __INLINE uint32_t SysTick_Config(uint32_t ticks)

  if (ticks > SYSTICK_MAXCOUNT)  return (1);                                                /* Reload value impossible */

  SysTick->LOAD  =  (ticks & SYSTICK_MAXCOUNT) - 1;                                         /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);                               /* set Priority for Cortex-M0 System Interrupts */
  SysTick->VAL   =  (0x00);                                                                 /* Load the SysTick Counter Value */
  SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | (1<<SYSTICK_ENABLE) | (1<<SYSTICK_TICKINT);    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                                               /* Function successful */
}

使用特权

评论回复
地板
McuPlayer| | 2009-5-2 21:03 | 只看该作者

那你找“NVIC_SetPriorityGrouping”试试看

使用特权

评论回复
5
id001|  楼主 | 2009-5-2 21:06 | 只看该作者

也没找到,找到NVIC_PriorityGroupConfig,在文件misc.c中

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
  /* Check the parameters */
  assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
  
  /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}

使用特权

评论回复
6
McuPlayer| | 2009-5-2 21:12 | 只看该作者

另外很多函数开始使用inline修饰

我觉得这个非常好

inline函数的优势是,形式是函数,实现是宏展开。
为调试带来很多便利,同时具有宏的执行效率。


另外,根据C99的语言规范,inline函数的展开处理并不是强制的,
也就是说,C编译器根据实际情况做是否展开的决定。
比如,当前存储对用户的程序很宽松,则会展开,如果存储很紧张,可能就当成了普通的函数。
这完全取决于编译器的策略。

就像C语言中变量的register修饰符一样,是建议编译器用寄存器存储我们
指定的变量。编译器会在可能的范围内去满足,但如果用户定义的寄存器变
量超多,C编译器会把部分变量当做普通变量,并不会给出错误和警告。


使用特权

评论回复
7
id001|  楼主 | 2009-5-2 21:14 | 只看该作者

这么说吧。

这个固件库为了 一个什么标准,为了所有CORTEX-M3内核的处理器相关的代码都一致,去掉了原来的库中的一些文件····
(如stm32f10x_nvic.c  stm32f10x_systick.c文件)
最不爽的是它去掉了原来Systick相关的一个文件(因为SYSTICK是内核的一部分)。现在在库中的core_m3.h文件中,仅有SysTick_Config()这一个对SysTick操作的一个函数,而其内部的NVIC_SetPriority()的实现却没找到源码,故有以上疑问··

使用特权

评论回复
8
McuPlayer| | 2009-5-2 21:14 | 只看该作者

在3.0的库中CMSISCoreCM3core_cm3.h

在第1039行

你用SI或者UE打开,搜索一下,肯定有
我都看到了,你能看不到。

使用特权

评论回复
9
id001|  楼主 | 2009-5-2 21:21 | 只看该作者

看到了···

 我用IAR ,点右键 : go to definition of NVIC_SetPriority,就跑到
core-m3.c中去了,我在core-m3中找,怪不的找不到。

谢谢McuPlayer

使用特权

评论回复
10
McuPlayer| | 2009-5-2 21:26 | 只看该作者

这叫做browse功能,IAR和Keil都有

编译的时候把“browse information”选中就可以用这个功能了

使用特权

评论回复
11
McuPlayer| | 2009-5-2 21:28 | 只看该作者

不过,ST把inline函数放在h文件中不是个好习惯

使用特权

评论回复
12
id001|  楼主 | 2009-5-2 22:22 | 只看该作者

感谢McuPlayer


使用特权

评论回复
13
lut1lut| | 2009-5-4 10:07 | 只看该作者

新库3.0.0在Cortex内核功能方面的访问改变

关于NVIC的操作,原来旧库(2.0.3及以下)中的<stm32f10x_nvic.c>没有了。NVIC的功能在<core_cm3.h>中定义的。

和以前函数功能相比,如下表:


为了方便使用,保留了原来老库中的五个常用函数,仍然可以继续使用,定义在<misc.c>中,如下:


用户配置应用程序中的中断时,可以使用新的<core_cm2.h>中的新函数;也可以使用<misc.c>中的老函数。


关于SYSTICK的功能,原来的库函数<stm32f10x_systick.c>和其中的函数都没有了。CMSIS只提供了唯一一个函数@ <core_cm3.h>,即:
SysTick_Config(uint32_t ticks);

该函数包含了所有的操作:
1)重装载值的配置,计数器复位值固定为0
2)控制寄存其中:固定使用系统时钟为systick的源;使能中断;使能计数器。
3)SystickIRQ的优先级配置

使用特权

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

本版积分规则

35

主题

107

帖子

0

粉丝