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

上节回顾

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. TCP协议是安全的吗?

    2024-03-15 22:22:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 22:22:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 22:22:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 22:22:01       20 阅读

热门阅读

  1. 【力扣二刷思路】DAY3

    2024-03-15 22:22:01       16 阅读
  2. 使用回溯法解决leetcode 1219

    2024-03-15 22:22:01       23 阅读
  3. 几种ADG搭建方式,汇总整理!

    2024-03-15 22:22:01       19 阅读
  4. 大量数据的优化之虚拟滚动和web workers

    2024-03-15 22:22:01       19 阅读
  5. 蓝桥集训之奶牛选美

    2024-03-15 22:22:01       17 阅读
  6. 乘积尾零 2018年第九届蓝桥杯省赛

    2024-03-15 22:22:01       20 阅读
  7. 2024.3.9每日一题

    2024-03-15 22:22:01       18 阅读
  8. mysql binlog自动删除与手动删除

    2024-03-15 22:22:01       19 阅读
  9. 老卫带你学---leetcode刷题(189. 轮转数组)

    2024-03-15 22:22:01       20 阅读
  10. 【算法-特征选择】reliefF算法实现

    2024-03-15 22:22:01       21 阅读
  11. 百科 | 光伏电站如何开展运维工作?

    2024-03-15 22:22:01       22 阅读
  12. BUG解决-Modelsim打开许可证件不可用

    2024-03-15 22:22:01       18 阅读