基于stm32的keil开发环境搭建

发布时间:2023-05-10  

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


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


41


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


42


在工程文件下,新建Startup 、Headers、User、Libraries、CMSIS、Lists、Output文件夹。

43


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



44



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


45


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



46


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



47



48


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


49



50



51



52


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

#include "stm32f10x.h" 
int main(void) 

    while(1) { 
  
    } 


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


53


编译


54



7 Jlink调试配置
接上Jlink及开发板,


55



56



57



58



至此,STM32的工程搭建和Jlink调试配置都设置好了。为了方便,在工程成中添加了includes.h、types.h、gpio_bits.h等提供基本功能。
8 测试程序——LED流水灯程序
在工程文件目录下新建Drivers与Devices文件夹,


59


工程中File->New,新建以上一些文件。

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!


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>