1.ST 官方IAP是什么针对什么芯片型号的,我们要用的又是什么芯片型号; 2.我们要用官方IAP适合我们芯片的程序升级使用,要在原有的基础上做那些改变; 初略看了一下IAP源码后,现在我们可以回答一下上面的2个问题了: 1.官网刚下载的IAP针对的是stm32f103c8芯片的,所以他的启动代码文件选择的是 startup_stm32f10x_md.s,而我的芯片是stm32f100cb,所以我的启动代码文件选择的是 startup_stm32f10x_md_lv.s 2 .第二个问题就是今天我们要做详细分析才能回答的问题了; (1).知道了IAP官方源码的芯片和我们要用芯片的差异,首先我们要在源码的基础上做芯片级的改动; A.首先改变编译器keil的芯片型号上我们要改成我们的芯片类型---STM32F100CB; B.在keil的options for targer 选项C/C++/PREPROMCESSOR symbols的Define栏里定义,把有关STM32F10X_MD的宏定义改成:STM32F10X_MD_VL 也可以在STM32F10X.H里用宏定义
- #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
- #define STM32F10X_MD_VL
- #endif
上面代码说的是如果没有定义 STM32F10X_MD_VL, 则宏定义 STM32F10X_MD_VL C.外部时钟问价在stm32f10x.h 依据实际修改,原文是 说如果没有宏定义外部时钟HES_VALUE的值,但是宏定义了stm32f10x_cl 则外部时钟设置为25MHZ, 否则外部时钟都设置为8MHZ; 我用的外部晶振是8MHZ的所以不必修改这部分代码; - #if !defined HSE_VALUE
- #ifdef STM32F10X_CL
- #define HSE_VALUE ((uint32_t)25000000) // Value of the External oscillator in Hz #else#define HSE_VALUE ((uint32_t)8000000) //Value of the External oscillator in Hz #endif #endif
D.做系统主频时钟的更改 system_stm32f10x.c的系统主频率,依实际情况修改 ;我用的芯片主频时钟是24MHZ;
- #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
- #define SYSCLK_FREQ_24MHz 24000000
- #else
- #define SYSCLK_FREQ_24MHz 24000000
- #endif
|