51单片机实训day3——点亮LED灯、闪烁LED灯(一)理论

news2025/1/17 0:54:32

内  容:编写代码实现LED灯的点亮功能

学  时:2学时

知识点:分析原理图、LED灯控制原理

重点:GPIO参数配置、LED原理图分析

难点:编写 GPIO参数配置函数、LED点亮函数

时间:2022年12月21日 9:00~11:50

目录

1. 软件需求分析是至关重要的一步 

2. STM32芯片架构简图

3. ICode总线

4. 驱动单元

DCode总线

系统总线

DMA总线

5. 被动单元

内部的闪存存储器

内部的SRAM

FSMC

6. GPIO和AFIO的概念

7. STM32 GPIO工作模式

8种工作模式:

led灯的点亮用推挽式输出而不是开漏输出的原因?

8. GPIO配置

9. 步骤流程


1. 软件需求分析是至关重要的一步 

2. STM32芯片架构简图

        芯片,这里指内核,或者叫CPU,和外设之间通过各种总线连接,其中驱动单元有4个,被动单元也有4个。为了方便理解,我们可以把驱动单元理解成是CPU部分,被动单元都理解成外设。

3. ICode总线

        ICode中的I表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在 FLASH中,内核要读取这些指令来执行程序就必须通过ICode总线,它几乎每时每刻都需要被使用,它是专门用来取指的。

4. 驱动单元

DCode总线

        DCode中的 D表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用C语言中的const关键字修饰,是放到内部的FLASH当中的,变量是可变的。不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被Dcode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

系统总线

        系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根总线来完成的。

DMA总线

        DMA总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的FLASH。因为数据可以被DCode总线DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

5. 被动单元

内部的闪存存储器

        内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode总线来取里面的指令

内部的SRAM

         内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode总线来访问它。

FSMC

        FSMC的英文全称是flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F10xx中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM,NANDFLASH和NORFLASH。但有一点我们要注意的是,FSMC只能扩展静态的内存,即名称里的S:static,不能是动态的内存,比如SDRAM就不能扩展。

6. GPIO和AFIO的概念

GPIO(General Purpose Input Output,通用输入输出接口)是MCU与外部电路和设备连接的基本外设。也就是常说的端口或引脚

AFIO(Alternate Function IO,复用功能IO)是指某些GPIO除了通用功能外还可以设置为一些外设专用的功能。

STM32F103有80个GPIO端口,其中的一些还可以把复用功能重新映射到其他引脚,已实现优化管脚数目和配置目的。

最多16个引脚为一组。

7. STM32 GPIO工作模式

        STM32 GPIO端口的每个位可以根据不同的功能,由软件配置成八种模式。

8种工作模式:

输入浮空:用于不确定高低电平的输入。

输入上拉:用于默认为上拉至高电平的输入。

输入下拉:用于默认为下拉至低电平的输入。

模拟输入:用于模拟量的输入。

开漏输出:用于实现电平转换和线与功能的输出。

推挽式输出:用于较大功率驱动的输出。

推挽式复用功能:复用功能情况下的推挽输出。

开漏复用功能:复用功能情况下的开漏输出。

led灯的点亮用推挽式输出而不是开漏输出的原因?

开漏输出只能输出逻辑电平‘0’和高阻态,不能输出高电平;用推挽电路能得到高低电平的快速切换。

8. GPIO配置

GPIO的配置,调用固件库的GPIO_init()函数。

函数的原型:GPIO_init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct );

参考GPIOx

9. 步骤流程

(1)结构体struct——>创建一个结构体变量

(2)使用外设要开启时钟频率——>第一次传参

(3)配置

        pin引脚

        speed(输出模式下设置)

        mode(工作模式:输入/输出;复用/非复用)

(4)init初始化

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

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

相关文章

实验1 数据库定义与操作语言实验

前言:实验本身并不是很难,照着实验指导书抄就行,不过注意有些sql语句和mysql语句是不相同的,需要进行一定的修改 数据集链接 实验1 数据库定义与操作语言实验 实验1.1 数据库定义实验 1.实验目的 理解和掌握数据库DDL语言&am…

指挥中心显示大屏类型简介

因工作需要,现在需要不断补充指挥中心建设过程中各种设备知识,怕被别人忽悠了也不知道,抓紧学习了解。今天学习大屏部分,目前来说,常见的显示大屏主要分为DLP拼接屏、LCD拼接屏和LED小间距大屏几种类型。 1、DLP大屏 …

【maven工程的pom.xml文件内部结构详解+maven工程的多层次依赖管理】

目录pom文件内部【结构详解】pom文件内部【依赖管理】1、依赖传递&#xff1a;2、依赖传递过程中&#xff0c;版本冲突&#xff1a;3、依赖传递过程中&#xff0c;对外隐藏主动断开&#xff1a;pom文件内部【依赖的作用范围】pom文件内部【结构详解】 <?xml version"…

【ARMv8 异常模型入门及渐进 11 - Linux 中断上下文 irq_enterirq_exit】

文章目录1.1 背景1.1.1 in_interrupt 定义1.1.2 irq_count 定义1.1.3 preempt_count 各域含义1.1.4 ARMv8 中断处理流程回顾1.1 背景 在 Linux 代码中经常会看到 WARN_ON(in_interrupt()); 或者 BUG_ON(in_interrupt()); 从名字可以看出这两句的含义是&#xff1a;如果当前处在…

运用手机多媒体之使用通知

文章目录使用通知将程序运行到手机上使用通知创建通知渠道通知的基本用法通知的进阶技巧setStyle()方法不同重要等级的通知渠道使用通知 将程序运行到手机上 在AS当中除了使用模拟器来运行我们的程序,还可以使用真机来运行我们写的程序想要将程序运行到手机上,首先需要将手机…

推荐系统学习笔记-推荐系统分布式离线训练

背景 在推荐、广告、搜索等互联网场景下&#xff0c;动则TB甚至PB级数据量。导致几乎不可能在传统单机环境下完成机器学习模型的训练。分布式机器学习训练成为称为唯一选择。 主要手段 • Spark MLlib • Parameter Server • Tensorflow Spark MLlib MLlib从功能上说与Sc…

如何利用地表温度遥感数据和气象资料计算农田地表水热通量

地表水热通量主要包括感热/显热通量和潜热通量&#xff0c;是陆-气交互以及水-热-碳循环研究的重要变量。其中&#xff0c;潜热通量是地表蒸散发的能量形式&#xff0c;对农业水资源管理、作物水分利用效率等非常关键。由于热红外遥感对地表干湿变化、以及农业干旱响应快速&…

WeakHashMap源码解析

WeakHashMap源码解析 简介 WeakHashMap 是一种 弱引用 map&#xff0c;内部的 key 会存储为弱引用&#xff0c;当 jvm gc 的时候&#xff0c;如果这些 key 没有强引用存在的话&#xff0c;会被 gc 回收掉&#xff0c;下一次当我们操作 map 的时候会把对应的 Entry 整个删除掉…

金融信息科技服务外包风险管理能力成熟度评估规范 学习笔记 附录下载地址

金融信息科技服务外包风险管理的范围 本标准规定了金融业信息科技服务外包风险管理能力成熟度评估体系以及对发包方和承包方的总体要求&#xff0c;分别对发包方、承包方的服务外包风险管理能力成熟度进行了分级定义&#xff0c;并规定了对发包方和承包方进行服务外包风险管理…

《OpenGL 模型》 渲染出帅气的暗影战士

模型Assimp流程网格模型效果Assimp 3D建模工具&#xff0c;可以让艺术家创建复杂的形状&#xff0c;Assimp库用于加载&#xff0c;如加载obj格式的文件到我们的程序之中&#xff0c;下载CMAKE用于构建该库&#xff08;会有很多问题&#xff09;&#xff0c;不过&#xff01;我…

【小程序】小程序代码的构成

目录 项目结构 1. 了解项目的基本组成结构 2. 小程序页面的组成部分 JSON配置文件 1. JSON 配置文件的作用 2. app.json 文件 3. project.config.json 文件 4. sitemap.json 文件 5. 页面的 .json 配置文件 6. 新建小程序页面 7. 修改项目首页 项目结构 1. 了解项…

别再用过时的方式了!全新版本Spring Security,这样用才够优雅!

基本使用 我们先对比下Spring Security提供的基本功能登录认证&#xff0c;来看看新版用法是不是更好。 升级版本 首先修改项目的pom.xml文件&#xff0c;把Spring Boot版本升级至2.7.0版本。 <parent><groupId>org.springframework.boot</groupId><art…

Lua 元表(Metatable)

在 Lua table 中我们可以访问对应的 key 来得到 value 值&#xff0c;但是却无法对两个 table 进行操作(比如相加)。 因此 Lua 提供了元表(Metatable)&#xff0c;允许我们改变 table 的行为&#xff0c;每个行为关联了对应的元方法。 例如&#xff0c;使用元表我们可以定义 …

STM32程序设计规范浅析

这篇博客写到“STM32基础知识篇”里&#xff0c;一方面是一个很好地对过往工作的总结&#xff0c;另一方面也是整个专栏撰写计划的开端&#xff0c;古人云&#xff1a;良好的开端是成功的一半&#xff0c;在文章的最后详细地规划了整个专栏后期的更新计划。 笔者前段时间休息的…

无人机遥感图像拼接与处理操作技术

【内容简述】&#xff1a; 无人机遥感图像采集流程&#xff1a; 无人机遥感监测介绍 无人机航线规划设计 无人机飞行软件操作 无人机航拍一般过程 无人机遥感图像拼接软件操作&#xff1a; Photoscan软件介绍 软件基本操作与实践 遥感图像拼接的一般流程 遥感图像分组拼接与点…

【centos】安装nvida CUDA平台附带安装cudnn库

目录1.安装 CUDAToolKit2.安装cudnn库1.安装 CUDAToolKit 使用 lspci | grep -i nvidia列出所有支持的GPU 安装内核开发依赖包&#xff1a; yum install kernel-devel查看内核版本号&#xff0c;用来看与开发包版本号是否一致&#xff1a; uname -r查看nvida显卡驱动&#…

设计模式之迭代器模式

Iterator design pattern 迭代器模式的概念、迭代器模式的结构、迭代器模式的优缺点、迭代器模式的使用场景、迭代器模式的实现示例、迭代器模式的源码分析 1、迭代器模式的概念 迭代器模式&#xff0c;即提供一种方法来顺序访问聚合对象内的元素&#xff0c;而不暴露聚合对象…

LeetCode HOT 100 —— 448. 找到所有数组中消失的数字

题目 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 思路 原地哈希&#xff08;简单模拟&#xff09;&#xff1a; 核心思路&#xff1a; 因为…

Python 和 PyQt5 实现打地鼠小游戏

Python 和 PyQt5 实现打地鼠小游戏 实现效果&#xff1a; 视频效果&#xff1a; https://live.csdn.net/v/264602https://live.csdn.net/v/264602 代码&#xff1a; import random import sysfrom PyQt5.QtCore import QBasicTimer, Qt, QTimer from PyQt5.QtGui import QCo…

CSS3【基础选择器、字体样式、文本样式、行高样式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录基础选择器1. 标签选择器2. 类选择器3. id选择器字体和文本样式1.字体样式1.1 字体大小1.2 字体粗细1.3 字体样式&#xff08;是否倾斜&#xff09;1.4 常见字体系列…