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

2024-03-09 17:52

本文主要是介绍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<

这篇关于STM32 | STM32F407ZE(LED寄存器开发续第二天源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/791472

相关文章

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S