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

news2024/9/23 9:29:49

上节回顾

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<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1502858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

随机输一次(Python3)

大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现要求你编写一个控制赢面的程序&#xff0c;根据对方的出招&#xff0c;给出对应的赢招。但是&#xff01;为了不让对方意识到你在控制结果&#xff0c;你需要隔 K …

网络安全相关证书有哪些?

从事于信息安全工作的人们&#xff0c;在面对繁杂问题的时候&#xff0c;往往会有焦虑和烦躁的表现。一部分可能来自于系统和流程的实际漏洞&#xff0c;一方面可能是自身的能力还有部分短板。许多人认为庞杂的问题或多或少的难以下手&#xff0c;如果有好的方式能够同时解决这…

Linux报错排查-刚安装好的ubuntu系统无法ssh连接

Linux运维工具-ywtool 目录 一.问题描述二.问题解决2.1 先给ubuntu系统配置阿里云源2.2 安装openssh-server软件2.3 在尝试ssh连接,可以连接成功了 三.其他命令 一.问题描述 系统:ubuntu-18.04-desktop-amd64 系统安装完后,想要通过xshell软件连接系统,发现能Ping通系统的IP,但…

计算布尔二叉树的值

题目 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 题目描述 代码实现 class Solution { public:bool evaluateTree(TreeNode* root) {if(root->left nullptr && root->right nullptr) return root->val;bool left evaluateTree(root->left)…

CubeMX使用教程(6)——ADC模拟输出

本篇将利用CubeMX开发工具学习ADC&#xff08;模拟输出&#xff09;的使用 我们还是利用上一章的工程进行二次开发&#xff0c;这样方便 首先打开CubeMX进行相关配置 通过查看G431RBT6开发板有关模拟输出部分的原理图可知&#xff0c;模拟输出用到的IO口是PB15和PB12 接着我…

11、Linux-安装和配置Redis

目录 第一步&#xff0c;传输文件和解压 第二步&#xff0c;安装gcc编译器 第三步&#xff0c;编译Redis 第四步&#xff0c;安装Redis服务 第五步&#xff0c;配置Redis ①开启后台启动 ②关闭保护模式&#xff08;关闭之后才可以远程连接Redis&#xff09; ③设置远程…

接口自动化测试框架搭建:基于python+requests+pytest+allure实现

众所周知&#xff0c;目前市面上大部分的企业实施接口自动化最常用的有两种方式&#xff1a; 1、基于代码类的接口自动化&#xff0c;如&#xff1a; PythonRequestsPytestAllure报告定制 2、基于工具类的接口自动化&#xff0c;如&#xff1a; PostmanNewmanJenkinsGit/svnJme…

【Kotlin】类和对象

1 前言 Kotlin 是面向对象编程语言&#xff0c;与 Java 语言类似&#xff0c;都有类、对象、属性、构造函数、成员函数&#xff0c;都有封装、继承、多态三大特性&#xff0c;不同点如下。 Java 有静态&#xff08;static&#xff09;代码块&#xff0c;Kotlin 没有&#xff1…

和数软件:区块链技术的爆发与冲击

什么是区块链&#xff1f;它是如何发展而来的&#xff1f;应用在哪些领域&#xff1f;将会对我国的社会经济产生哪些重大影响&#xff1f; 什么是区块链 区块链作为一种底层技术&#xff0c;最早的实践是数字货币。根据最早的中本聪定义&#xff0c;区块链实质上是一种基于网…

人工智能|机器学习——Canopy聚类算法(密度聚类)

1.简介 Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。 Canopy聚类很少单独使用&#xff0c; 一般是作为k-means前不知道要指定k为何值的时候&#…

借助产品说明书模板,让你轻松制作产品说明书

产品说明书是一种普遍存在的文档&#xff0c;在我们日常生活和工作中&#xff0c;您可能需要为自己的产品或服务创建一个。这是因为产品说明书是介绍产品特性、使用说明、维护方式以及注意事项等内容的有效工具。然而&#xff0c;制作产品说明书可能是一个复杂且困难的过程&…

Python实现一个简单的主机-路由器结构(计算机网络)

说明 本系统模拟实现了一个路由器与两个主机节点。该路由器将接收原始以太网帧&#xff0c;并像真正的路由器一样处理它们&#xff1a;将它们转发到正确的传出接口&#xff0c;处理以太网帧&#xff0c;处理 IPv4 分组&#xff0c;处理 ARP分组&#xff0c;处理 ICMP 分组&…

太阳辐射环境模拟系统系统

太阳辐射环境模拟系统是一种高度专业化的设备&#xff0c;用于模拟太阳光的全谱段辐射&#xff0c;包括紫外线、可见光和红外线。这种系统的核心功能是在实验室条件下复制太阳的辐射条件&#xff0c;以评估材料、产品或设备在实际太阳辐射影响下的性能和耐久性。 应用领域&…

2024-03-05 linux 分区老显示满,Use 100%,原因是SquashFS 是一种只读文件系统,它在创建时就已经被填满,所有空间都被使用。

一、这两天一直纠结一个问题&#xff0c;无论怎么修改&#xff0c;linux 分区老显示满&#xff0c;Use 100%&#xff0c;全部沾满。如下图的oem分区。 二、导致出现上面的原因是&#xff1a;SquashFS文件系统里的空间利用率总是显示为100%。 三、SDK里面也说明SquashFS文件系统…

【洛谷 P8668】[蓝桥杯 2018 省 B] 螺旋折线 题解(数学+平面几何)

[蓝桥杯 2018 省 B] 螺旋折线 题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点 ( X , Y ) (X, Y) (X,Y)&#xff0c;我们定义它到原点的距离 dis ( X , Y ) \text{dis}(X, Y) dis(X,Y) 是从原点到 ( X , Y ) (X, Y) (X,Y) 的螺旋折线段的长度。 例如 …

武汉灰京文化:手机游戏行业创新与机遇引领着无限潜力的繁荣

近年来&#xff0c;手机游戏行业迎来了前所未有的繁荣&#xff0c;这主要得益于新技术的飞速发展和硬件的不断升级。市场研究机构预测&#xff0c;到2025年&#xff0c;全球手机游戏市场将超过2000亿美元。这一惊人的增长数据充分体现了手机游戏行业的活力和无限潜力。手机游戏…

appium2的一些配置

appium-desktop不再维护之后&#xff0c;需要使用appium2。 1、安装appium2 命令行输入npm i -g appium。安装之后输入appium或者appium-server即可启动appium 2、安装安卓/ios的驱动 安卓&#xff1a;appium driver install uiautomator2 iOS&#xff1a;appium driver i…

21 easy 1. 两数之和

//给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 // // 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 // // 你可以…

代码随想录 回溯算法-棋盘问题

目录 51.N皇后 37.解数独 51.N皇后 51. N 皇后 困难 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &…

GESP5级T1真题 [202309] 因数分解——O(sqrt(n))的时间复杂度,值得一看

描述 每个正整数都可以分解成素数的乘积&#xff0c;例如&#xff1a;62*3、2022 *5 现在&#xff0c;给定一个正整数N&#xff0c;请按要求输出它的因数分解式。 输入描述 输入第一行&#xff0c;包含一个正整数N。约定2<N<10^12 输出描述 输出一行&#xff0c;为N…