STM32 | STM32F407ZE(LED寄存器开发续第二天源码)

本文详细介绍了基于STM32F407ZE的LED灯开发,包括理解LED灯原理图,开启GPIOF组时钟,设置PF9为输出模式以及通过GPIOF_BSRR控制LED的亮灭。文中深入解析了寄存器操作,如RCC_AHB1ENR、GPIOF_MODER等,并提供了led.h、led.c及main.c的代码示例,强调了结合原理图的重要性。
摘要由CSDN通过智能技术生成

上节回顾

STM32 | STM32时钟分析、GPIO分析、寄存器地址查找、LED灯开发(第二天)
STM32 | Proteus 8.6安装步骤(图文并茂)

一、 LED灯开发

1、理解led灯原理图

LED0连接在PF9

PF9输出低电平(0),灯亮;PF9输出高电平(1),灯灭;(低电平有效)

2、打开GPIOF组时钟

//将第5位置1 使能GPIOF组时钟

RCC_AHB1ENR |= (0x01<<5);

3、设置PF9灯为输出模式  输出推挽 上拉 速度(50MHZ)

4、通过GPIOF_BSRR控制LED灯亮与灭

【1】led.h

#ifndef __LED_H#define __LED_H#include "stm32f4xx.h"#include "stdio.h"#define RCC_AHB1ENR   (*((unsigned int *)(0x40023800+0x30))) #define GPIOF_MODER   (*((unsigned int *)(0x40021400+0x00)))  #define GPIOF_OTYPER  (*((unsigned int *)(0x40021400+0x04)))  #define GPIOF_OSPEEDR (*((unsigned int *)(0x40021400+0x08))) #define GPIOF_PUPDR   (*((unsigned int *)(0x40021400+0x0C))) #define GPIOF_ODR     (*((unsigned int *)(0x40021400+0x14))) #define GPIOF_BSRR    (*((unsigned int *)(0x40021400+0x18))) void Led_Init(void);#endif

嵌入式嘛,都离不开对寄存器的操作,每一个寄存器都有自己的地址,简单解读一下以上代码。

#define RCC_AHB1ENR   (*((unsigned int *)(0x40023800+0x30)))

RCC_AHB1ENR 寄存器用于控制嵌入式系统的AHB1总线的时钟使能。

  • (*((unsigned int *)(0x40023800+0x30))):这是一个指针表达式,它把一个特定地址(0x40023800+0x30)转换为一个无符号整数指针,并将其赋值给 RCC_AHB1ENR 宏。

在嵌入式系统中对 GPIOF 寄存器进行编程的例子。它通过使用 C 语言中的预处理器 #define 指令,定义了一系列宏,每个宏对应着不同的 GPIOF 寄存器。这些宏允许我们方便地访问指定地址的寄存器,以控制嵌入式系统中的 GPIO (General Purpose Input/Output) 功能。

让我们逐个解释这些宏:

  1. #define GPIOF_MODER (*((unsigned int *)(0x40021400+0x00)))
    此宏定义用于访问 GPIOF 的 moder 寄存器。通过 (*((unsigned int *)(0x40021400+0x00))),我们可以将一个无符号整数指针转换为指向地址为 0x40021400+0x00 的位置,然后对其进行读取或写入操作。

  2. #define GPIOF_OTYPER (*((unsigned int *)(0x40021400+0x04)))
    此宏定义用于访问 GPIOF 的 otyper 寄存器,使用方法同上。

  3. #define GPIOF_OSPEEDR (*((unsigned int *)(0x40021400+0x08)))
    此宏定义用于访问 GPIOF 的 ospeedr 寄存器,使用方法同上。

  4. #define GPIOF_PUPDR (*((unsigned int *)(0x40021400+0x0C)))
    此宏定义用于访问 GPIOF 的 pupdr 寄存器,使用方法同上。

  5. #define GPIOF_ODR (*((unsigned int *)(0x40021400+0x14)))
    此宏定义用于访问 GPIOF 的 odr 寄存器,使用方法同上。

  6. #define GPIOF_BSRR (*((unsigned int *)(0x40021400+0x18)))
    此宏定义用于访问 GPIOF 的 bsrr 寄存器,使用方法同上。

【2】led.c

#include "led.h"/*********************************引脚说明:LED0 -- PF9**********************************/void Led_Init(void){
    //将第5位置1  使能GPIOF组时钟  RCC_AHB1ENR |= (0x01<<5);  printf("RCC_AHB1ENR = -5%d",RCC_AHB1ENR);  //设置GPIOF9为输出模式  GPIOF_MODER &= ~(0x01<<19);  //19位清0  GPIOF_MODER |= (0x01<<18);  //18位置1  //设置GPIOF9为输出推挽  GPIOF_OTYPER &= ~(0x01<&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qt历险记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值