1、 下载最新的固态库,或者库函数,当前使用的版本是V3.5的。
2、 在工程目录下穿件KEIL文件夹,建立空工程,选择不使用启动代码,单击菜单按键“Target Options”在Output和Listing状态下,选择生成目录,创建Obj,List文件夹存储生成文件。选择“Create HEX File”,并在Debug状态下选择相应的调试工具,点击setting按钮,弹出对话框,选中“Reset and Run”,选择相应的Flash Download 当前为128K 3、ROM容量为16~32K就是LD,64K~128K的就是MD,256~512K的就是HD 4、 创建完成后,更改group相应名称,添加相应的group,如CMSIS、StartUp和StdPeriph_Driver等。 5、 在group中添加程序,程序添加如图所示。 6、 
7、 添加程序完成后发现,编译可能不通过,有以下几个问题: 1、 出现.type文件,用#include "stm32f10x_adc.h"等替换“…type.h” 2、 出现S32等重定义的现象,可以上网查出原因 3、 将“stm32f10x.h”中68行“#define STM32F10X_MD”取消屏蔽 4、 将“stm32f10x.h”中105行“#define USE_STDPERIPH_DRIVER”取消屏蔽 5、 单击菜单按键“Target Options”,在C/C++状态下,添加相应的路径; 6、打开system_stm32f10x.c,将#define SYSCLK_FREQ_72MHz 72000000的屏蔽取消 更改外部晶振的波特率,由8M变为12M由于STM32F10x库官方采用的是默认的外接8MHz晶振,因此造成很多用户也采用了8MHz的晶振,但是,8MHz的晶振不是必须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行。
在论坛上看到很多用户反映,使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用4—16MHz之内任何频点的晶振,我们以STM32F10x_StdPeriph_Lib_V3.4.0为例说明。
第一步,打开stm32f10x.h,将
#defineHSE_VALUE ((uint32_t)8000000)
修改为:
#defineHSE_VALUE ((uint32_t)12000000)
第二步,打开system_stm32f10x.c,修改PLL参数,将
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC |RCC_CFGR_PLLXTPRE |
RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
修改为:
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC |RCC_CFGR_PLLXTPRE |
RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);
个人认为:需要将使用总线速率的屏蔽去掉,不能将这句话的屏蔽去掉,否则就不能执行接口SetSysClockTo72(),而执行接口SetSysClockToHSE();

至此,原文件已经修改完成,如果你想将主频修改至其他频率,请自行修改。但是,到现在,如果您直接编译调试的话,就会出现上文所说的USART的波特率不正确,Systick走时不准等问题,原因就是我们需要进行第三部的修改,这个修改不是在原文件中,而是在编译环境中。我们已Keil MDK为例说明。
第三步,打开你已经建立的STM32工程,选择Projects-〉Options for target ***,找到Target标签,你会发现,外接的晶振默认还是8MHz,我们将外接的晶振参数修改为12MHz,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道,设置波特率为9600,它也不会跑到14400,设置Systick为1ms中断,它不会1.5ms中断。
|