手把手教你在STM32下搭建属于自己的第一个应用程序

 准备资料:

      登陆意法半导体论坛  http://www.stmcu.org/download/index.php?act=ziliao&id=147#544,

      下载STM32F10x_StdPeriph_Lib_V3.5.0固件库。如下图:

     

     下载后解压,可以看到如下目录:

         手把手教你在STM32下搭建属于自己的第一个应用程序_第1张图片

开始搭建:

1、 在桌面创建一个文件夹,命名为STM32_TEST(此名字可随意命名),然后分别创建子文件夹USER、CORE和STM32F10x_StdPeriph_Driver分   别用来存放用户文件、启动文件和固件库。如下图:

           手把手教你在STM32下搭建属于自己的第一个应用程序_第2张图片

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文件夹中。拷贝后如图所示:

           手把手教你在STM32下搭建属于自己的第一个应用程序_第3张图片

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;

}

    如下图:

       手把手教你在STM32下搭建属于自己的第一个应用程序_第4张图片

5、 至此准备工作告一段落,接下来开始建工程。打开MDK,新建工程,在STM32_TEST下新建一个文件夹,命名为Project,此文件夹用来放置工程文件和中间文件。将USER、CORE和STM32F10x_StdPeriph_Driver文件夹里的.c文件添加到工程中,CORE 文件夹中的启动文件(.s)文件只需要添加startup_stm32f10x_md.s即可,因为我用的STM32F103RB,是针对中等容量芯片的MCU。读者可以根据自己的MCU容量选择不同的启动文件。在此注意,如果不需要用到STM32F10x_StdPeriph_Driver里面的那么多功能,可以去掉不必要的文件,节省资源。同时还要记得在下图中添加头文件路径,否则包含头文件时要指定完整路径。  

       手把手教你在STM32下搭建属于自己的第一个应用程序_第5张图片

      点击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下搭建属于自己的第一个应用程序_第6张图片

      再次编译,还是报错,拉到最下面,会看到此行:

      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文件中,如下图:

       手把手教你在STM32下搭建属于自己的第一个应用程序_第7张图片

      继续在工程中查找stm32f10x_conf.h,可以看到如下:

      

      则只需要再定义USE_STDPERIPH_DRIVER宏就可以了。定义后如图:

      手把手教你在STM32下搭建属于自己的第一个应用程序_第8张图片

       至此,编译通过。如图:

       手把手教你在STM32下搭建属于自己的第一个应用程序_第9张图片

       接下来,可以自己写一个测试程序进行测试了。在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下搭建属于自己的第一个应用程序_第10张图片


         编译即可在STM32_TEST文件夹下生成STM32_TEST.hex文件,烧写进开发板即可。

      资源下载地址:http://download.csdn.net/detail/ballack_linux/8028111


你可能感兴趣的:(单片机)