使用STM32库建立keil工程详细步骤.docx
《使用STM32库建立keil工程详细步骤.docx》由会员分享,可在线阅读,更多相关《使用STM32库建立keil工程详细步骤.docx(18页珍藏版)》请在冰豆网上搜索。
使用STM32库建立keil工程详细步骤
STM32使用外设库建立keil工程
新建文件夹取名为自己想要的名称(如GPIO)
1、打开文件,建立如下的文件结构:
2、打开Project,建立如下文件:
3、打开下载来的外设驱动库如下:
4、把Libraries的下的两个文件(CMSIS和STM32F10x_StdPeriph_Driver)拷贝到GPIO文件下:
5、打开下载的驱动库下的Project文件,打开STM32F10x_StdPeriph_Examples,找到我们需要的例程,如GPIO
6、打开GPIO文件夹
7、打开IOToggle,复制除了readerme.txt之外的文件到工程下的User文件。
复制好之后:
8、到此,准备工作完毕。
9、打开KEIL,新建工程
10、保存在Project文件夹下面,取名为自己的名字,我取名为GPIO。
11、选定自己使用的芯片,点击ok。
12、此时会跳出这个对框框,选择否:
13、工程建好后是这样的。
14、在工程上右键选择MangeComponts如下:
15、建立如下组
16、在User下面添加刚才方法哦User下的C文件:
点击Add
17、增加StdPeriph_Driver的文件,在自己工程StdPeriph_Driver下面的下面的src文件如下:
(说明:
只需要增加自己需要的,我这里全部添加了)
18、在CMSIS下增加文件:
CMSIS文件下的CM3的CoreSupport的文件
19、在StartUp下面增加位于
下的文件
20、选择自己芯片对应的文件。
我用的是第二种startup_stm32f10x_hd.s
21、增加完文件后工程如下
现在左键点击选中GPIO工程名,在点击右键选择OptionsforTarget‘GPIO’来配置工程
22、在output页面下点击
SelectFolderObjects…,选择我们在Project目录下的Obj文件
23、勾选长生hex文件。
24、在Listing页面下点击
SelectFolderObjectsforlistings…,选择我们在project目录下的List文件
在C/C++页面下配置,这是预编译的定义;
Define中写入USE_STDPERIPH_DRIVER,STM32F10X_HD
其中第一个“USE_STDPERIPH_DRIVER”定义了使用外设库,定义此项会包含*_conf.h文件,从而使用外设库;而第二个“STM32F10X_HD”从字面理解应该是定义了大等容量的STM32MCU,STM32F10X_MD则为中等容量等。
25、现在设置Includepaths:
设置如下的头文件路径:
点击ok
.分别为:
.\User
..\CMSIS\CM3\CoreSupport
..\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\STM32F10x_StdPeriph_Driver\inc
26、设置完毕,确定ok,ok,结束。
27、由于使用的是都是拷贝的东西,在main.c下面我们有些东西没有用到。
需要做一定的修该,改成你自己需要的例程就可以了。
我的文件修改如下
/**
******************************************************************************
*@fileGPIO/IOToggle/main.c
*@authorMCDApplicationTeam
*@versionV3.4.0
*@date10/15/2010
*@briefMainprogrambody.
******************************************************************************
*@copy
*
*THEPRESENTFIRMWAREWHICHISFORGUIDANCEONLYAIMSATPROVIDINGCUSTOMERS
*WITHCODINGINFORMATIONREGARDINGTHEIRPRODUCTSINORDERFORTHEMTOSAVE
*TIME.ASARESULT,STMICROELECTRONICSSHALLNOTBEHELDLIABLEFORANY
*DIRECT,INDIRECTORCONSEQUENTIALDAMAGESWITHRESPECTTOANYCLAIMSARISING
*FROMTHECONTENTOFSUCHFIRMWAREAND/ORTHEUSEMADEBYCUSTOMERSOFTHE
*CODINGINFORMATIONCONTAINEDHEREININCONNECTIONWITHTHEIRPRODUCTS.
*
*
©COPYRIGHT2010STMicroelectronics
*/
/*Includes------------------------------------------------------------------*/
#include"stm32f10x.h"
/**@addtogroupSTM32F10x_StdPeriph_Examples
*@{
*/
/**@addtogroupGPIO_IOToggle
*@{
*/
/*Privatetypedef-----------------------------------------------------------*/
/*Privatedefine------------------------------------------------------------*/
/*Privatemacro-------------------------------------------------------------*/
/*Privatevariables---------------------------------------------------------*/
GPIO_InitTypeDefGPIO_InitStructure;
/*Privatefunctionprototypes-----------------------------------------------*/
voidDelay(__IOuint32_tnCount);
/*Privatefunctions---------------------------------------------------------*/
/**
*@briefMainprogram.
*@paramNone
*@retvalNone
*/
intmain(void)
{
/*!
thisisdonethroughSystemInit()functionwhichiscalledfromstartup
file(startup_stm32f10x_xx.s)beforetobranchtoapplicationmain.
ToreconfigurethedefaultsettingofSystemInit()function,referto
system_stm32f10x.cfile
*/
/*ConfigureallunusedGPIOportpinsinAnalogInputmode(floatinginput
triggerOFF),thiswillreducethepowerconsumptionandincreasethedevice
immunityagainstEMI/EMC*************************************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|
RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_Init(GPIOE,&GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|
RCC_APB2Periph_GPIOE,DISABLE);
while
(1)
{
/*Insertdelay*/
Delay(0xAFFFF);
}
}
/**
*@briefInsertsadelaytime.
*@paramnCount:
specifiesthedelaytimelength.
*@retvalNone
*/
voidDelay(__IOuint32_tnCount)
{
for(;nCount!
=0;nCount--);
}
#ifdefUSE_FULL_ASSERT
/**
*@briefReportsthenameofthesourcefileandthesourcelinenumber
*wheretheassert_paramerrorhasoccurred.
*@paramfile:
pointertothesourcefilename
*@paramline:
assert_paramerrorlinesourcenumber
*@retvalNone
*/
voidassert_failed(uint8_t*file,uint32_tline)
{
/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,
ex:
printf("Wrongparametersvalue:
file%sonline%d\r\n",file,line)*/
/*Infiniteloop*/
while
(1)
{
}
}
#endif
/**
*@}
*/
/**
*@}
*/
/*******************(C)COPYRIGHT2010STMicroelectronics*****ENDOFFILE****/
此时编译,成功。