正点原子miniSTM32LED实验

时间:2024-03-31 14:46:38

拿到正点原子miniSTM32开发板,前期的KEIL软件安装**不介绍了,点个灯玩玩吧!

第一步:建个文件夹LED\USER,打开KEIL5,新建项目New uVision Project,在刚才建的文件夹路径下,填个名字LED,保存,

正点原子miniSTM32LED实验

这时弹出窗口,选择我们的芯片STM32F103RC,点OK,弹出的窗口叉掉。正点原子miniSTM32LED实验 

正点原子miniSTM32LED实验

到这里,我们还只是建了一个框架,还需要添加启动代码,以及.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 文件夹

找到 Target1Source Group1双击设置打开文件类型为 Asm Source file选择 startup_stm32f10x_hd.s点击 Add

正点原子miniSTM32LED实验

这里看到的 2 个文件夹:Listings 和 Objects,是 MDK5 自行创建的,用于保存编译过程中 生成的一些文件

打开我们刚刚建立的 TEST\USER 文件夹,可以看到里面多了 3 个文件夹:DebugConfig、Listings 和 Objects

正点原子miniSTM32LED实验

在 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 文件夹不用删除) 

正点原子miniSTM32LED实验

由于上面我们还没有任何代码在工程里面,这里我们把系统代码 COPY 过来(即 SYSTEM 文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到,不过不要 拷贝错了!不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然!这些代码在 任何 STM32F10x 的芯片上都是通用的,可以用于快速构建自己的工程)

正点原子miniSTM32LED实验

然后我们在 USER 文件夹下面找到 test.uvprojx,打开它,然后在 Target 目录树上点击右键 Manage Project Items 

正点原子miniSTM32LED实验

我们再在项目下建个文件夹HAREWARE\LED。

正点原子miniSTM32LED实验

Groups项新建USER,HARDWARE,SYSTEM, 在Files项添加相应目录下的文件SYSTEM下有delay.c,sys.c,usart.c

正点原子miniSTM32LED实验

正点原子miniSTM32LED实验 

点击百页图标,新建文件main.c,存放在USER目录下

正点原子miniSTM32LED实验 

正点原子miniSTM32LED实验

我们再把刚才的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,

正点原子miniSTM32LED实验

接着,再设置 Listings 文件路径,在图 3.2.16 的基础上,打开 Listing 选项卡点击 Select Folder for Listings找到 OBJ 文件夹点击 OK,

正点原子miniSTM32LED实验 

正点原子miniSTM32LED实验 

STM32F10X_HD,USE_STDPERIPH_DRIVER

正点原子miniSTM32LED实验

正点原子miniSTM32LED实验

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);
        
    }
 
}
编译执行,烧写代码运行,没毛病。