拿到正点原子miniSTM32开发板,前期的KEIL软件安装**不介绍了,点个灯玩玩吧!
第一步:建个文件夹LED\USER,打开KEIL5,新建项目New uVision Project,在刚才建的文件夹路径下,填个名字LED,保存,
这时弹出窗口,选择我们的芯片STM32F103RC,点OK,弹出的窗口叉掉。
到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c 文件等。
ST 公司提供了 3 个启动文件给我们,分别用于不同容量的 STM32 芯片,这三个文件是:
startup_stm32f10x_ld.s
startup_stm32f10x_md.s
startup_stm32f10x_hd.s
其中,ld.s 适用于小容量 产品;
md.s 适用于中等容量产品;
hd 适用于大容量产品;
这里的容量是指 FLASH 的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH
我们开发板使用的是 STM32F103RCT6,FLASH 容量为 256KB,属于大容量产品,所以我 们选择 startup_stm32f10x_hd.s 作为我们的启动文件。
我们把 startup_stm32f10x_hd.s 拷贝到刚刚新建的 USER 文件夹
找到 Target1Source Group1双击设置打开文件类型为 Asm Source file选择 startup_stm32f10x_hd.s点击 Add
这里看到的 2 个文件夹:Listings 和 Objects,是 MDK5 自行创建的,用于保存编译过程中 生成的一些文件
打开我们刚刚建立的 TEST\USER 文件夹,可以看到里面多了 3 个文件夹:DebugConfig、Listings 和 Objects
在 USER 文件夹下,startup_stm32f10x_hd.s(启动文件)和 test.uvprojx(MDK5 工程文件) 是我们必须用到的 2 个文件,然后 DebugConfig 、Listings 和 Objects 文件夹是 MDK5 自动生 成的,DebugConfig文件夹用于存储一些调试配置文件,Listings和Objects文件夹用来存储MDK 编译过程的一些中间文件。 MDK5.21A 已经默认将这些文件生成在了 Listings 和 Objects 文件夹里面,但是 MDK5.11A 及之前版本是不会自动生成这两个文件夹的,所有中间文件都是生成在工程同面目录下,也就 是 USER 文件夹下,这样会显得比较混乱。
这里,我们不用MDK5 自己生成的 Listings 和 Objects 文件夹来存放中间文件,而是在 TEST 目录下新建一个新的 OBJ 文件夹来存放这些中间文件。这样,USER 文件夹专门用来存放启动 文件(startup_stm32f10x_hd.s)、工程文件(test.uvprojx)等不可缺少的文件,而 OBJ 则用来存 放这些编译过程中产生的中间文件(包括.hex 文件也将存放在这个文件夹里面)。然后把 Listings 和 Objects 文件夹里面的东西全部移到 OBJ 文件夹下,并删除这两 个文件夹(DebugConfig 文件夹不用删除)
由于上面我们还没有任何代码在工程里面,这里我们把系统代码 COPY 过来(即 SYSTEM 文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到,不过不要 拷贝错了!不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然!这些代码在 任何 STM32F10x 的芯片上都是通用的,可以用于快速构建自己的工程)
然后我们在 USER 文件夹下面找到 test.uvprojx,打开它,然后在 Target 目录树上点击右键 Manage Project Items
我们再在项目下建个文件夹HAREWARE\LED。
Groups项新建USER,HARDWARE,SYSTEM, 在Files项添加相应目录下的文件SYSTEM下有delay.c,sys.c,usart.c
点击百页图标,新建文件main.c,存放在USER目录下
我们再把刚才的main.c加进来, 同样的方法,在HARDWARE\LED下建个led.c ,led.h
点击 (Options for Target 按钮),弹出 Options for
Target’Target 1’对话框,选择 Output 选项卡选中 Create Hex File(用于生成 Hex 文件,后 面会用到)点击 Select Folder for Objects找到 OBJ 文件夹点击 OK,
接着,再设置 Listings 文件路径,在图 3.2.16 的基础上,打开 Listing 选项卡点击 Select Folder for Listings找到 OBJ 文件夹点击 OK,
STM32F10X_HD,USE_STDPERIPH_DRIVER
DARMSTM.DLL,-pSTM32F103RC,TARMSTM.DLL
led.c代码
#include "led.h"
#include "stm32f10x.h"
void led_init(void)
{
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<5;
//GPIOA8
GPIOA->CRH&=0xFFFFFFF0;
GPIOA->CRH|=0x00000003;
GPIOA->ODR=1<<8;
//GPIOD2
GPIOD->CRL&=0xFFFFF0FF;
GPIOD->CRL|=0x00000300;
GPIOD->ODR=1<<2;
}
led.h代码
#ifndef __LED_H
#define __LED_H
void led_init(void);
#endif
mian.c代码
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
led_init();
delay_init();
while(1)
{
GPIOA->ODR=1<<8;
GPIOD->ODR=1<<2;
delay_ms(500);
GPIOA->ODR&=~(1<<8);
GPIOD->ODR&=~(1<<2);
delay_ms(500);
}
}
编译执行,烧写代码运行,没毛病。