你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32F10x库版本升级(2.0.3升级到3.5.0)

[复制链接]
gehaiyangtai 发布时间:2013-8-9 11:45
我在官方AN2953《如何从STM32F10xxx固件库V2.0.3升级为STM32F10xxx标准外设库V3.0.0》的库升级方案中,按照自动脚本升级步骤走了一遍之后,经过编译改错之后,发现仍有一个问题不好解决。细节如下:, P, l* P& I( [; M
  这是我想实现的功能:(该函数是基于库版本2.0.3$ r# C, f2 O6 ~- B. k" o1 q
//*******************************************************************************
( B! W9 _. k' V7 Z0 E// 函数名称    : void SysTick_Config(void)% c' R+ V4 w: N. q  `; A2 n
// 功能描述    : 初始化节拍定时器,每隔10ms重装一次,使能节拍定时器中断* }* z( A  `- O' @) R$ }
//                1 q4 Q5 c7 s# i/ T: Q! r* N
//
, v$ i8 y" M/ [# ?& K: D9 U$ k4 Q/ q// 输入        : None
6 h& ~' D( r1 J7 k% p% U// 输出        : None3 D6 R  m. W& `9 g1 r7 L& {3 Y" v
// 返回        : None
* m3 _0 a$ k! z% q7 H4 I4 R//******************************************************************************* y# a9 u% u1 S5 S& O6 Z
void SysTick_Configuration(SYSTICK_TIMER_S *pstSysTickTimer, u16 uiSysTickTimer)
  T- `" w6 l0 i{
2 J3 T/ I) n/ T; e6 J3 O, P    // 时间结构体初始化# B& I3 X5 j4 {& M$ I! u5 V6 a
    ST_MEMZERO(pstSysTickTimer, sizeof(SYSTICK_TIMER_S));* \$ c8 T8 _0 ?3 H& H8 V
    pstSysTickTimer->uiSysTickTimer = uiSysTickTimer;2 O: W5 [  N; z- d& o1 {/ A
    pstSysTickTimer->us100msTickNum = 1000 / uiSysTickTimer;
; R2 b# }& R+ X8 U    pstSysTickTimer->us200msTickNum = 2000 / uiSysTickTimer;! {; n5 E8 y6 ~* U8 q
    pstSysTickTimer->us500msTickNum = 5000 / uiSysTickTimer;! z" y3 D1 j  o  e- A
    pstSysTickTimer->us1000msTickNum = 10000 / uiSysTickTimer;) x7 g6 P! T, X+ |- e
    % P% v7 m0 i: O  W4 e
    //失能SysTick定时器1 x: e7 i2 n0 o' s' t
    SysTick_CounterCmd(SysTick_Counter_Disable);: o, N) K# ~/ M6 l- |
  , H0 F5 U! ~/ V; x1 E, |4 W5 V
    //失能SysTick中断
& z6 C7 K  B7 w' J  {    SysTick_ITConfig(DISABLE);( _$ D: A! G8 C: `, z7 V5 ?
 
3 e, r0 G, K1 S6 C7 F; h    //设置SysTick时钟源  y. z. t, A8 c( P
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
& o  {. |- v& S% |1 P9 K 8 e, l7 Q7 O* G# e
    //设置SysTick重载值" s/ q( i; C* r# |% f# H- A  ~
    SysTick_SetReload(900 * pstSysTickTimer->uiSysTickTimer);
3 z/ S6 o9 S8 m; t& ^ 
! X+ S5 e$ ]1 _& u- `    //SysTick中断
- C3 F  X: i+ j    SysTick_ITConfig(ENABLE);- M+ T3 l& g# a' N  i1 O
   
( n2 M+ g* D: e    //SysTick定时器
- }6 u9 X4 _  t. `& B/ W$ a, }' u    SysTick_CounterCmd(SysTick_Counter_Enable);        ' f, G6 o% Q* C7 W
                                                                           - d1 G* \" `; Q1 w2 \4 ~& Z6 U6 r( S/ u
}
. }8 w" O7 b0 B$ c我在基于库V3.5.0的工程模板中把APP里面的应用程序复制,并修改stm32f10x_conf.h头文件,编译后提示错误:; D+ a+ F/ ?* q  B
..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_CounterCmd (referred from st_cor_hw_conf.o).- }# r, r* q0 S
..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_ITConfig (referred from st_cor_hw_conf.o).
  Y% T7 E, R. v0 F! [; y3 T% g7 [..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_SetReload (referred from st_cor_hw_conf.o).
; |7 _/ D" c7 C..\Output\Template.axf: Not enough information to list image symbols.
% J) f& \3 H. a$ H..\Output\Template.axf: Finished: 1 information, 0 warning and 3 error messages.& R* X7 `; B' l. B0 u9 e
Target not created
4 a. D5 g) J9 A. G& Y( [ $ o5 `+ u5 h, h1 b( u0 u# N
 ' w% }7 N  w* i! a4 _+ s; l3 K1 j
后来查官方资料后发现:/ h; t8 N3 z. G
 & ]4 E' B: {" {/ _1 \! }
SysTick
% X' t- ^' E1 D+ ?在标准外设库中移除了SysTick的驱动,因此用户必须调用CMSIS定义的函数。! R6 F6 i) D; T" {: Q" F8 m4 Z
CMSIS只提供了一个SysTick设置的函数,替代了STM32原有SysTick驱动的全部函数。
5 Z2 ~, A& |$ |' rSysTick_Config(uint32_t ticks);
+ l$ u0 i' ]7 W) {+ k( T- z该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。8 J( u1 C4 B% f9 C6 m
下面的例程为使用固件库V2.0.3进行SysTick设置: # ]; E) \2 N) D% ?5 g" e
/* Select the HCLK Clock as SysTick clock source (72MHz) */ % S8 a" l+ a1 _' ^2 O
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); 9 \: F2 i3 B4 k
/* SysTick end of count event each 1ms with input clock equal to - Z( @0 ~; h7 A5 n
72MHz (HCLK) */
. t, C( y+ c+ [9 kSysTick_SetReload(72000);
3 O9 ]; Q$ U: m% b" I5 j" n/* Enable SysTick interrupt */ ( x' G* ]: o4 E: E; t) h
SysTick_ITConfig(ENABLE); 1 B1 Q: s- x  g. C
下面的例程为使用标准外设库V3.0.0进行SysTick设置:
& ?+ [% Y( a; I/* Setup SysTick Timer for 1 msec interrupts */
2 a/ m4 g$ p6 T: Mif (SysTick_Config(SystemFrequency / 1000)) /* SystemFrequency is
# s2 Y& c7 v2 V& ?% l" ^defined in system_stm32f10x.h and equal to HCLK frequency */ 6 r  u* j7 r4 Z; B9 ]  |
              {* C& e8 h( w6 g/ P( X) L
/* Capture error */ ) W: |/ ~1 d! H8 `, D8 I7 Z' D
while (1);
) W8 I7 c  V9 p}

STM32固件库2.03与3.0版本的比较中文版.pdf

下载

1.17 MB, 下载次数: 110

收藏 评论4 发布时间:2013-8-9 11:45

举报

4个回答
废鱼 回答时间:2013-8-9 15:20:32

RE:关于STM32F10x库版本升级(2.0.3升级到3.5.0)

应该是你用的库没有调用包含SysTick_ITConfig的头文件,你引用上就好了。
gehaiyangtai 回答时间:2013-8-10 09:41:35

RE:关于STM32F10x库版本升级(2.0.3升级到3.5.0)

新库3.5.0 已将stm32f10x_systick.h头文件移除,精简在core_cm3.h文件中,并已经移除SysTick_ITConfig等定义,只提供了一个SysTick设置的函数:SysTick_Config(uint32_t ticks);  B# O: M2 a8 b2 n% w" H) z$ A
请问还怎么办?
zykzyk-93033 回答时间:2013-8-10 10:32:54

RE:关于STM32F10x库版本升级(2.0.3升级到3.5.0)

设置好就可以了吧,可以先看一个历程。
gehaiyangtai 回答时间:2013-8-13 14:56:28

回复:关于STM32F10x库版本升级(2.0.3升级到3.5.0)

多谢了!我现在已经解决这个问题,用SysTick_Config(900 * pstSysTickTimer->uiSysTickTimer); 替代了 SysTick_Configuration()全部的使能设置部分之后就可以了,原因是标准外设库V3.5.0用SysTick_config()替换了诸如SysTick_CounterCmd 、SysTick_ITConfig 、SysTick_SetReload 等库函数。7 K( s0 X# ?5 G- D; h+ L0 {; u
现在已完成了库升级,多谢楼上那位!

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版