STM32 LED流水灯:基于寄存器与固件库的比较

一、创建一个keil工程(寄存器版)

  1. 打开keil,点击Project,选择New uVision Project
  2. 选择 CPU 型号,根据开发板进行选择接着,将工程模板的文件(User,Start,Library)拷贝到LED文件夹下面:添加文件
    ①添加已经存在文件
    在新建的工程中添加启动文件(startup_stm32f10x_hd.s),该文件可以先到固件库中复制到此处startup_stm32f10x_hd.s。
    ②创建新文件
    stm32f10x.h
    手动新建,用于存放寄存器映射的代码,暂时为空。
    main.c
    手动新建,用于存放 main 函数,暂时为空。
    配置魔术棒选项卡
    ①Target设置
    ②Output设置③Listing设置④Debug设置⑤Utilities设置⑥Debug Settings设置

    二、基于寄存器stm32 LED流水灯

  3. 寄存器的定义
    寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。

  4. GPIO (通用输入输出端口)
    STM32 可控制的引脚。

  5. 主函数代码

    #include "stm32f10x.h"
    // Device header

    #include "Delay.h"

    int
    main
    (
    void
    )

    {

    RCC_APB2PeriphClockCmd
    (
    RCC_APB2Periph_GPIOA
    ,
    ENABLE
    );

    GPIO_InitTypeDef GPIO_InitStructure
    ;

    GPIO_InitStructure
    .
    GPIO_Mode
    =
    GPIO_Mode_Out_PP
    ;

    GPIO_InitStructure
    .
    GPIO_Pin
    =
    GPIO_Pin_All
    ;

    GPIO_InitStructure
    .
    GPIO_Speed
    =
    GPIO_Speed_50MHz
    ;

    GPIO_Init
    (
    GPIOA
    ,
    &
    GPIO_InitStructure
    );

    while
    (
    1
    )

    {

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0001
    );
    //0000 0000 0000 0001

    Delay_ms
    (
    1000
    );

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0002
    );
    //0000 0000 0000 0010

    Delay_ms
    (
    1000
    );

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0004
    );
    //0000 0000 0000 0100

    Delay_ms
    (
    1000
    );

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0008
    );
    //0000 0000 0000 1000

    Delay_ms
    (
    1000
    );

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0010
    );
    //0000 0000 0001 0000

    Delay_ms
    (
    1000
    );

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0020
    );
    //0000 0000 0010 0000

    Delay_ms
    (
    1000
    );

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0040
    );
    //0000 0000 0100 0000

    Delay_ms
    (
    1000
    );

    GPIO_Write
    (
    GPIOA
    ,
    ~0x0080
    );
    //0000 0000 1000 0000

    Delay_ms
    (
    1000
    );

    //GPIO_Write(GPIOA, ~0x0010); //0000 0000 0000 1000

    //Delay_ms(2000);

    }编译烧录后,效果如下

三、创建一个keil工程(固件库版)

1.方法类似于寄存器的创建。
不同点

需要添加组文件夹。
在新建的工程中添加 5 个组文件夹,用来存放各种不同的文件,文件从本地建好的工程文件夹下获取,双击组文件夹就会出现添加文件的路径,然后选择文件即可。
2.C/C++选项卡设置
添加处理宏及编译器编译的时候查找的头文件路径。如果头文件路径添加有误,则编译的时候会报错找不到头文件。

使用
Keil
的软件仿真逻辑分析仪功能观察管脚

的时序波形

总结

LED
流水灯实验是基于
STM32F103
标准外设库的一个基础实验,通过这个实验,我们可以了解如何使用

STM32F103
的标准外设库来控制
LED
灯的亮灭和模式。

STM32F103
标准外设库提供了对芯片上各种外设的控制能力,包括
GPIO
(通用输入输出)外设。通过

这个外设,我们可以控制
LED
灯的亮灭和闪烁模式。一般来说,我们需要将
LED
的正极连接到
3.3V
电压,

负极
GPIO
空。通过改变
GPIO
的状态,我们就可以控制
LED
的亮灭。

通过这个基于
STM32F103
标准外设库的
LED
流水灯实验,我掌握了如何使用
STM32F103
的标准外设库来

控制
LED
灯的亮灭和模式。我学习了如何初始化和配置
GPIO
和定时器,并编写了简单的延时函数。在主

循环中,我使用定时器生成延时,然后改变
GPIO
的状态,实现
LED
灯的亮灭和闪烁。这个实验不仅让我

理解了
STM32F103
标准外设库的使用方法,也增强了我的编程和调试能力。

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 LED流水灯:基于寄存器与固件库的比较

发表评论