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

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

[复制链接]
gehaiyangtai 发布时间:2013-8-9 11:45
我在官方AN2953《如何从STM32F10xxx固件库V2.0.3升级为STM32F10xxx标准外设库V3.0.0》的库升级方案中,按照自动脚本升级步骤走了一遍之后,经过编译改错之后,发现仍有一个问题不好解决。细节如下:
  Q' Y# i% E' h9 }: \# z8 [  这是我想实现的功能:(该函数是基于库版本2.0.31 R' d" E1 l; Q5 c
//*******************************************************************************
/ b0 a5 \  }' _! p0 D" }/ L: {3 X( T// 函数名称    : void SysTick_Config(void)
" l8 D7 G. b! i# \& j! J9 P" z5 g// 功能描述    : 初始化节拍定时器,每隔10ms重装一次,使能节拍定时器中断
9 t8 S2 D" s* `9 x* L//               
# K' T5 ]6 o3 \, l5 q0 C1 ]//% K) h2 W  |! h
// 输入        : None
9 z5 d: w* w1 U4 ^* A// 输出        : None
& E, ~6 K" n# |2 o9 T  H/ k// 返回        : None
' B% Y* i- F0 d( G0 w//******************************************************************************
& K' N' d! T5 i+ Q8 i: Dvoid SysTick_Configuration(SYSTICK_TIMER_S *pstSysTickTimer, u16 uiSysTickTimer)
: b% S0 N4 j: T7 H0 U& a{
; C& I% A  n  W5 W5 i    // 时间结构体初始化
9 O- j  a5 U/ J) ]; ]    ST_MEMZERO(pstSysTickTimer, sizeof(SYSTICK_TIMER_S));% d0 l) Q7 K+ {: |5 P& @
    pstSysTickTimer->uiSysTickTimer = uiSysTickTimer;
0 q  i! B" W9 K+ Z4 L6 s" N    pstSysTickTimer->us100msTickNum = 1000 / uiSysTickTimer;
" ?; C; v* q6 n5 H4 @    pstSysTickTimer->us200msTickNum = 2000 / uiSysTickTimer;5 [/ a$ c/ ]4 |. I+ f7 b
    pstSysTickTimer->us500msTickNum = 5000 / uiSysTickTimer;$ l9 _% _0 O( ^. c4 C
    pstSysTickTimer->us1000msTickNum = 10000 / uiSysTickTimer;
( r9 F8 ~2 @- ], N+ X; _* Y( h& W# V   
; G0 z, m4 }6 p3 z; ~$ [1 _/ `    //失能SysTick定时器& K# _. @' X  _
    SysTick_CounterCmd(SysTick_Counter_Disable);$ S( U; x: g3 T4 M; z5 u
 
( G4 ?1 A  ~7 K( N* R' C    //失能SysTick中断
; y# d, g- X0 M* l/ b    SysTick_ITConfig(DISABLE);3 y, |+ r3 ~( R2 {& H2 j, \
 
3 F0 q8 M- ~: K' s    //设置SysTick时钟源
+ K+ O$ F% a- m' @    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
7 g% h2 p+ z$ v 
/ f: w% _7 \6 e9 }! X& C7 p* g    //设置SysTick重载值
; ?: w, S+ b8 q3 B/ Z" ?5 p    SysTick_SetReload(900 * pstSysTickTimer->uiSysTickTimer);# _" f& U" C" Y% Y7 n& I- |2 {
 
- w7 A: ^/ O4 |' e9 l* T    //SysTick中断, Z8 R6 Z8 d) D' d4 h
    SysTick_ITConfig(ENABLE);+ A3 E3 v0 v+ W4 n" |$ J0 n8 A% d
    % N0 n* ]' c( [$ I4 k+ H
    //SysTick定时器
: c( n9 G# N! Q2 H  x6 h8 e    SysTick_CounterCmd(SysTick_Counter_Enable);       
* n5 v2 ^: p6 V. T                                                                           * r$ R3 T0 k  m, j( P
}4 Z/ k5 F$ s" I% R5 [
我在基于库V3.5.0的工程模板中把APP里面的应用程序复制,并修改stm32f10x_conf.h头文件,编译后提示错误:
% y+ i' O. Y1 u, X% x..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_CounterCmd (referred from st_cor_hw_conf.o).6 D+ Y( Y" l7 H5 I# u. d
..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_ITConfig (referred from st_cor_hw_conf.o).
4 d: Q0 d" ~, n: r7 d" W+ T..\Output\Template.axf: Error: L6218E: Undefined symbol SysTick_SetReload (referred from st_cor_hw_conf.o).
1 z* R& K) O- P9 e! [" N! f..\Output\Template.axf: Not enough information to list image symbols.: ]$ o! w7 A' u- k2 r% [
..\Output\Template.axf: Finished: 1 information, 0 warning and 3 error messages.
, ?- p& i& E! I& f# STarget not created
' W2 N+ T6 P/ R1 G8 E, j. x2 z1 l 3 t& `7 |1 K( J6 x
 
: q6 I" {+ ]8 D后来查官方资料后发现:6 V0 ]6 I# i; j) S( z; \, c: y" m
 ( l$ j  a* Y- _
SysTick
" Z2 t8 L% n' ~  j/ ~$ V/ W5 k& M在标准外设库中移除了SysTick的驱动,因此用户必须调用CMSIS定义的函数。
. y9 @* r* `9 i$ ~0 [5 |- fCMSIS只提供了一个SysTick设置的函数,替代了STM32原有SysTick驱动的全部函数。6 W4 q& [+ [$ b5 N6 p4 W  v. F5 F
SysTick_Config(uint32_t ticks);
6 F4 {6 O, G0 C& U4 W该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。
3 o4 F; p0 n- s1 |下面的例程为使用固件库V2.0.3进行SysTick设置: ! z  U6 i2 l+ q5 u
/* Select the HCLK Clock as SysTick clock source (72MHz) */
( ^+ Q% O3 ]8 n+ pSysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
( ?; y4 A% O3 F7 l8 {' K+ n+ P/* SysTick end of count event each 1ms with input clock equal to 7 I! |, ?3 k: v( F0 [0 a6 v# j; Z
72MHz (HCLK) */
2 J7 J7 |* k! k( j0 e5 x0 D5 i  USysTick_SetReload(72000); 0 G7 L) B4 f+ A  _
/* Enable SysTick interrupt */ / V( G% E0 Y) v
SysTick_ITConfig(ENABLE);
8 }( K: r7 s+ w& V' c* r9 r5 X下面的例程为使用标准外设库V3.0.0进行SysTick设置: , y( l5 B* |% _5 k5 ]6 K# D
/* Setup SysTick Timer for 1 msec interrupts */
* |4 {3 j; t$ Gif (SysTick_Config(SystemFrequency / 1000)) /* SystemFrequency is
7 \& r7 {5 b9 Odefined in system_stm32f10x.h and equal to HCLK frequency */ 0 W. e( t) Q, E( J" m
              {
1 g5 n  Q) g* {4 G/* Capture error */ % b7 n- J3 x6 k# J6 i
while (1);
  a- a4 u% x; [$ M: J}

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);
, G# J( D& E3 W- T请问还怎么办?
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 等库函数。
1 a0 U/ S! |+ z6 _现在已完成了库升级,多谢楼上那位!

所属标签

相似分享

官网相关资源

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