STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led

news2024/11/18 18:19:59

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)传输各种控制信号和时序信号,协调各部件之间的操作。

二、系统总线的分类

系统总线按照传递信息的功能来分,主要分为以下三类:

  1. 控制总线(Control Bus,CB)
    • 主要用来传送控制信号和时序信号。
    • 控制信号包括读/写信号、片选信号、中断响应信号等,也有来自其他部件的反馈信号,如中断申请信号、复位信号等。
    • 控制总线的传送方向通常是双向的,其位数根据系统的实际控制需要而定。
  2. 数据总线(Data Bus,DB)
    • 是双向三态形式的总线,用于CPU与存储器、输入输出接口等部件之间的数据交换。
    • 数据总线的位数是微型计算机的一个重要指标,通常与微处理器的字长相一致。
    • 数据总线上传输的数据可以是真正的数据、指令代码、状态信息或控制信息。
  3. 地址总线(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);//0
	GPIOA_CRL |= (0x01 <<0);
	//输出低电平 第0位清零
	GPIOA_ODR &=~(0x01 <<0);
	
	while(1);
}

案例2:

 操作端口2

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

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

相关文章

【CSS】文字交融展开

实现如下效果&#xff0c;仅需一个动画几行代码 首先给文本元素添加动画 letter-spacing&#xff1a;初始文本堆在一起&#xff0c;结束展开文本filter&#xff1a;初始模糊&#xff0c;结束清晰 然后给文本的父元素设置对比度&#xff0c;简单理解为亮的更亮暗的更暗。 以…

vue3 项目部署到线上环境,初始进入系统,页面卡顿大概一分钟左右,本地正常无卡顿。localStorage缓存1MB数据导致页面卡顿。

使用vue3进行项目开发&#xff0c;前端框架使用jeecg-boot进行开发&#xff0c;项目初期&#xff0c;打包部署到生产环境&#xff0c;无异常。某天&#xff0c;进行前端项目打包部署到生产环境&#xff0c;突然出现异常情况&#xff0c;部署到线上环境&#xff0c;初始进入系统…

专题十一_字符串

目录 14. 最长公共前缀 解析 题解 5. 最长回文子串 解析 题解 67. 二进制求和 解析 题解 43. 字符串相乘 解析 题解 14. 最长公共前缀 14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 解法一&#xff1a;两两比较&#xff0c;横向比较 clas…

苹果手机录屏没有声音怎么办?2招教你快速解决

今天&#xff0c;录屏功能已成为了我们工作和娱乐中的得力助手。苹果手机凭借其卓越的性能和丰富的功能&#xff0c;自然也在录屏方面有着不俗的表现。苹果手机自带的录屏功能简单直观&#xff0c;能够轻松记录屏幕的精彩瞬间。 然而&#xff0c;有时候苹果手机录屏没有声音怎…

案例:使用Haproxy搭建Web集群

目录 Haproxy Haproxy和LVS的区别 LVS Haproxy 代理和调度的区别 Haproxy调度算法原理 案例 拓扑图 Web服务器配置 Haproxy配置 安装Haproxy Haproxy初步设置 Haproxy配置 配置文件各行说明 监听项配置 启动Haproxy 测试 配置Haproxy日志 Haproxy Haproxy是…

定点数的实现

定点数实现的是float转PEint /// 浮点数有很多问题 多个平台一些运算结果不一致 /// 定点数 运算 &#xff08;把浮点数转为定点数进行运算&#xff0c;保证所有平台结果的一致性&#xff09; //因为要把float转化为整形来操作 //float是一个结构体 所以我们这里也是…

[图解]阿西莫夫·台球杀人事件-《分析模式》漫谈

1 00:00:00,470 --> 00:00:02,510 今天的《分析模式》漫谈 2 00:00:02,760 --> 00:00:06,700 我们来说一个有趣的台球杀人事件 3 00:00:08,640 --> 00:00:09,630 还是第一章 4 00:00:09,920 --> 00:00:12,020 这里有一句&#xff0c;you would 5 00:00:12,030 …

【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库

1、思路 docker部署项目是将项目的不同程序放入不同容器中运行&#xff0c;这样可以方便管理不同程序。我的项目有Springboot、Vue、mysql三部分&#xff0c;Vue用nginx代理&#xff0c;因为nodejs太占空间了。一开始我是用Dockerfile创建镜像再运行容器的&#xff0c;但发现它…

uniapp点击图片预览,关闭预览图片后自动触发onshow生命周期,怎么解决?

第一&#xff0c;页面的数据会实时更新&#xff0c;所以接口请求需要在onshow中&#xff0c;变量figh初始为true&#xff0c;数据列表信息可直接调用获取 当点击查看图片时改变&#xff0c;变量figh为false&#xff0c;此时onshow里面的this.postlist()不触发。 此时&#xff0…

Linux/C 高级——Linux命令

从这里开始&#xff0c;我们展开对Linux/c 高级的学习&#xff0c;首先介绍的是在Linux/c高级中&#xff0c;Linux的部分 目录 1.Linux简介 1.1Linux起源 1.2查看系统版本命令 1.3分层结构 1.4系统关机重启命令 2.Linux安装工具 2.1软件包安装 2.1.1软件包的管理机制 …

FastAdmin默认表单中显示列表

FastAdmin表单中又列表&#xff0c;例如订单下有好几个商品需要进行显示&#xff0c;其他字段用系统默认表单样式。 <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(商品详情)}:</label><div class&qu…

升级 chatGPT plus 成功丨出海笔记

有图有真相(升级了速度真的爽)&#xff0c;这个过程说简单不简单&#xff0c;说难不难&#xff0c;废话不说&#xff0c;直接上干货&#xff1a; 支付的时候老说你的卡decline或者被拒绝&#xff0c;就是环境原因。 关键点 换什么IP都没用&#xff0c;本地环境怎么切换都不行&…

java——泛型和JUnit

1、泛型的理解和好处 1.1、使用传统方法的问题分析 1、不能对加入到集合 ArrayList中的数据类型进行约束(不安全) 2、遍历的时候&#xff0c;需要进行类型转换,如果集合中的数据量较大&#xff0c;对效率有影响 1.2、泛型的好处 1、编译时&#xff0c;检查添加元素的类型&…

FreeRTOS学习 -- 事件标志组

一、事件标志组简介 1、事件位&#xff08;事件标志&#xff09; 事件位用来表明某个事件是否发生&#xff0c;事件位通常用作事件标志&#xff0c;比如下面的几个例子&#xff1a; 当收到一条消息并且把这条消息处理掉以后就可以将某个位&#xff08;标志&#xff09;置1&a…

阅读台灯什么品牌好?一文带你了解热门阅读台灯推荐

阅读台灯最终都绕不开护眼这个话题。护眼灯作为保护视力的辅助工具&#xff0c;以有效护眼的价值深受大众青睐。学生长时间用眼&#xff0c;普通台灯的伤害大&#xff0c;而阅读台灯的出现&#xff0c;通过其先进的技术和设计&#xff0c;能为学生提供了一个既舒适又健康的照明…

十三、代理模式

文章目录 1 基本介绍2 案例2.1 Sortable 接口2.2 BubbleSort 类2.3 SortTimer 类2.4 Client 类2.5 Client 类的运行结果2.6 总结 3 各角色之间的关系3.1 角色3.1.1 Subject ( 主体 )3.1.2 RealObject ( 目标对象 )3.1.3 Proxy ( 代理 )3.1.4 Client ( 客户端 ) 3.2 类图 4 动态…

vue3学习day04-provide和inject、defineOptions、defineModel、Pinia、pinia持久化

15、provide和inject &#xff08;1&#xff09;作用&#xff1a;顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 &#xff08;2&#xff09;语法&#xff1a; 1&#xff09;顶层组件通过provide函数提供数据 2&#xff09;底层函数提供inject获取数据…

封装el-table 基于element封装可配置JSON表格组件

基于element封装可配置JSON表格组件 话不多说直接贴代码&#xff0c;复制运行即可查看效果 子组件全部代码 <template><div class"custom-table"><el-table:data"tableData"borderstyle"width: 100%"size"mini"max-h…

[AI绘画] 简明原生 ComfyUI 三重超细节放大教程(附工作流)

本教程将从0构建 ComfyUI 三重细节填充放大工作流&#xff0c;人有多大胆&#xff0c;图有多大产 **&#xff08;建议横屏&#xff09;**鬼灭之刃 堕姬 & 甘露寺蜜璃 三重细节填充放大 16K(154888832) 「四种放大」 ”潜空间“和”像素空间”&#xff0c;图像放大可…

精通C++ STL(三):vector的介绍及使用

目录 vector的介绍 vector的使用 vector的定义方式 vector的空间增长问题 size和capacity reserve和resize empty vector的迭代器使用 begin和end rbegin和rend vector的增删查改 push_back和pop_back insert和erase swap 元素访问 vector迭代器失效问题 迭代器失效问题举例 …