准备资料:
登陆意法半导体论坛 http://www.stmcu.org/download/index.php?act=ziliao&id=147#544,
下载STM32F10x_StdPeriph_Lib_V3.5.0固件库。如下图:
下载后解压,可以看到如下目录:
开始搭建:
1、 在桌面创建一个文件夹,命名为STM32_TEST(此名字可随意命名),然后分别创建子文件夹USER、CORE和STM32F10x_StdPeriph_Driver分 别用来存放用户文件、启动文件和固件库。如下图:
2、 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport路径下的两个文件core_cm3.c 和core_cm3.h拷贝到CORE文件夹下,
并将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm路径下的所有文件也拷贝到CORE文件夹中。拷贝后如图所示:
3、 把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver路径下的inc文件夹和src文件夹一起拷贝到上面建立的STM32F10x_StdPeriph_Driver文件夹下,如图:
4、将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h文件复制到USER文件夹下。
同时将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template路径下的stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h文件也拷贝到USER文件夹下。
然后在USER文件夹下创建一个新文件,命名为STM32_TEST.c,并添加如下代码:
int main(void)
{
return 0;
}
如下图:
5、 至此准备工作告一段落,接下来开始建工程。打开MDK,新建工程,在STM32_TEST下新建一个文件夹,命名为Project,此文件夹用来放置工程文件和中间文件。将USER、CORE和STM32F10x_StdPeriph_Driver文件夹里的.c文件添加到工程中,CORE 文件夹中的启动文件(.s)文件只需要添加startup_stm32f10x_md.s即可,因为我用的STM32F103RB,是针对中等容量芯片的MCU。读者可以根据自己的MCU容量选择不同的启动文件。在此注意,如果不需要用到STM32F10x_StdPeriph_Driver里面的那么多功能,可以去掉不必要的文件,节省资源。同时还要记得在下图中添加头文件路径,否则包含头文件时要指定完整路径。
点击OK后,编译,发现一大堆报错,找到第一个报错的条目,如下:
..\USER\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (instm32f10x.h file)"
双击该错误,跳转到stm32f10x.h中:
提示你要选择应用程序使用的STM32F10x目标设备。由于我使用的是中等容量的STM32F103RB,所以在此选STM32F10X_MD。在如图中添加:
再次编译,还是报错,拉到最下面,会看到此行:
STM32_TEST.axf: Error: L6218E: Undefinedsymbol assert_param (referred from misc.o).
这个错误提示说assert_param没定义,出现这个问题的原因是我们刚才工程中包含了固件库(即STM32F10x_StdPeriph_Driver文件夹下的内容),里面的很多.c文件都调用了assert_param。为了解决此问题,可以在工程中的查找assert_param,可以看到其定义体是在stm32f10x_conf.h文件中,如下图:
继续在工程中查找stm32f10x_conf.h,可以看到如下:
则只需要再定义USE_STDPERIPH_DRIVER宏就可以了。定义后如图:
至此,编译通过。如图:
接下来,可以自己写一个测试程序进行测试了。在STM32_TEST.c中输入以下代码,实现LED的闪烁:
#include"stm32f10x.h"
void Delay(int x)
{
int y,z;
for(y = 0;y < x;y++)
for(z = 0;z < 1000;z++);
}
void LedInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PA端口的时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //LED端口配置
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_1); //PA1 输出高
}
int main(void)
{
SystemInit();
LedInit();
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_1); //PA.8 输出高
Delay(1000);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
Delay(1000);
}
}
并勾选Output栏下的Create HEX File选项。
编译即可在STM32_TEST文件夹下生成STM32_TEST.hex文件,烧写进开发板即可。
资源下载地址:http://download.csdn.net/detail/ballack_linux/8028111