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

haitao664   2009-5-2 20:31 楼主

觉着(用着)怎么样?用着的讲解一下··感激 

回复评论 (12)

比2.0有进步

                                 至于ST库的优劣,仁者见仁智者见智
点赞  2009-5-2 20:40

这个函数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 */
}
点赞  2009-5-2 20:48

那你找“NVIC_SetPriorityGrouping”试试看

                                  
点赞  2009-5-2 21:03

也没找到,找到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;
}
点赞  2009-5-2 21:06

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

我觉得这个非常好

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


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

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


点赞  2009-5-2 21:12

这么说吧。

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

在3.0的库中CMSISCoreCM3core_cm3.h

在第1039行

你用SI或者UE打开,搜索一下,肯定有
我都看到了,你能看不到。
点赞  2009-5-2 21:14

看到了···

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

谢谢McuPlayer
点赞  2009-5-2 21:21

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

                                 编译的时候把“browse information”选中就可以用这个功能了
点赞  2009-5-2 21:26

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

                                  
点赞  2009-5-2 21:28

感谢McuPlayer


点赞  2009-5-2 22:22

新库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的优先级配置
点赞  2009-5-4 10:07
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复