0

0

0

修罗

站点介绍

只有了解事实才能获得真正的自由

STM32F103ZE点亮LED灯(一)

修罗 2025-08-18 905 5条评论 stm32

首页 / 正文

STM32F103ZE点亮LED灯(一)

1 硬件电路设计

​ 如下图:LED1-LED3是普通LED灯,LED4为电源指示灯。

image-20250818113307703.png

​ 下图展示了 STM32F103ZE 的引脚接口,LED1连接的是端口PA0,因此,只要让PA0引脚输出低电平就可以点亮LED1:

image-20250818113425424.png

2 软件设计

​ 根据前面硬件电路设计,我们只要让GPIOA的0口输出低电平就行了。

2.1 开启时钟

​ 在STM32中,让IO口工作,必须先开启对应的时钟。所以需要先查找到开启时钟的寄存器,然后通过该寄存器操作时钟的开启或关闭。我们要打开的是GPIOA的时钟。

image-20250818113710857.png

​ IOPAEN:GPIOA 的时钟使能位,只有把它置 1,GPIOA 的寄存器才能正常工作

​ 我们需要知道上面RCC_APB2ENR这个寄存器的地址。如何查找呢?先知道RCC这个外设的基地址,然后加上这个寄存器的偏移地址就行了。

image-20250818113952833.png

​ 从上面可以看出来,RCC的基地址是0x4002 1000,APB2ENR的偏移量是0x18,所以APB2ENR的地址值是0x4002 1000 + 0x18

​ 有了地址,在这个地址写入一个数据,这个数据的二进制第2位是1就行了。其他位暂时不管。我们写入4。这样就开启了GPIOA的时钟。

*(uint32_t *)(0x40021000 + 0x18) = 4; // 在代码中,我们需要把地址强转成指针才能给这个地址赋值。

2.2 给IO口设置输出模式

​ 在STM32中,如果要让IO口输出低电平或高电平,必须给要使用的IO设置为输出模式。根据前面的思路,需要先找到GPIOA的基地址,再根据偏移地址找到要使用的寄存器的地址。GPIOA的基地址是0x4001 0800

GPIOx_CRL:配置端口 第 0~7 引脚(低 8 个引脚)

GPIOx_CRH:配置端口 第 8~15 引脚(高 8 个引脚)

​ 配置PA0口的输出模式的寄存器是GPIOA_CRL:

image-20250818114331204.png

​ 只需要让这个寄存器的最后4位是 0011,就是最大速度的推挽输出。

*(uint32_t *)(0x40010800 + 0x00) = 3;

2.3 给PA0口输出0

​ 给指定PA0口输出0就可以点亮LED1了。用到的寄存器是ODR数据输出寄存器:

image-20250818114539304.png

​ ODR寄存器的地址是 0x40010800 + 0x0c 。给这个地址的第0位写0,其他位写1。

*(uint32_t *)((0x40010800 + 0x0c)) = 0xfffe;

2.4 main.c

#include "stdint.h"

int main(void)
{
    /* 开启GPIOA的时钟 */
    *(uint32_t *)(0x40021000 + 0x18) = 4;

    /* 给PA0设置为通用推挽输出 */
    *(uint32_t *)(0x40010800 + 0x00) = 3;

    /* 给输出寄存器赋值 */
    *(uint32_t *)(0x40010800 + 0x0c) = 0xfffe;
    while (1)
    {
    }
}

编译代码下载编译后的程序即可点亮LED1:

image-20250818115050295.png

代码还有一些不足之处需要完善:

寄存器赋值用覆盖,容易误清其他位(应该用 |= / &=)。

对整个寄存器写值,影响所有引脚(应该只改目标引脚的位)。

代码可读性差(直接用地址,不用结构体/宏)。

评论(5)

  1. 1 游客 2025-09-01 11:27 回复

    1

  2. 1 游客 2025-09-01 12:10 回复

    1

  3. @@2nLXA 游客 2025-09-01 12:11 回复

    1

  4. 1 游客 2025-09-01 12:14 回复

    1

  5. 1 游客 2025-09-01 12:15 回复

    -1' OR 2+671-671-1=0+0+0+1 --


最新评论

  • https://www.studyglobus.com/author/carroll34a5552/

    Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.

  • Richardgrold

    1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino

  • 砂岩白丘

    我一直梦想, 看到你们相册那样的地方。真棒。

  • 城市地標

    我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。

  • 宗教地標

    我热爱这样的想法, 去那么多国家。真的很鼓舞。

  • 觀景高地

    能感受到热爱。继续保持 感受。

  • 最佳季節

    我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。

  • 1

    1

  • 1

    1

  • -1' OR 2+158-158-1=0+0+0+1 or 'TKCTZnRa'='

    1

日历

2026年07月

   1234
567891011
12131415161718
19202122232425
262728293031 

文章目录

推荐关键字: Linux webpack js 算法 MongoDB laravel JAVA jquery javase redis