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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: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)】:

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,Keil5是一款非常流行的嵌入式开发工具,主要用于开发和调试ARM架构的微控制器。而ST-Link V2则是一款常用的STM32系列微控制器的烧录和调试工具,可以通过USB接口连接到计算机。 STM32F103C8T6是一款常用的ARM Cortex-M3内核的微控制器,其中包含了多个GPIO引脚,其中的P13引脚是其中的一个。 P13引脚可以通过配置为输出模式来控制连接到该引脚的LED灯的亮灭。为了测试P13引脚连接的LED灯是否正常工作,我们可以使用Keil5和ST-Link V2来编写和烧录一个简单的测试程序。 下面是一个示例的测试程序的代码: ```c #include "stm32f103c8t6.h" void delay(int); int main(void) { RCC->APB2ENR |= (1 << 3); // Enable GPIOB clock GPIOB->CRH &= ~(0x0F << 20); // Clear PIN13 configuration GPIOB->CRH |= (0x03 << 20); // Configure PIN13 as output push-pull while (1) { GPIOB->BSRR = (1 << 13); // Set PIN13 to HIGH delay(500000); // Delay for some time GPIOB->BRR = (1 << 13); // Reset PIN13 to LOW delay(500000); // Delay for some time } } void delay(int count) { for (int i = 0; i < count; i++); } ``` 这个程序中,我们首先需要配置P13引脚为输出模式,并将其连接的GPIO口的时钟使能。然后,在一个无限循环中,我们通过设置和复位P13引脚来控制LED灯的亮灭,并在设置和复位之间加入了一个延时函数来控制灯的持续时间。 在Keil5中,我们可以创建一个新的工程,选择适当的目标设备为STM32F103C8T6,然后将以上代码复制到一个.c文件中,并进行编译和烧录。 使用ST-Link V2连接STM32F103C8T6微控制器和计算机,然后在Keil5中选择ST-Link V2作为调试工具进行烧录。完成烧录后,可以通过观察P13引脚连接的LED灯的亮灭状态来判断测试程序是否正常工作。 希望对你有帮助! ### 回答2: Keil5是一款被广泛用于嵌入式系统开发的集成开发环境(IDE),而ST-Link V2是一种程序烧录器和调试器,用于与STMicroelectronics的STM32系列微控制器进行通信和调试。而STM32F103C8T6是一个性能强大的STM32系列微控制器,其P13引脚可以用作输出控制。 通过Keil5和ST-Link V2的配合使用,我们可以进行STM32F103C8T6的开发、调试和烧录操作。下面是一个使用P13引脚测试程序的示例: 首先,在Keil5中创建一个新的工程,选择合适的芯片型号为STM32F103C8T6。然后编写一个简单的程序,以控制P13引脚的输出状态。 #include "stm32f103c8t6.h" void delay(uint32_t count) { for(uint32_t i=0;i<count;i++); } int main() { RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 使能C端口时钟 GPIOC->CRH &= ~(0x0F << (4*0)); // 清除P13端口的配置 GPIOC->CRH |= (0x03 << (4*0)); // 设置P13引脚为推挽输出 GPIOC->BRR |= (1 << 13); // 将P13引脚置低,灯熄灭 while(1) { GPIOC->BSRR |= (1 << 13); // 将P13引脚置高,灯亮起 delay(1000000); // 延时一段时间 GPIOC->BRR |= (1 << 13); // 将P13引脚置低,灯熄灭 delay(1000000); // 延时一段时间 } } 在上述程序中,我们首先使能了GPIOC端口的时钟,并对P13引脚进行了配置,将其配置为推挽输出模式。然后,在主函数中的循环中,通过设置和清除P13引脚的电平来实现让灯亮起和熄灭的效果。同时,为了控制灯的亮灭时间,我们使用了一个简单的延时函数。 完成程序编写后,可以使用ST-Link V2将程序烧录到STM32F103C8T6上。连接ST-Link V2与STM32F103C8T6的调试串口,并通过Keil5进行程序的烧录和调试操作。最后,我们可以观察到P13引脚接入的LED灯的亮度变化,达到测试效果。 以上就是使用Keil5、ST-Link V2和STM32F103C8T6进行P13灯测试的简要步骤和示例程序。这种组合可以为嵌入式开发者提供方便的开发和调试环境,帮助他们快速验证和测试硬件功能。 ### 回答3: Keil5和ST-Link V2是嵌入式开发中常用的工具,用于开发和调试STM32微控制器。在这个问题中,我们将使用Keil5和ST-Link V2开发板来编写一个简单的程序,以控制STM32F103C8T6开发板上的P13灯。 首先,我们需要在Keil5中创建一个新的工程,并选择适合的开发板和目标芯片,本例中选择的是STM32F103C8T6。 接下来,我们需要编写一个简单的程序来控制P13灯。下面是一个示例程序: ```c #include "stm32f103c8t6.h" void delay(void) { for(int i = 0; i < 500000; i++); // 延时函数 } int main(void) { // 启用GPIOC时钟 RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 配置P13引脚为输出模式 GPIOC->CRH &= ~(GPIO_CRH_MODE13_Msk | GPIO_CRH_CNF13_Msk); GPIOC->CRH |= GPIO_CRH_MODE13_0; while(1) { // 设置P13输出高电平 GPIOC->BSRR |= GPIO_BSRR_BS13; // 延时一段时间 delay(); // 设置P13输出低电平 GPIOC->BSRR |= GPIO_BSRR_BR13; // 延时一段时间 delay(); } } ``` 在这个程序中,我们首先启用GPIOC端口的时钟。然后,我们配置P13引脚为输出模式。接下来是一个无限循环,在循环中我们将P13引脚设置为高电平,然后延时一段时间,接着将P13引脚设置为低电平,再次延时一段时间,不断循环。 最后,我们需要将程序下载STM32F103C8T6开发板上进行测试。我们可以使用ST-Link V2作为调试器,将程序下载到开发板上。连接ST-Link V2与开发板,并通过Keil5的调试功能进行下载和调试。 当程序下载到开发板上之后,你就会看到P13灯每隔一段时间亮起并熄灭,表示程序正常运行。 总之,通过Keil5和ST-Link V2,我们可以轻松地编写并测试STM32F103C8T6开发板上的P13灯测试程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值