stm32之keil开发环境搭建

  1. 
    
        只要按照下面的一步步来,绝对能从0开始建立一个STM32工程。不仅包括工程建立过程,还有Jlink设置方法。本文使用芯片为STM32F103CB。

    1 下载stm32F10x的官方库

http://www.st.com/web/en/catalog/tools/PF257890

 

  1. 2 新建工程

工程名设为stm32_demo,选择芯片型号为STM32F103B,如图,

因为下载的stm32库中有启动代码,所以这里选择"",不拷贝启动代码。

在工程文件下,新建Startup HeadersUserLibrariesCMSISListsOutput文件夹。

文件夹

用途

Startup

启动文件,Flash16~32Kb小容量,64~128Kb中容量,256~512Kb大容量

CMSIS

Cortex微控制器软件接口标准文件,该目录下文件适用所有Cortex系列

Libraries

存放stm32的驱动库文件

Headers

自定义的全局头文件

User

用户文件,我们把main.c放在该目录下

Lists

编译过程中产生的文件

Output

编译后输出文件,hex/bin等可执行属性的文件将保存在该目录下

至此,stm32的工程文件结构如下

 

  1. 3 库文件拷贝

把下载stm32库中文件拷贝到新建工程中

stm32F10x的官方库

工程

Libraries\STM32F10x_StdPeriph_Driver\inc 库头文件

Libraries\STM32F10x_StdPeriph_Driver\src 库源文件

Libraries

Project\STM32F10x_StdPeriph_Template\main.c

Project\STM32F10x_StdPeriph_Template\stm32f10x_it.c 中断函数文件

User

Project\STM32F10x_StdPeriph_Template\stm32f10x_it.h 中断函数头文件

Project\STM32F10x_StdPeriph_Template\stm32f10x_conf.h 配置文件

Headers

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\* 启动文件

Startup

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\ system_stm32f10x.c

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h

CMSIS

Libraries\CMSIS\CM3\CoreSupport\core_cm3.c Cortex-M3系统文件

Libraries\CMSIS\CM3\CoreSupport\core_cm3.h

CMSIS

文件拷贝完成后的工程文件目录结构如下:

 

  1. 4 将文件添加到工程

点击Keil右上角的工程分组按钮,在Group一列添加分组,分组和工程的文件名可以一一对应。

 

 

 


  1. 5 工程配置

点击右上角的工程配置按钮,弹出对话框,有多个选项卡,按照下面截图逐一配置。


  1. 6 编译链接

原来的main.c从库文件中拷贝过来的,把其中的内容都删除,添加最简单的main函数:

#include "stm32f10x.h"
int main(void)
{
    while(1) {
 
    }
}

修改配置文件stm32f10x_conf.h,通过注释添加或取消注释删除需要的功能模块,这里根据自己需要配置。

编译

 

  1. 7 Jlink调试配置

接上Jlink及开发板,

至此,STM32的工程搭建和Jlink调试配置都设置好了。为了方便,在工程成中添加了includes.htypes.hgpio_bits.h等提供基本功能。

  1. 8 测试程序——LED流水灯程序

在工程文件目录下新建DriversDevices文件夹,

Drivers

存放stm32相关的驱动,比如:延时函数等

Devices

存放开发板上涉及的硬件设备相关代码

工程中File->New,新建下面的一些文件。

Drivers/delay.h

延时函数头文件

Drivers/delay.c

延时函数源文件

Devices/led.h

LED流水灯头文件

Devices/led.c

LED流水灯源文件

注:作为一种好的习惯,每个.c文件都应该有一个对应的.h文件。

添加代码:

led.c

/*
* LED example
* Author : xiahouzuoxin
* Date : 2013.08
*/
#include "LED.h"
 
GPIO_InitTypeDef LED_InitStructure;
 
/********************************************************************
Function Name: Init_LED
Author : 夏侯佐鑫
Date : 2011-09-28
Description :
Inputs : None
Outputs : None
Notes :
Revision :
********************************************************************/
void InitLED(void)
{
//使能PA端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 
    //端口配置推挽输出
    LED_InitStructure.GPIO_Pin = LED1 | LED2 | LED3 | LED4;
    LED_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    LED_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    
    GPIO_Init(GPIOA, &LED_InitStructure);
 
    //初始输出高电平
    GPIO_SetBits(GPIOA, LED1 | LED2 | LED3 | LED4);
}
 
/********************************************************************
Function Name: Flash_LED
Author : xiahouzuoxin
Date : 2011-09-28
Description :
Inputs : None
Outputs : None
Notes :
Revision :
********************************************************************/
void FlashLED(void)
{
GPIO_SetBits(GPIOA, LED2 | LED3 | LED4);
    GPIO_ResetBits(GPIOA, LED1);
    delay_ms(500);
GPIO_SetBits(GPIOA, LED1 | LED3 | LED4);
    GPIO_ResetBits(GPIOA, LED2);
    delay_ms(500);
GPIO_SetBits(GPIOA, LED1 | LED2 | LED4);
    GPIO_ResetBits(GPIOA, LED3);
    delay_ms(500);
GPIO_SetBits(GPIOA, LED1 | LED2 | LED3);
    GPIO_ResetBits(GPIOA, LED4);
    delay_ms(500);
}

led.h

/*
* LED example
* Author : xiahouzuoxin
* Date : 2013.08
*/
#ifndef __LED_H__
#define __LED_H__
 
#include "../Headers/includes.h"
 
#define LED1                      GPIO_Pin_4
#define LED2                      GPIO_Pin_5
#define LED3                      GPIO_Pin_6
#define LED4                      GPIO_Pin_7
 
extern void InitLED(void);
extern void FlashLED(void);
 
#endif

delay.h

#ifndef _DELAY_H
#define _DELAY_H
 
#include "includes.h"
 
extern void delay_ms(UINT32 ms);
 
#endif

delay.c

#include "delay.h"
 
/********************************************************************* DELAY_MS
* Discription : delay for 1 ms if ms=1, not accurate
* Author : xiahouzuoxin
* data : 2012-08-01
* inputs :    ms -- ms number
* outputs :
* Modified :
********************************************************************/
void delay_ms(UINT32 ms)
{
int i = 0;
    int j = 0;
 
for(i = 0; i < ms; i++)
{
for(j = 0; j < 8040; j++)
{
// Delay n ms
}
}
}

includes.h

#include "../Devices/LED.h"

main.c

#include "includes.h"
 
int main(void)
{
InitLED();
while(1) {
     FlashLED();
}
}

编译下载,运行,OK

<think>好的,用户想了解如何在Keil 5上搭建STM32开发环境。我之前看到过相关的引用资料,需要结合这些资料来整理步骤。首先,用户可能已经安装了MDK,但不确定具体步骤。我需要按照安装、创建项目、选择型号、配置工程、添加文件、编写代码编译的流程来组织答案。同时要注意引用标记的正确使用,比如在关键步骤后添加[^1]。另外,用户可能遇到的问题比如库文件缺失或编译错误,需要给出解决方法。还要生成相关问题,比如优化配置或调试方法,这些可以帮助用户进一步学习。最后,确保所有步骤清晰,语言简洁,符合中文回答的要求,避免使用Markdown格式。检查是否有遗漏的步骤,比如选择单片机型号时的具体操作,或者添加文件时的注意事项。确保每个步骤都有对应的引用,并且流程连贯,用户能够一步步跟着操作。</think>### STM32 Keil 5 开发环境配置教程 #### **1. 安装MDK软件** - 需提前安装Keil MDK(Microcontroller Development Kit),若未安装可从官网下载并激活[^2]。 - 安装时需包含对应STM32芯片的Device Family Pack(DFP),例如STM32F1系列支持包。 #### **2. 创建新项目** - 打开Keil 5,点击菜单栏 `Project -> New μVision Project`。 - 选择项目保存路径,建议新建独立文件夹(如命名为`STM32_Project`)。 - 输入项目名称后点击保存。 #### **3. 选择单片机型号** - 在弹出的设备选择窗口中,输入目标芯片型号(如`STM32F103C8`),双击确认型号。 - 点击`OK`后,弹出运行时环境配置窗口(Manage Run-Time Environment)。 #### **4. 配置工程环境** - 在运行时环境配置中,勾选必要的库文件: - `CMSIS -> Core` - `Device -> Startup`(用于初始化代码) - 根据需求添加外设库(如`STM32F1xx_DFP`中的GPIO、USART等)。 - 点击`OK`完成配置。 #### **5. 添加用户代码文件** - 在项目根目录下新建`USER`文件夹,用于存放用户代码。 - 右键点击`Project`窗口中的`Target 1`,选择`Add New Item`,创建`Main.c`文件并保存至`USER`文件夹。 - 将`Main.c`添加到工程中(通过`Add Existing Files`或拖拽)。 #### **6. 编写测试代码** 在`Main.c`中写入简单程序验证环境: ```c #include "stm32f1xx.h" int main(void) { // 初始化代码(如配置系统时钟) while(1) { // 主循环 } } ``` #### **7. 编译与调试** - 点击工具栏的`Build`按钮(或按`F7`),检查输出窗口是否显示`0 Error(s), 0 Warning(s)`。 - 若提示缺少头文件,需检查DFP安装路径是否正确,或在工程属性中手动添加包含路径。 --- #### **常见问题解决** - **问题1:无法找到芯片型号** - 解决方法:通过`Pack Installer`(菜单栏`Pack -> Install`)安装对应芯片支持包。 - **问题2:编译时报错`undefined symbol SystemInit`** - 解决方法:在`Manage Run-Time Environment`中勾选`Device -> Startup`以包含启动文件。 ---
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值