MCU点灯实验小结

news/2024/7/3 21:47:44/文章来源:https://www.cnblogs.com/cino/p/18272119

设备采用芯片:STM32F407ZET6

4个LED灯,网络标号分别为LED0 ,LED1,FSMC D10,FSMC D11。对应的引脚号分别为PF9,PF10,PE12,PE13。

GPIO外设基本概念

General-Purpose Input Output,通用型输入输出的,也简称I/O口,有时也简写为IO口。用于电信号的传递,以实现与外部器件的通信、控制外部器件或者采集外部器件数据的功能。(在本次所用芯片中,共有114个GPIO引脚。)

对于MCU设备和传感器之间,一般采用TTL电平信号,即传输的电平信号>2.4V就表示高电平,<0.4V就表示低电平。(另外还有RS232RS485标准)

一般IO口的命名是由P(Pin)开头,分为很多组(端口),以字母AH来命名,每个组(端口)有16个引脚,引脚的编号为015,所以如端口A引脚范围: PA0 ~ PA15 端口B引脚范围:PB0~PB15。

第一步 . 查找相应部分的原理图

第二步 .分析原理图

如上图所示,该处发光二极管为单向导电性,输出电平信号0才能使电路走通。如果输出电平信号1,则二极管两端电压平衡,无法形成电流。

发光二极管需要单独深入学习。

第三步 . 程序设计

1. 亮灯代码实例部分展示:

//1.定义变量
GPIO_InitTypeDef  GPIO_InitStructureF;//F端口
GPIO_InitTypeDef  GPIO_InitStructureE;//E端口
int main()//中文注释
{//2.时钟控制RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//3.设置结构体变量 F端口GPIO_InitStructureF.GPIO_Pin =  GPIO_Pin_9| GPIO_Pin_10;GPIO_InitStructureF.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructureF.GPIO_OType = GPIO_OType_PP;//推挽模式PP(都可以输出),开漏输出OD(只能输出低电平)GPIO_InitStructureF.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructureF.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOF, &GPIO_InitStructureF);//3.设置结构体变量 E端口GPIO_InitStructureE.GPIO_Pin =  GPIO_Pin_13| GPIO_Pin_14;GPIO_InitStructureE.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructureE.GPIO_OType = GPIO_OType_PP;GPIO_InitStructureE.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructureE.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOE, &GPIO_InitStructureE);while (1){//亮灯GPIOF->BSRRL =GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_13| GPIO_Pin_14;GPIOE->BSRRL = GPIO_Pin_13| GPIO_Pin_14;return 0;
}

2. 代码拆分:

定义外设的结构体变量

GPIO外设结构体原型及代表含义如下:

typedef struct
{uint32_t GPIO_Pin;              //指定要配置的GPIO引脚。此参数可以是以下参数之一,设置与引脚号对应的编号/*
#define GPIO_Pin_0                 ((uint16_t)0x0001)  
#define GPIO_Pin_1                 ((uint16_t)0x0002) 
...
#define GPIO_Pin_15                ((uint16_t)0x8000)  
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  
...
*/GPIOMode_TypeDef GPIO_Mode;     // 指定选定引脚的操作模式,设置为以下参数之一/*GPIO_Mode_IN   = 0x00, //输入模式,用得较多GPIO_Mode_OUT  = 0x01, //输出模式,用的最多GPIO_Mode_AF   = 0x02, //复用模式,偶尔用GPIO_Mode_AN   = 0x03  //模拟模式*/GPIOSpeed_TypeDef GPIO_Speed;   // 指定选定引脚的速度,设置为以下参数之一,输出速度指的是引脚电平的翻转速度,如果选择高速,则会增加功耗和噪声。/*GPIO_Low_Speed     = 0x00, //2MHzGPIO_Medium_Speed  = 0x01, //25MHzGPIO_Fast_Speed    = 0x02, //50MHzGPIO_High_Speed    = 0x03  //100MHz*/GPIOOType_TypeDef GPIO_OType;  //指定选定引脚的操作输出类型,设置为以下参数之一/*GPIO_OType_PP = 0x00, //推挽输出,可以输出高和低电平GPIO_OType_OD = 0x01  //开漏输出,只能输出低电平,不能输出高电平*/GPIOPuPd_TypeDef GPIO_PuPd;     //指定选定接点的操作上拉/下拉,即GPIO引脚的内部电阻,设置为以下参数之一/*GPIO_PuPd_NOPULL = 0x00,GPIO_PuPd_UP     = 0x01,//上拉电阻,当外部没有电平输入或输出时,可以给GPIO引脚一个默认的高电平状态GPIO_PuPd_DOWN   = 0x02//下拉电阻,当外部没有电平输入或输出时,可以给GPIO引脚一个默认的低电平状态*/}GPIO_InitTypeDef;
时钟控制

打开GPIO的外设时钟

 //函数原型void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);//用法示例RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

​ 因为STM32属于低功耗的MCU,而为了降低功耗,所以STM32的MCU在复位之后默认会关闭绝大多数的外设的时钟,所以用户想要使用MCU内部的某个外设,就必须打开该外设的时钟(clock)。

对GPIO外设的初始化结构体中成员进行赋值

根据GPIO外设结构体原型,对每一个结构体成员进行赋值,解释如下:

GPIO_InitStructureE.GPIO_Pin =  GPIO_Pin_13| GPIO_Pin_14;//对13和14引脚进行操作
GPIO_InitStructureE.GPIO_Mode = GPIO_Mode_OUT;//输出模式
GPIO_InitStructureE.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructureE.GPIO_Speed = GPIO_Speed_100MHz;//设置速率,默认选最高
GPIO_InitStructureE.GPIO_PuPd = GPIO_PuPd_NOPULL;
通过init函数对把GPIO结构体中的值写入到GPIO端口寄存器,完成初始化
 //函数原型void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);//用法示例GPIO_Init(GPIOE, &GPIO_InitStructure);

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南昌航空大学-23201406-耿乐-第三次OOP博客作业

对于最后两次题目集中的题目和做题情况的总结,包括电路模拟程序3和4。 一、前言总结两次题目集的题目情况关于题目集 最后两次题目集中都只有一道题目,是电路模拟程序的系列迭代,没有额外的题目。 题目本身 第七次题目集中的电路模拟3并不是太难,只要理清题目中的要求和电路…

记录c#开发Windows服务的过程

1.新建Windows服务项目 2.重命名Service1.cs 3.添加安装程序 4.修改service,修改信息如下:备注:ServiceName和安装后的服务名保持一致哦!!!5.修改serviceProcessInstaller1 6.编辑TransService代码 7.添加新项目窗体应用程序 代码:1 using System;2 using System.Win…

操作系统启动的过程

目录操作系统,启动!大致过程重要程序bootsect.ssetup.shead.s 操作系统,启动! 大致过程 ​ 计算机的工作方式是取指执行,而执行其的前提是内存中有代码。操作系统刚开始并不是在内存中,而是在磁盘上,因此第一步需要将其以一定的方式从磁盘读入内存。(1)x86PC刚开机时C…

(我个人的)atcoder我的补题记录汇总

2024.06.27 : 根据题目难度和standing最后提交人数是否补题,大概在难度600及以下的 补完2024.06.22及之前的

最近在读《谁说菜鸟不会数据分析 SPSS篇》pdf分享

《谁说菜鸟不会数据分析(SPSS篇)》继续采用职场三人行的方式来构建内容,细致梳理了准专业数据分析的常见问题,并且挑选出企业实践中最容易碰到的案例,以最轻松直白的方式来讲好数据分析的故事。谁说菜鸟不会数据分析 SPSS篇 《谁说菜鸟不会数据分析(SPSS篇)》继续采用职…

TypeScript实现贪吃蛇效果

项目参考教程:贪吃蛇案例1.项目搭建 1.1 项目结构搭建 创建一个名为xxx的项目 项目初始化 npm init -y 安装后面需要用到的依赖,在package.json中查看 项目根目录创建名为tsconfig.json的文件并更改内容如下: {"compilerOptions": {"module": "ES2…

m基于Googlenet深度学习的运动项目识别系统matlab仿真,包括GUI界面

1.算法仿真效果 matlab2022a仿真结果如下: 2.算法涉及理论知识概要基于GoogLeNet深度学习的运动项目识别系统,是利用深度神经网络技术,尤其是GoogLeNet架构,来自动识别视频或图像中的人类运动类型的过程。GoogLeNet(也称为Inception网络)在2014年由Google团队提出,因其高…

模拟集成电路设计系列博客——7.5.6 时间交错型ADC

7.5.6 时间交错型ADC 我们可以通过将多个ADC做并行来实现非常高速的ADC[Black, 1980]。下图展示了一个四通道时间交错型ADC的架构图:此处,\(\phi_0\)是一个四倍于\(\phi_1\)到\(\phi_4\)的速率的时钟。此外,\(\phi_1\)到\(\phi_4\)彼此都落后一个\(\phi_0\)的周期。这样每个…

(构造) CF1758D Range = √Sum

题意:思路:先钦定这个序列的和为4n^{2} ,那么差值就是2n 考虑一个初始序列1,2,3,⋯,n−1,2n+1.现在我们要做的就是将这个序列变成合法的我可以进行整体都+x的操作使得这个序列的和尽量逼近4n^{2}。直接算出每个数应该加上的x,还会有一点剩余,加到a[n-1]上即可,a[n-1]+n=…

Java探秘:揭秘栈帧的神秘面纱与内存占用之谜

哈喽,大家好,我是木头左!深入理解Java栈帧 在Java虚拟机(JVM)的运行时数据区中,每一个线程都有自己的栈(Stack),而栈中的每一个元素就是一个栈帧(Stack Frame)。当一个方法被调用时,一个新的栈帧会被创建并压入到栈中。这个栈帧包含了方法的局部变量、参数以及返回地…

数据库和Flask项目搭建

1 sqlalchemy原生操作 # 操作原生sql ---》用得少 import pymysql import threading # 1 导入 from sqlalchemy import create_engine from sqlalchemy.engine.base import Engine # 2 创建引擎 engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/cnblog…

flask定制Excel命令

定制excel命令并插入到数据库中 import osfrom flask import Flask from flask.cli import AppGroup import click import pymysql from openpyxl import load_workbookapp = Flask(__name__)@app.cli.group() def excel():"""Excel related commands."&qu…

flask的简单使用

1 flask介绍 #1 python 界的web框架-Django:大而全,你要的东西都有 [orm,缓存,认证]django-ninja-flask:小而精,所有web开发需要的东西,借助于第三方集成-web.py-----同步框架--进程线程架构--3.x以后支持异步--tornado sanicfastapi:高性能小而精,借助于第三方:orm…

模拟集成电路设计系列博客——7.5.5 折叠型ADC

7.5.5 折叠型ADC 我们刚了解完输入放大器的数量如何通过插值型架构来减少。但是对于一个N bit的ADC来说,仍然需要\(2^N\)个锁存比较器。这个大量的比较器数量可以通过折叠型ADC架构来减少。折叠型ADC架构类似于两步型ADC,一组LSB分离于一组MSB进行独立的查找。但是,相比两步…

240627构造

20240627构造专题 写在前面:出场即巅峰(明日模拟赛RP++) 一.何为构造 就是通过对一道题题面的分析可以发现某种规律(类似于不完全归纳法),然后发掘本质,就可以很快的解题,但是显然我还没有掌握 二.一些技巧 1.寻找特殊性质,从而求解 2.估算上界(也就是对最优情况进行…

别人工作8小时,我只需1小时!这些宝藏网站我都替你收集好了!

mac免费应用,效率工具,编程工具,设计网站,图片网站,通通一网打尽软件mac应用下载 很多破解版应该都可以找到snipaste: 截图工具,快捷截图,贴图等功能。幕布: 快速编辑思维导图。sublime text: 文档编辑器(打开速度贼快)。visual studio code: 新一代编辑器(插件非常…

VLC工具使用指南

一、引言 VLC(VideoLAN Client)是一款功能强大的免费开源跨平台多媒体播放器和框架,能够播放大多数多媒体文件以及DVD、音频CD、VCD和各种流媒体协议。无论是本地视频文件还是网络视频流,VLC都能轻松应对。本文将详细介绍VLC工具的基本用法和高级功能。 二、安装与设置 下载…

递归示例-指定数字以内的所有排列组合(Reduce)

指定数字以内的所有排列组合: 定义名称版:=pmtt(指定数字)pmtt=LAMBDA(x,IF(x=1,1,VSTACK(pmtt(x-1),REDUCE(SEQUENCE(x),SEQUENCE(,x-1)^0*x,LAMBDA(a,b,TOCOL(a&SEQUENCE(,b)))))))不定义名称版:=LET(fx,LAMBDA(npmtt,x,IF(x=1,1,VSTACK(npmtt(npmtt,x-1),REDUCE(SEQU…

nodejs解压zip/rar文件到本地,并获取到解压进度

方案:解压到本地的大小 / zip文件总大小(解压后的) ,得出解压进度 先得出解压后的文件大小,然后解压到本地const AdmZip = require("adm-zip"); const JSZip = require(jszip);// 指定ZIP文件的路径 const admZip = new AdmZip("D:\\Users\\whr4220\\Downloa…