-
只要按照下面的一步步来,绝对能从0开始建立一个STM32工程。不仅包括工程建立过程,还有Jlink设置方法。本文使用芯片为STM32F103CB。
1 下载stm32F10x的官方库
http://www.st.com/web/en/catalog/tools/PF257890
-
2 新建工程
工程名设为stm32_demo,选择芯片型号为STM32F103B,如图,
因为下载的stm32库中有启动代码,所以这里选择"否",不拷贝启动代码。
在工程文件下,新建Startup、Headers、User、Libraries、CMSIS、Lists、Output文件夹。
文件夹
|
用途
|
Startup
|
启动文件,Flash在16~32Kb小容量,64~128Kb中容量,256~512Kb大容量
|
CMSIS
|
Cortex微控制器软件接口标准文件,该目录下文件适用所有Cortex系列
|
Libraries
|
存放stm32的驱动库文件
|
Headers
|
自定义的全局头文件
|
User
|
用户文件,我们把main.c放在该目录下
|
Lists
|
编译过程中产生的文件
|
Output
|
编译后输出文件,hex/bin等可执行属性的文件将保存在该目录下
|
至此,stm32的工程文件结构如下
-
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.cCortex-M3系统文件
Libraries\CMSIS\CM3\CoreSupport\core_cm3.h
|
CMSIS
|
文件拷贝完成后的工程文件目录结构如下:
-
4 将文件添加到工程
点击Keil右上角的工程分组按钮,在Group一列添加分组,分组和工程的文件名可以一一对应。
-
5 工程配置
点击右上角的工程配置按钮,弹出对话框,有多个选项卡,按照下面截图逐一配置。
-
6 编译链接
原来的main.c从库文件中拷贝过来的,把其中的内容都删除,添加最简单的main函数:
#include "stm32f10x.h"
int main(void)
{
while(1) {
}
}
修改配置文件stm32f10x_conf.h,通过注释添加或取消注释删除需要的功能模块,这里根据自己需要配置。
编译
-
7 Jlink调试配置
接上Jlink及开发板,
至此,STM32的工程搭建和Jlink调试配置都设置好了。为了方便,在工程成中添加了includes.h、types.h、gpio_bits.h等提供基本功能。
-
8 测试程序——LED流水灯程序
在工程文件目录下新建Drivers与Devices文件夹,
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!
分享到:
相关推荐
摘要视图订阅博博专家福利 2015年4月微软MVP申请 10月推荐文章汇总 有奖征文--我亲历的京东开展史 参与迷你编程马拉松赢iPhone 6stm32之ke
STM32开发教程,_从0创建1个KEIL MDK工程
这篇文档讲解Eclipse + CDT + YAGARTO + J-link的STM32开源开发环境搭建。基于开源的精神,编写发布此文档,希望对需要的人有用。本人试过好多开源平台,比较推崇Em::Blocks。可以查看本人另一篇编写的文档:...
STM32F407Keil工程模板,基于Keil可以对该工程模板进行复用,开发。
KEIL重合安装方法(C51与STM32等嵌入式开发互不影响共用一个KEIL)关注免费~
stm32 程序框架 程序模板 函数库v3.5.0 适合stm32初学者搭建开发环境
野火的教程2,搭建环境开发,压缩包包括视频讲解,视频讲解的文档和相关代码,初学者必备。PS:这一讲无程序
软件下载及安装
该固件库功能强大,由官网下载,用于keil搭建stm32f1xx系列arm芯片的开发环境。本人一直使用该款固件库,开发方便快速。
Keil uVision开发需要版权费,而网上开源的单片机、微控制器平台和资料比较少,有一些人用Eclipse。Eclipse的缺点不一而足。Eclipse臃肿、配置麻烦、代码提示没有、编译速度慢、调试很不方便,等等。本人试过好多...
Keil uVision开发需要版权费,而网上开源的单片机、微控制器平台和资料比较少,有一些人用Eclipse。Eclipse的缺点不一而足。Eclipse臃肿、配置麻烦、代码提示没有、编译速度慢、调试很不方便,等等。本人试过好多...
开发环境Keil 4.5.0 均使用最新资源搭建的工程模版,已做任务调度测试,已做FPU测试,uCosiii系统频率10ms 制作人QQ:19553580(巴壁虎) 有问题的朋友请与我联系,共同学习共同提高。 (目前网上还未看到关于STM...
STM32F103 例程 包括 TIM定时器 基本IO口使用 LED指示灯 USART通讯 作为用户搭建STM32F103环境的基础 软件开发工具 KEIL4
如何搭建开发环境 keil stm32 及相关软件的安装 调试
程序是通过keil5搭建开发环境进行编写的,里面注释详细。CCD型号为TSL1402的CCD驱动程序,该CCD驱动程序基于STM32F205芯片开发的。
实验内容 熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现流水灯工程。通过ISP下载代码到 实验板,查看运行结果。下载代码到目标板,查看运行结果。 四.实验设备 硬件部分:PC计算机(宿主机)、STM32...
简单介绍了兆易创新GD32F130F4P6开发环境搭建,并提供了编程环境所需插件的下载地址。另外简单介绍了如何把STM32项目移植到相应的芯片上。
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
【2】实训环境 (⼀) 实训环境 Java环境、STM32CubeMX、Keil5、st-link v2驱动安装、Pl2303驱动安装 (⼆) 环境介绍 (1)Java 环境: STM32CubeMX环境需要Java⽀持,所以第⼀步必须要安装Java 双击Java安装包:~/...
keil/proteus搭建概述、环境搭建 本实训项目使用的开发工具有为Keil μVision5和proteus,Keil μVision5是在嵌入式领域常用的集成开发环境。Proteus是一款用于仿真单片机及外围器件的工具。 安装KEIL5 安装包,安装...