|
我在官方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 //******************************************************************************* // 函数名称 : void SysTick_Config(void); x* U H4 i. n" m // 功能描述 : 初始化节拍定时器,每隔10ms重装一次,使能节拍定时器中断: [. I, I/ S" T$ h // //9 ~6 o6 \3 N+ Q$ v: } // 输入 : None // 输出 : None // 返回 : None //****************************************************************************** void SysTick_Configuration(SYSTICK_TIMER_S *pstSysTickTimer, u16 uiSysTickTimer)! b. i Z4 u) n+ P: R) Q- c; w { // 时间结构体初始化 ST_MEMZERO(pstSysTickTimer, sizeof(SYSTICK_TIMER_S));( G9 {7 v; E7 x3 {2 B4 r; U' s pstSysTickTimer->uiSysTickTimer = uiSysTickTimer; pstSysTickTimer->us100msTickNum = 1000 / uiSysTickTimer; 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- ? //失能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 //设置SysTick时钟源 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置SysTick重载值+ [$ S, v- R/ F7 i; c- q& Q SysTick_SetReload(900 * pstSysTickTimer->uiSysTickTimer); : }6 [. p% j5 T4 O+ L/ ~ //开SysTick中断 SysTick_ITConfig(ENABLE); //开SysTick定时器 SysTick_CounterCmd(SysTick_Counter_Enable); } 我在基于库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). ..\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 后来查官方资料后发现: SysTick 在标准外设库中移除了SysTick的驱动,因此用户必须调用CMSIS定义的函数。5 Y4 n4 `6 m& q5 f, \: m& q CMSIS只提供了一个SysTick设置的函数,替代了STM32原有SysTick驱动的全部函数。 SysTick_Config(uint32_t ticks); 该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。 下面的例程为使用固件库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); /* SysTick end of count event each 1ms with input clock equal to + ~% u2 K5 o2 n6 Z0 Y @" n% A 72MHz (HCLK) */ SysTick_SetReload(72000); ; ?: U; B* [& E l' B /* Enable SysTick interrupt */ 7 F- @, D. S5 ~! Q SysTick_ITConfig(ENABLE); 下面的例程为使用标准外设库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 defined in “system_stm32f10x.h” and equal to HCLK frequency */ { /* Capture error */ while (1); } |
STM32åºä»¶åº2.03ä¸3.0çæ¬çæ¯è¾ä¸æç.pdf
下载1.17 MB, 下载次数: 110
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版
RE:关于STM32F10x库版本升级(2.0.3升级到3.5.0)
RE:关于STM32F10x库版本升级(2.0.3升级到3.5.0)
请问还怎么办?
RE:关于STM32F10x库版本升级(2.0.3升级到3.5.0)
回复:关于STM32F10x库版本升级(2.0.3升级到3.5.0)
现在已完成了库升级,多谢楼上那位!