基于stm32的keil开发环境搭建

1 只要按照下面的一步步来,绝对能从0开始建立一个stm32工程。不仅包括工程建立过程,还有jlink设置方法。本文使用芯片为stm32f103cb。
1 下载stm32f10x的官方库
2 新建工程
工程名设为stm32_demo,选择芯片型号为stm32f103b,如图:
因为下载的stm32库中有启动代码,所以这里选择否,不拷贝启动代码。
在工程文件下,新建startup 、headers、user、libraries、cmsis、lists、output文件夹。
至此,stm32的工程文件结构如下
3 库文件拷贝
把下载stm32库中文件拷贝到新建工程中
文件拷贝完成后的工程文件目录结构如下:
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文件夹,
工程中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!
stm32单片机中文官网
意法半导体/st/stm

部署万兆以太网的十个注意事项
三菱PLC远程下载程序
宠物电商独角兽 发行区块链积分产品激活用户粘性 取代积分制
pcb钻孔偏孔了怎么办?
搜电充电:创新“服务卡片”,让即时充电更便捷
基于stm32的keil开发环境搭建
如何解决储罐腐蚀问题
丰田测试HoloLens应用,计划用于生产改进
坐标北京,迈威通信邀您共赴煤炭行业盛会
一文看懂码灵半导体CFW32C7UL系列MPU产品应用(三): 国际标准加解密算法
通过3D打印的“头发农场”可以用来培养新的毛囊
中国联通终于迎来一丝“胜利的曙光”,业绩实现惊天大逆转
LED产业年末收官,智能照明从“虚火”到“落地”
军营光纤远程联动视频监控系统的原理、组成及应用
戴尔小企业通过数字化办公以及数字化指数层面开展精细化布局
英特尔和欧盟法院的反垄断案新进展 前者将胜诉
MAX4887:三路高速模拟视频开关
哪款手机拍照必备?出游必选拍照手机华为p10,oppor11,还你一个高颜值的出游纪念!
企业正采用人工智能和机器学习技术解决业务问题 并将新思想带入2019
计算机视觉CV领域图像分类方向文献和代码的超全总结和列表!