容易搞错的一点
在manage project item中添加FWLIB中的src,在预编译时,c/c++ 的include path中添加的时FWLIB中的inc
建立文件夹Demo_stm32,作为项目根目录
在demo下,建立 OBJ,CORE,STM32F10x_FWLIB,USER,SYSTEM文件夹。
打开并拷贝\8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下的inc,和 src 目录到STM32F10x_FWLIB文件夹下
打开并拷贝\8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的 core_cm3.c 和 core_cm3.h 文件到 CORE
打开并拷贝 \8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 下的startup_stm32f10x_hd.s 文件到 CORE
打开并拷贝 \8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下的 五个文件到USER(main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h,system_stm32f10x.c)
打开并拷贝 \8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 文件夹下三个文件拷贝到USER(stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h)
USER下一共有7个C 文件(除了项目文件)
打开keil5,右键点击target,Manage Project Items
新建groups,USER,CORE,FWLIB,
在USER下,添加 main.c ,stm32f10x_it.c , system_stm32f10x.c
在CORE下添加 core_cm3.c , startup_stm32f10x_hd.s
在FWLIB下添加STM32F10x_FWLIB下的src下的所有文件。
打开魔术棒
在output文件 选择输出的目录为OBJ,然后点选生成hex
在c/c++ Preprocessor Symbols define里添加 STM32F10X_HD,USE_STDPERIPH_DRIVER , 在 include paths 里,添加 ..\CORE ..\USER ..\STM32F10x_FWLIB\inc
在debug ,Use ST-Link Debugger 点击setting,选择一些ST-LINK/V2 让其生成serial号,PORT选择SW,在Flash Download中勾选择 Reset and Run
若出现中文乱码,
在edit中选择configuration,Encoding选择 GB2312
在main函数中,因为是评估头文件,可以替换下如下的代码,用于正点原子的战舰开发板
#include "stm32f10x.h" /************************************************ ALIENTEK 战舰STM32F103开发板实验0 工程模板 注意,这是手册中的新建工程章节使用的main文件 作者:正点原子 @ALIENTEK ************************************************/ void Delay(u32 count) { u32 i=0; for(;i<count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB.5 GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIO GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 while(1) { GPIO_ResetBits(GPIOB,GPIO_Pin_5); GPIO_SetBits(GPIOE,GPIO_Pin_5); Delay(3000000); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_ResetBits(GPIOE,GPIO_Pin_5); Delay(3000000); } }
便于开发,加入几个工具类
拷贝 \4 程序源码\2,标准例程-库函数版本\实验0-1 Template工程模板-新建工程章节使用\SYSTEM 下所有的文件夹,至 SYSTEM下,共三个文件,delay,sys,usart
在Manage Project Items 里添加 SYSTEM groups,然后给SYSTEM添加文件,把这3个文件都添加上
在c/c++ 编译里,添加编译头目录,include path,添加这3个文件头