单片机学习小组
直播中

xymbmcu

12年用户 1040经验值
擅长:可编程逻辑
私信 关注

如何在miniSTM32开发板上去完成点亮LED的设计呢

如何在miniSTM32开发板上去完成点亮LED的设计呢?有哪些基本流程?

回帖(1)

杨月粉

2022-3-1 14:28:00
拿到正点原子miniSTM32开发板,前期的KEIL软件安装破解不介绍了,点个灯玩玩吧!

第一步:建个文件夹LEDUSER,打开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 文件夹

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



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

打开我们刚刚建立的 TESTUSER 文件夹,可以看到里面多了 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



我们再在项目下建个文件夹HAREWARELED。



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





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





我们再把刚才的main.c加进来, 同样的方法,在HARDWARELED下建个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);
        
    }

}
编译执行,烧写代码运行,没毛病。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分