STM32准备工作【Keil配置、keil模板建立、ST-Link V2下载配置】

版权声明: https://blog.csdn.net/zeroice7/article/details/59483155

0.STM32编程准备工作

 

名称           :ST-Link V2 连接、Keil配置、文件模板建立 ;

作者           :卤化氢

日期           :2017/2/9

编程环境    :Win10 64位,Keil 5.11,ST外设库版本:3.5.0;

【第一次写博,而且刚刚接触STM32,有不对的地方希望大家指出。】 

下载安装 ST-Link V2 驱动后(没有的话可以找*宝店家直接要);

1.   连接 ST-Link V2 与 STM32

首先你的下载器要是这个样子的:

然后就可以按照下面接口对应设置:

  

如图对应连接引脚(连接任一同名称引脚即可):

ST-Link V2

STM32

5V

TVCC

GND

GND

SWDIO/SWIO

SWIO

SWCLK

SWCLK

2.   准备工作需要安装ARM.CMSIS.与 Keil.STM32F1xx_DFP

这两个文件是用于Keil 5中开发STM32用的,CMSIS是一种接口标准(这个是必须要装的) Keil.STM32F1xx_DFP是keil5固件库包,用于STM32的开发文件。

(文件辛苦大家自己找一下,怕被和谐掉。)

3.   建立工程文件模板(Demo文件)

以后建立工程文件直接复制Demo文件的模板,在模板上编辑项目,不需要反复配置。

首先新建一个文件夹,命名为“Demo”。

             

再需要在ST官网上下载 “STM32F10x_StdPeriph_Lib” 文件:

(进入ST官网:http://www.st.com/content/st_com/en.html

1:如图【Products】 -> 【Microcontroller】 -> 【Tool&Software】 ->

STM32Standard Peripheral Libraries】-> 选择合适的下载 此处为STM32F10X系列

下载下来的“STM32F10x_StdPeriph_Lib_V3.5.0”解压后,我们把“Libraries复制到“Demo文件夹中。再在“Demo文件夹中建立四个空文件夹待用,命名如下图:

将刚解压文件夹“STM32F10x_StdPeriph_Lib中【Project】 -> 【Template】的Main.c、stm32f10x_it.c 、stm32f10x_cong.h、stm32f10x_it.c、stm32f10xit.h、五个文件复制到“User”文件夹下。

“User文件夹用于存放用户自定义子程序;

“Project文件夹用于存放建立工程时的相关文件;

“Obj文件用于存放编译时产生的对象文件;

“List用于存放编译时产生的List文件和Map文件;

“Libraries为库函数文件。

4.   建立工程

1:建立新工程

打开Keil 5,选择【Project】 -> 【New μVision Project】

建立工程,保存在【Demo】文件的【Project】下,然后选择CPU型号,UP主的是F103RC。

若询问是否自动复制MDK自带的启动代码,选择否即可。

 

2:进行选项设置

调出【ManageProject Items】,

弹出【ManageProject Items】窗口,对其进行编辑。

改 “ProjectTagets“ 为 “STM32F103RCT6 Flash”,并添加四个分组,分别为UserLibCMSISStartup,如下图所示:

3:在“User“中添加用户的相应文件

在“Group”中选中“User”,并在“User”中添加一些用户文件。

在“Files”中单机“Add Files”,选择路径找到前面“Demo”文件夹中的“User”,

添加其中的“main.c”与“stm32f10x.c”,如下图所示。

 

4:在“Lib”中添加库文件

选中“Lib“添加库文件,找到文件路径:【Demo】 -> 【Libraries】 -> 【STM32F10x_StdPeriph_Driver】 -> 【src】在其中依次添加需要的调用库文件,若初学者不熟悉哪些库文件可以全部添加。

5:在CMSIS添加STM32F的内核相关文件

选中“CMSIS“添加STM32F的内核相关文件,

按路径 【Libraries】 -> 【CMSIS】 ->【CM3】 -> 【CoreSupport】文件下添加”cpre_cm3.c“;

按路径 【Libraries】 -> 【CMSIS】 ->【CM3】 -> 【DeviceSupport】 -> 【ST】 -> 【STM32F10x】文件下添加”system_stm32f10x.c”。

添加后如图所示:

6:添加启动文件

单机“Startup“添加启动文件,按路径【Libraries】 -> 【CMSIS】 -> 【CM3】 -> 【DeviceSupport】 -> 【ST】 -> 【STM32F10x】 -> 【startup】-> 【arm】

由于STM32F103RCT6属于大容量的Flash(256KB),所以在此添加文件“startup_stm32f10x_hd.s

若Flash为中容量(128KB或64KB)则添加“startup_stm32f10x_md.s

添加后启动文件夹后的界面如下。

 

7:设置好Components的界面

点击OK按钮,即可发现在Project中多出一些文件目录:

点击“编译“按钮,出错了的话暂且不用管它。

   

5.   进行工程的相关设置

1:Target选项设置

点击工程设置按钮【Options for Target】,

出现设置界面

2:产生HEX文件

点击【Output】选项卡,按下图生成HEX文件

         

3:选中目标文件(Obj)输出文件夹路径

按下图,选中目标文件(Obj)输出文件夹路径。

4:选择列表输出的文件夹路径

选择列表文件座位输出文件路径。

 

5:C/C++选项卡设置

选中C/C++选项卡,在Define文本框中输入”USE_STDPERIPH_DRIVER,STM32F10X_HD”,如图:

“USE_STDPERIPH_DRIVE“定义使用外设库,定义此项会包含 *_conf.h 文件,从而使用外设库。

“STM32F10X_HD“对应启动文件startup_stm32f10x_hd.s,即大容量的Flash。

6:添加*.h文件路径

添加所有要用到的 *.h 头文件路径,否则会出现找不到头文件的错误报警,如图。

7:添加路径【Libraries】 -> ……

添加路径 【Libraries】 -> 【STM32F10x_StdPeriph_Driver】 -> 【inc】

添加路径 【Libraries】 -> 【CMSIS】 -> 【CM3】

添加后的路径如图所示,点击OK即可:

这样一个工程的模板就做好了,

6.   建立一个成功编译的文件

将“Demo”文件复制出来,改名为“LedText”并把以下代码替换main.c的代码

(以后建立新工程时均将模板文件的“Main.c”文件内容替换即可)

#include "stm32f10x.h"                        

#include "stm32f10x_conf.h"   

void delay_us ( unsigned int us )

{

  unsigned char n;

  while( us-- )

         for( n=0;n<9; n++ );

}

void delay_ms ( unsigned int ms )

{

  while( ms-- )

         delay_us(1000);

}

void GPIO_Configuration( void )

{

  GPIO_InitType DefGPIO_InitStructure; 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );

  GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1|GPIO_Pin_2;            

  GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;                   

  GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;    

  GPIO_Init( GPIOA,&GPIO_InitStructure );

  GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1;                             

  GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;     

  GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;    

  GPIO_Init(GPIOB,&GPIO_InitStructure);

}

int main( void )

{

  /*System ClocksConfiguration **************************************/

  SystemInit();                              

  GPIO_Configuration();          

  for( ;; )

  {

         GPIO_SetBits(GPIOA,GPIO_Pin_1);              //PA1 = 1

         GPIO_SetBits(GPIOA,GPIO_Pin_2);              //PA2 = 1

         GPIO_SetBits(GPIOB,GPIO_Pin_1);              //PB1 = 1

         delay_ms(1);                                                                                      

         GPIO_ResetBits(GPIOA,GPIO_Pin_1);           //PA1 = 0

         GPIO_ResetBits(GPIOA,GPIO_Pin_2);           //PA2 = 0

         GPIO_ResetBits(GPIOB,GPIO_Pin_1);           //PB1 = 0

         delay_ms(1);                                                                                      

  }     

}

结果编译成功,但注意,程序中会出现一个警告提示,虽然警告不会对程序编译有影响,但警告是程序中的潜在错误,有警告错误的时候要尽可能地解决掉。

如图我们看到下面的对话框,会提示出“#1-D: last line of file ends withouta newline “

这句话会提示出在main函数后的括号需要加入空行,解决方法即在main函数的结尾括号“ }“后面加入空行即可。

建立工程时还需要注意,每在“Lib”中添加一个 “*.c”文件,就需要在“stm32f10x_conf.h”中使能相应的“*.h”文件,这里3.5版本的库已经省略了这一步,需要注意的是要在文件一开始包含”stm32f10x_conf.h”文件。

7.   用ST-Link V2下载文件

点击进入【Option for Target】设置

如图进行“步骤4”后,进入“Setting”设置,如下:

下载时,UP主出现了这样的问题,如下图所示:

 

出现这样的问题是因为UP使用的Keil版本是5.11,这里在使用ST-Link V2下载时有一个Bug,Keil也给出了官方的解决方法(http://www.keil.com/support/docs/3662.htm),解决方法如下:

进入keil的安装目录 【ARM】 -> 【ST-LINK】 打开“ST-LinkUpgrade.exe“会出现ST-LINK的升级工具,

升级过后问题就解决了(如果提示无法与硬件连接,重新插拔ST-LINK)。

出现如下图红框中显示的内容时,即说明连接正常,可以正常下载。

点击图中“LOAD”下载图标,则下载成功。

补充遇到问题与解决方法:

1:在复制到Keil中的代码,中文注释出现乱码的情况如何解决?

这种问题是文本编码的问题,解决方法如下: 【Edit】 ->【Configuration】

如下图进行设置【Editor】->【Encoding】->【Chinese****(Simplified)】:

猜你喜欢

转载自blog.csdn.net/zeroice7/article/details/59483155