STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程
1、门电路
门电路组成简单加法器:
二进制对电路的影响:
0和1代表无和有;
以下图例,演示与门:左1右1输出1;
电平标准:使用不同的电压表示数字0和1;
高电平:1;
低电平:0;
CMOS标准:3.3v标准;
TTL标准:
储存器:
RAM:随机储存器;ROM:只读储存器;
运算器:加法器,寄存器;
单片机编程可以理解为寄存器编程;
特殊功能的寄存器SFR:
控制外设,中断,定时/计数等功能;
程序状态寄存器(PSW):
存放ALU(算数逻辑单元)的操作状态特征,进位标志、溢出标志等;
堆栈指针寄存器(SP):
指示堆栈顶部位置,支持堆栈操作实现;
数据指针寄存器(DPTR):
通常是16位,用于储存数据存储器或程序储存器的地址信息,支持间接寻址操作;
中断允许寄存器(IE)和中断优先级寄存器(IP):
管理和控制中断请求,包括中断的允许,禁止,优先级设置;
定时/计数寄存器:
测量时间间隔、周期和频率;
I/O端口寄存器(p0,p1,p2,p3):
用于控制单片机的输入输出端口,包括端口的方向设置,输出状态的读取和写入以及输入状态的读取操作;
要操作GPIO,就要操作能影响GPIO的寄存器,给SFR一个固定的值来操作寄存器,还要搞清楚GPIO的地址;
控制器:
程序计数器PC,指令寄存器IR,指令译码器ID,时许控制电路;
运算器+控制器 = 中央处理器(CPU);
认识STM32F1:
32位微控制器;
MCU:微控制单元--单片机
控制:(了解)
单片机的作用,优势(低功耗,成本,性能)
学习stm32目标:
直接控制功能模块(单片机外设);
主控芯片--子芯片(主控芯片通过单片机通信协议分发任务给子芯片(单片机协议))
目标:
学外设:GPIO TIM USART ADC
学外设组合使用:
学特殊机制:中断,协议(协议匹配)
了解单片机的命名规则(以STM32F103C8T6A为例子):
C:44引脚;8表示64kb闪存;
了解闪存:
闪存(Flash Memory)是一种非易失性存储器,它允许数据在断电后仍然保留,并且可以被多次擦除和写入。以下是关于闪存的详细介绍:
- 定义:闪存是一种电子式可清除程序化只读存储器的形式,它能够在断电后保持数据不丢失。
- 特征:长寿命的非易失性,即数据在断电后仍能长时间保存。
闪存存放烧录的代码;
了解GPIO:
General Purpose Input/Output,通用输入输出接口
通过数据手册查看电平标准;电气特性;IO端口特性等信息;
通用输出:
高电平2.4-3.6
低电平-0.4-0.5
共地:
点灯--输出--proteus(仿真平台)
了解影响GPIO的寄存器(SFR):
通过寄存器地址对寄存器的赋值操作对应的位,来影响GPIO;
每一组GPIO都有独立的寄存器;
每个IO端口可以自由编程,来配置不同的模式;
一个io端口位的基本结构:
推挽模式和开漏模式:
MOS管结构:
推挽模式:
推挽模式下:P-MOS管和N-MOS管都打开,当输出数据寄存器输出高电平1时,经过输出控制(输出控制取反),P-MOS的N-MOS的G极都是低电平,VDD是高电平,Vss是低电平,此时只有P-MOS导通,IO引脚为高电平,外接低电平导通,表现为推;反之:当输出数据寄存器输出低电平0时,经过输出控制(输出控制取反),P-MOS的N-MOS的G极都是高电平,VDD是高电平,Vss是低电平,此时只有N-MOS导通,IO引脚为低电平,外接高电平导通,表现为挽;
开漏模式:
开漏模式下:P-MOS管关闭,输出数据寄存器为高电平1时,经过输出控制变成低电平,此时N-MOS管表现为不导通,此时的io引脚表现为高阻态;当输出数据寄存器为低电平0时,经过输出控制变成高电平,此时N-MOS管表现为导通,IO引脚为低电平,若外接电路,可以通过输出控制外接电路的导通与短路;以灯泡为例;
仿真平台proteus:
创建工程的选项:
1、选择芯片型号:
2、选择软件组件:
1、添加元器件:选择元器件模式,按P,进入选择元器件模式的选择页面,有搜索框可以直接搜索
2、选择终端模式:选择终端模式,选到POWER,可以选择供电;
3、连接电路:
PAI:16个引脚为一组;编号0-15;
4、点击stm32芯片设置代码源文件和晶振频率;
5、配置供电网:
给VCC/VDD配置:(高电平)
给GND配置:(低电平)
了解GPIO的使用:
1、找寄存器地址:
寄存器的地址:
偏移地址:寄存器的详细描述;
基地址:基地址范围的左边地址
通过基地址加上偏移地址的形式找到寄存器;
2、通过寄存器的赋值操作寄存器的工作模式:
四个位控制一个引脚,一共16个引脚,需要64位,一个寄存器32位所以需要两个寄存器;
寄存器:
端口配置低寄存器(GPIOxCRL)
[3-0] = 0001;
端口输出数据寄存器(GPIO)
3、使能和失能:
失能:失能是MCU(微控制单元)的默认模式,该模式基于低能耗的原则,保证设备是处于关闭状态,来达到低耗能的目的;
使能:使能是MCU的供能模式,通过对使能寄存器的赋值操作改变模式,使其从失能模式变为使能模式,从而启动MCU的模式;
要让其他寄存器运行需要先把使能寄存器设置为使能模式
外设挂载在外设上;通过APB2操作外设使能寄存器;
RCC基地址+偏移量操作寄存器;
了解代码编辑平台keil5:
1、设置编码格式:
2、设置生成HEX File
了解总线:
系统总线(System Bus)是计算机系统中一个至关重要的组件,它作为连接计算机系统主要部件的桥梁,承担着数据传输、地址指定和控制信号传输等多重任务。以下是关于系统总线的详细解析:
一、系统总线的定义与功能
系统总线是一个单独的计算机总线,用于连接计算机系统的主要组件,如CPU、内存和输入输出接口等。其主要功能包括:
- 数据传输:通过数据总线(Data Bus,DB)实现CPU与存储器、输入输出接口等部件之间的数据交换。
- 地址指定:通过地址总线(Address Bus,AB)确定数据传输的目的地,即指定CPU访问的存储单元或外设的地址。
- 控制信号传输:通过控制总线(Control Bus,CB)传输各种控制信号和时序信号,协调各部件之间的操作。
二、系统总线的分类
系统总线按照传递信息的功能来分,主要分为以下三类:
- 控制总线(Control Bus,CB)
- 主要用来传送控制信号和时序信号。
- 控制信号包括读/写信号、片选信号、中断响应信号等,也有来自其他部件的反馈信号,如中断申请信号、复位信号等。
- 控制总线的传送方向通常是双向的,其位数根据系统的实际控制需要而定。
- 数据总线(Data Bus,DB)
- 是双向三态形式的总线,用于CPU与存储器、输入输出接口等部件之间的数据交换。
- 数据总线的位数是微型计算机的一个重要指标,通常与微处理器的字长相一致。
- 数据总线上传输的数据可以是真正的数据、指令代码、状态信息或控制信息。
- 地址总线(Address Bus,AB)
- 由CPU或有DMA(直接内存访问)能力的单元使用,用于沟通这些单元想要存取(读取/写入)的内存地址。
- 地址总线的宽度决定了系统能够访问的内存空间大小。
三、系统总线的作用与特点
- 作用:系统总线在微型计算机中扮演着类似于人体神经中枢的角色,通过它将CPU、内存、输入输出接口等部件紧密地连接在一起,实现了计算机内部各部件之间的信息交换和协同工作。
- 特点:
- 模块化:系统总线的开发促进了计算机系统的模块化设计,使得计算机系统的扩展和升级变得更加容易。
- 高效性:通过系统总线传输数据和控制信号,可以大大提高计算机系统的数据传输速率和整体性能。
- 灵活性:系统总线的设计使得人们可以根据自己的需要,将不同规模和类型的内存和接口接到系统总线上,形成各种规模的微型计算机。
1、时钟:
仿真:没有加外部时钟电路,使用内部时钟振荡器产生的时钟信号;
不仿真:来自晶振;
晶振时钟(Crystal Oscillator Clock)
晶振时钟是指通过晶体振荡器产生的稳定时钟信号。晶体振荡器是一种能够产生高精度、高稳定度频率的电子元件,它利用石英晶体的压电效应,在外部电路的作用下产生稳定的振荡频率。这个频率通常被用作系统的基准时钟源,因为它具有极高的稳定性和准确性。
在大多数计算机和嵌入式系统中,CPU和其他关键组件的时钟信号都是由晶振提供的。晶振产生的时钟信号经过分频、倍频等处理后,可以生成不同频率的时钟信号,以满足系统不同部分的需求。
系统时钟(System Clock)
系统时钟是一个更广泛的概念,它指的是整个系统内部用于同步和驱动各种操作的时钟信号。在计算机系统或嵌入式系统中,系统时钟可能由多个时钟源组成,但其中最重要的是由晶振产生的基准时钟信号。
系统时钟不仅用于CPU的执行,还用于控制外设的通信速率、管理中断和异常、记录系统时间等。系统时钟的准确性和稳定性对系统的整体性能和可靠性至关重要。
两者之间的关系
- 晶振时钟是系统时钟的基础:在大多数系统中,系统时钟的基准信号是由晶振产生的。晶振的高稳定性和准确性保证了系统时钟的可靠性。
- 系统时钟是晶振时钟的扩展和应用:系统时钟不仅包含了晶振产生的基准信号,还包含了经过处理后的各种时钟信号,这些信号被用于系统的各个部分。
时钟来自系统时钟(晶振时钟),系统时钟分给AHB总线,AHB总线分给APB总线;
编写STM32代码:
通过宏定义找到寄存器,基地址+偏移地址
对寄存器赋值,通过取反操作,与或非的操作来达到对寄存器固定位置的赋值;从而使得寄存器处于特定的模式对引脚输出不同的电平;达到控制电路的目的;
while(1):防止跑飞,使得单片机内部一直跑这个代码;
单片机内部暂时没有操作系统,所以编写c代码不用return;
设置GPIO某个引脚输出高低电平的步骤:
1、使能GPIO(RCC)
因为GPIO挂载在APB2这一条数据总线上,所以要通过APB2使能GPIO;因为LED挂载于IO端口A;所以IO端口A置1写使能;
2、设置通用推挽输出,10Mhz(工作模式)(CRL)
3、操作端口输出寄存器;(ODR)
案例1:通过设置推挽中的挽,时LED点亮;
仿真proteus结果:
设施端口输出寄存器输出1;
#define GPIOA_CRL *(int *) (0x40010800 + 0x00)#define GPIOA_ODR *(int *) (0x40010800 + 0x0c)#define RCC_APB2ENR *(int *) (0x40021000 + 0x18)int main(){//GPIO --失能Disable --低功耗;默认失能;//使能GPIO-- Enable--才能正常工作,也会开始消耗电能;RCC_APB2ENR |= (0x01 << 2);//第二位置1;//设置PA0 --通用推挽输出,10Mhz输出速度;GPIOA_CRL &= ~(0xf << 0);//0GPIOA_CRL |= (0x01 <<0);//输出低电平 第0位清零GPIOA_ODR &=~(0x01 <<0);while(1);
}
案例2:
操作端口2
相关文章:

STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程
1、门电路 门电路组成简单加法器: 二进制对电路的影响: 0和1代表无和有; 以下图例,演示与门:左1右1输出1; 电平标准:使用不同的电压表示数字0和1; 高电平:1࿱…...

【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树
整数拆分 题目🔗 题目描述 给定一个正整数 n ,将其拆分为 k个正整数的和(k > 2),并使这些整数的乘积最大化。 返回你可以获得的最大乘积 。 思路分析 dp数组含义:dp[i]表示整数i拆分后的最大乘积。…...

网页上预览Excel文件
如何运行: 需要发布在服务器 如Tomcat 实例图片: 需要展示的文件: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>excel预览</title><link rel"stylesheet" href"…...

Unity射击游戏开发教程:(31)制造一定追踪行为的敌人
在本文中,我们将介绍如何在两种敌人行为之间切换。本文是前两篇文章的延续,分别介绍了敌人躲避玩家射击以及敌人不断旋转并向玩家射击的情况。我只是介绍如何在这两种行为之间进行转换。 这种新的敌人行为的目标: 当不开火时,敌人可以躲避玩家的射击。射击时,敌人无法躲避…...

springboot mybatis plus 固定查询条件及可选查询条件的组合查询,使用QueryWrapper.and()来解决。
1、我们在写查询SQL的时候,经常会碰到,比如,同一个类别下的某一个编号的物料信息,或者是同一批次的物料库存问题等等。 所属类别fid物料编号bm物料批次pc110.01.0220240807110.01.0320240807 210.02.0120240805 2、那么我…...

使用ollama取代openai的api进行graphRAG失败记录
pip install ollama pip install langchain_ollama graph_documents llm_transformer.convert_to_graph_documents(split_documents) print(graph_documents) 偶尔会成功,但是大部分是失败的: 报错记录如下,暂时没想到好的办法ÿ…...

MyBatis 配置与测试方式
目录 一,什么是MyBatis 二,准备工作 创建项目 配置数据库连接 持久层代码 单元测试 一,什么是MyBatis 简单来说,MyBatis 是一款优秀的持久层框架,用于简化JDBC的开发,能更简单完成程序与数据库之间…...

C#实现代理服务器
在C#中实现一个简单的代理服务器,可以使用System.Net.Sockets命名空间下的TcpListener类来监听客户端的连接请求,并使用TcpClient来处理与客户端的通信。以下是一个简单的代理服务器示例: using System; using System.IO; using System.Net;…...

react的路由实战使用
环境配置:vitetsreact18 1、安装包 npm i react-router-dom 2、 根路由配置以及路由挂载 a、在src下面创建router文件夹配置简单的路由信息: router/index.tsx import { createBrowserRouter } from "react-router-dom"; import UserLogin…...

python 字典转成类 构建类
目录 python 字典转成类 复杂嵌套示例: 动态实例化类 太好用了! python 字典转成类 class DictToClass:def __init__(self, dictionary):for key, value in dictionary.items():if isinstance(value, dict):# 如果值是字典,递归转换为类的实例setattr(self, key, DictToC…...

springboot 过滤器
1、过滤器的实现 springboot中过滤器通过实现接口Filter并重写init、doFilter、destroy三个方法。在三个方法中加入自己的业务逻辑处理。 【注意】Filter接口的完整包名在不同的jdk版中中的变化。这里示例中使用的版本为 open-jdk17。完整名称 jakarta.servlet.Filter。如果使…...

【C语言篇】深入理解指针1
文章目录 内存和地址内存编址 指针变量和地址取地址操作符指针变量和解引用操作符指针变量指针变量类型解引用操作符指针变量的大小 指针变量类型的意义指针的解引用指针-整数void*指针 const修饰指针指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因如何规避野指针…...

IAP程序升级 与 电脑BIOS 的关系
IAP (In-Application Programming) 程序升级 IAP程序升级是一种技术,允许设备在运行过程中更新其自身的固件或软件,而不需要外部工具或设备的介入。这种技术特别适用于嵌入式系统和物联网(IoT)设备。其主要由三部分构成࿰…...

Java使用MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的、基于发布/订阅模式的物联网通信协议。它构建于TCP/IP协议之上,由IBM在1999年发布。MQTT的主要特点包括: 轻量级与高效:M…...

等级+时间的优先级算法
简介 本算法为等级与时间结合计算对应优先级逻辑 等级越高者优先级越高 同等级下,时间越小者优先级越高 实现 主方法 calculatePriority import com.zk.blog.enums.TypeEnum; import org.apache.commons.lang3.StringUtils;/*** program: * description:* autho…...

物流仓库安全视频智能管理方案:构建全方位、高效能的防护体系
一、背景分析 随着物流行业的快速发展和仓储需求的日益增长,仓库安全成为企业运营中不可忽视的重要环节。传统的人工监控方式不仅效率低下,且难以做到全天候、无死角覆盖,给仓库资产和人员安全带来潜在风险。因此,引入仓库安全视…...

jackson反序列化漏洞
jackson反序列化漏洞 反序列化漏洞触发根因jackson介绍jackson反序列化漏洞关键点enableDefaultTypingactivateDefaultTypingJsonTypeInfo 漏洞触发场景漏洞复现环境引入依赖pocactivateDefaultTypingenableDefaultTypingJsonTypeInfo 参考 很久没写blog,最近慢慢开…...

Java | Leetcode Java题解之第328题奇偶链表
题目: 题解: class Solution {public ListNode oddEvenList(ListNode head) {if (head null) {return head;}ListNode evenHead head.next;ListNode odd head, even evenHead;while (even ! null && even.next ! null) {odd.next even.nex…...

100 Exercises To Learn Rust 挑战!准备篇
公司内部的学习会非常活跃!我也参与了Rust学习会,并且一直在研究rustlings。最近,我发现了一个类似于rustlings的新教程网站:Welcome - 100 Exercises To Learn Rust。 rustlings是基于Rust的权威官方文档《The Rust Programming…...

瑞_RabbitMQ_初识MQ
文章目录 1 初识MQ1.1 同步调用1.1.1 同步调用的优势1.1.2 同步调用的缺点 1.2 异步调用1.2.1 异步调用的角色1.2.2 异步调用的优势1.2.3 异步调用的缺点1.2.4 异步调用的场景 1.3 MQ技术选型 2 RabbitMQ2.1 安装2.1.1 资源准备2.1.2 安装步骤 2.2 RabbitMQ架构2.3 RabbitMQ管理…...

系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
虚拟内存 虚拟内存是一种操作系统提供的机制,用于将每个进程分配的独立的虚拟地址空间映射到实际的物理内存地址空间上。通过使用虚拟内存,操作系统可以有效地解决多个应用程序直接操作物理内存可能引发的冲突问题。 在使用虚拟内存的情况下࿰…...

Java每日一练_模拟面试题5(堆和栈的区别)
在Java中,堆(Heap)和栈(Stack)是两个不同的内存区域,它们在存储内容、管理方式、空间大小、分配方式等多个方面存在显著的区别。以下是Java中堆和栈的主要区别: 1. 存储内容不同 堆࿱…...

传感器校正和测试
是 一。舵机在使用过程中为了防止手动扭动损坏其中的齿轮,一般会使用代码测试并校正到0位。 #include <Servo.h> Servo myservo; // 创建一个Servo对象 // 连接到舵机信号线的Arduino引脚 int servoPin 9; void setup() { myservo.attach(servoPin…...

Eclipse 悬浮提示:提高编程效率的利器
Eclipse 悬浮提示:提高编程效率的利器 引言 在当今的软件开发领域,Eclipse 是一款广受欢迎的集成开发环境(IDE)。它以其强大的功能和灵活性而著称,被全球的开发者用于各种编程语言和项目。Eclipse 的一个显著特点是其…...

Vault系列之:创建令牌
Vault系列之:创建令牌 一、Vault令牌二、令牌认证三、创建一个新的令牌四、使用令牌登陆五、 撤销令牌 一、Vault令牌 Vault令牌是Vault服务器提供的一种身份验证方式,用于授权和访问Vault中存储的资源。Vault令牌可以是客户端令牌或服务令牌。客户端令…...

如何在 Windows 10 环境下安装和配置 MySQL:初学者指南
如何在 Windows 10 环境下安装和配置 MySQL:初学者指南 MySQL 是一个流行的开源数据库管理系统,广泛应用于各种应用程序中。对于初学者来说,了解如何在 Windows 10 环境下安装和配置 MySQL 是一个重要的第一步。本篇博客将详细介绍如何完成这…...

Ubuntu 24.04上报:Error: could not connect to ollama app, is it running?的解决方法
说起来这个问题真实让人无语。按照我之前说过的方法:设置Ollama在局域网中访问的方法(Ubuntu)_ollama 局域网访问-CSDN博客 把Ollama的默认端口修改后,如果再运行: ollama ps 则会报下面的错: Error: c…...

字典树查重(到底要开多大的空间啊)
前言:烦死了,这个题目一看就是用字典树来做,但是空间不知道开多大,烦死了 后来发现其实tree的第一维空间直接开极端的情况就行,就好像这一题,最多有 1e4 个字符串,每个字符串最长为 50ÿ…...

财务会计与管理会计(二)
文章目录 多工作表销售数据汇总1、INDIRECT函数2、HLOOKUP函数 多表筛选分类求和1、SUMIF函数2、INDIRECT函数 两组数据比对详解VLOOKUP函数的应用 多工作表销售数据汇总 1、INDIRECT函数 INDIRECT(""&D$4&"!D4:M24") 1月!D4:M24 HLOOKUP($A$1,I…...

技术周总结 08.05-08.11周日
文章目录 一、08.06 周二1.1) 问题01 mac安装 scala:1. 使用 Homebrew2. 使用 SDKMAN!其他注意事项1. 确认 Scala 安装位置2. 设置 PATH 环境变量对于 zsh (macOS Catalina 及更高版本默认使用 zsh):对于 bash (如果您使用的是 bash shell): 3. 验证安装 二、08.09 周五2.1&…...