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

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

[复制链接]
gehaiyangtai 发布时间:2013-8-9 11:45
我在官方AN2953《如何从STM32F10xxx固件库V2.0.3升级为STM32F10xxx标准外设库V3.0.0》的库升级方案中,按照自动脚本升级步骤走了一遍之后,经过编译改错之后,发现仍有一个问题不好解决。细节如下:* m+ f( D8 Q  _8 M) I/ i
  这是我想实现的功能:(该函数是基于库版本2.0.3)- ^1 _6 W2 L  U  j" K& V
//*******************************************************************************
9 }3 e# A- q2 K9 n9 f0 o, z# Z// 函数名称    : void SysTick_Config(void); x* U  H4 i. n" m
// 功能描述    : 初始化节拍定时器,每隔10ms重装一次,使能节拍定时器中断: [. I, I/ S" T$ h
//               
1 f$ X7 q6 k( `/ i//9 ~6 o6 \3 N+ Q$ v: }
// 输入        : None
1 z) j# k: g/ |& ?& ~// 输出        : None
( a! C& L, e% `0 J0 P4 q1 x. k5 e// 返回        : None
' ~. Y8 I$ h6 m: c, }0 O//******************************************************************************
4 D  K7 ~/ I. ~9 \2 Zvoid SysTick_Configuration(SYSTICK_TIMER_S *pstSysTickTimer, u16 uiSysTickTimer)! b. i  Z4 u) n+ P: R) Q- c; w
{
& m& k7 b$ O7 `    // 时间结构体初始化
% m* d) s. z6 Z+ {5 W    ST_MEMZERO(pstSysTickTimer, sizeof(SYSTICK_TIMER_S));( G9 {7 v; E7 x3 {2 B4 r; U' s
    pstSysTickTimer->uiSysTickTimer = uiSysTickTimer;
2 \4 E, c6 P: L; I6 M    pstSysTickTimer->us100msTickNum = 1000 / uiSysTickTimer;
$ ~: e- C/ T7 N( n    pstSysTickTimer->us200msTickNum = 2000 / uiSysTickTimer;0 }! c9 G! Z! h) Q% d2 Z2 M! }$ e
    pstSysTickTimer->us500msTickNum = 5000 / uiSysTickTimer;) y/ c9 z% \& G# u6 S5 }6 g7 I
    pstSysTickTimer->us1000msTickNum = 10000 / uiSysTickTimer;9 P( T: I- m3 ^4 C, B- ?
   
2 `- D' |$ `% [" l8 H8 P    //失能SysTick定时器4 {4 @8 l' S/ Y& }' X  _/ J# ~+ w7 L
    SysTick_CounterCmd(SysTick_Counter_Disable);$ w7 A/ x* G' r: l$ f
  % c6 q! x; j8 Q& O7 d
    //失能SysTick中断/ j' u! Q# F0 Z5 {# z- A
    SysTick_ITConfig(DISABLE);9 o! |$ q9 J% d6 C! v$ {9 a  K
 
" `, S. J8 M0 t; l2 Q$ p) F    //设置SysTick时钟源
6 A3 t! T8 l6 |    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
5 J+ T" k2 ]1 i8 ?8 h- u2 { 
& V: j3 a) X% Z# t; p4 `; [! J    //设置SysTick重载值+ [$ S, v- R/ F7 i; c- q& Q
    SysTick_SetReload(900 * pstSysTickTimer->uiSysTickTimer);
' t; j: [$ k  M* W; T : }6 [. p% j5 T4 O+ L/ ~
    //开SysTick中断
. z* L# v. ^$ |7 s    SysTick_ITConfig(ENABLE);
2 i! ]0 }) b' T   
/ c4 y" c, G7 x2 S) y- B+ V    //开SysTick定时器
2 W! p1 q* k6 C: J4 `' |1 |+ K9 [    SysTick_CounterCmd(SysTick_Counter_Enable);       
* X. j4 h' u5 Z6 y" Z                                                                           
  n4 x! L1 E# q; P}
8 R! E' `, {% A2 y' [& R- O0 N/ C& d我在基于库V3.5.0的工程模板中把APP里面的应用程序复制,并修改stm32f10x_conf.h头文件,编译后提示错误:* J. C; U& D8 \4 v
..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_CounterCmd (referred from st_cor_hw_conf.o).. U# p& `% A! \" ?
..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_ITConfig (referred from st_cor_hw_conf.o).
- k, e( K. w' s/ L9 N..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_SetReload (referred from st_cor_hw_conf.o).& d7 G& A" n, i# r; x
..\Output\Template.axf: Not enough information to list image symbols.* h. Z# V7 w4 {9 l8 x+ d3 u% Z: T7 R
..\Output\Template.axf: Finished: 1 information, 0 warning and 3 error messages.. x3 `7 `% v: x( k2 o* e* w) p3 }2 i
Target not created
  h9 w/ U5 q8 {& s 
5 H5 \# O, ]4 P 
2 ~& f  i2 Y  I  ?后来查官方资料后发现:
0 |  T, A7 }% N$ c- y- K& M 
, P! l4 b" U+ m- `. B% H# BSysTick
, H- C3 b0 T# L+ l在标准外设库中移除了SysTick的驱动,因此用户必须调用CMSIS定义的函数。5 Y4 n4 `6 m& q5 f, \: m& q
CMSIS只提供了一个SysTick设置的函数,替代了STM32原有SysTick驱动的全部函数。
, U- C0 Q- u& J/ M) E* GSysTick_Config(uint32_t ticks);
; y- C1 w( D2 m2 v8 s0 e该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。
: ?5 B$ S# c( G- R# T下面的例程为使用固件库V2.0.3进行SysTick设置: * {9 x: ^& ^6 q  p. ^
/* Select the HCLK Clock as SysTick clock source (72MHz) */ / y4 H4 ?. X/ H/ e
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
' u7 E& g. t+ x) p" O, Q/* SysTick end of count event each 1ms with input clock equal to + ~% u2 K5 o2 n6 Z0 Y  @" n% A
72MHz (HCLK) */
* k! i; }7 Z: v$ J. y( tSysTick_SetReload(72000); ; ?: U; B* [& E  l' B
/* Enable SysTick interrupt */ 7 F- @, D. S5 ~! Q
SysTick_ITConfig(ENABLE);
% \" B2 ^7 G# I+ f) d! K下面的例程为使用标准外设库V3.0.0进行SysTick设置: 4 R7 c6 @7 Z) h0 ^$ B' l
/* Setup SysTick Timer for 1 msec interrupts */ " C. h4 ?" `# J* W3 N
if (SysTick_Config(SystemFrequency / 1000)) /* SystemFrequency is
  x# W% @1 ^/ N3 a, x1 ldefined in “system_stm32f10x.h” and equal to HCLK frequency */
: f- {3 a' m+ |+ w              {
1 y# K/ Z: ^8 A3 N! J8 ?- R) x/* Capture error */
- E  Z7 @% _% F' `while (1);
9 h6 H& k2 C8 K& _5 t}

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);
4 @" R3 L( W: v3 S4 D& ]1 p1 h请问还怎么办?
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 等库函数。
* P/ {! M) G) A+ k9 s+ z  P现在已完成了库升级,多谢楼上那位!

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版