- 博客(114)
- 资源 (1)
- 收藏
- 关注
原创 【汇编】逻辑指令
TEST 指令与AND运算的工作原理相同,但与AND指令不同的是,它不会更改第一个操作数。因此,如果我们需要检查寄存器中的数字是偶数还是奇数,我们也可以使用TEST指令执行此操作,而无需更改原始数字(的不同数值执行的操作 (以 SHL 为例)不影响 SF、ZF、PF(奇偶)、AF。可用除立即数以外的任何寻址方式。
2024-11-30 18:38:17 1008
原创 【汇编】控制转移指令
段内寻址只修改IP,段间寻址既修改IP也修改CS。:n=8 bit 带符号数(-128。无条件跳转指令JMP跳转至地址。:ZF=1 且 (CX)≠0。:ZF=0 且 (CX)≠0。若 OF=1(即溢出)适用于带符号数的比较。
2024-11-30 18:31:15 828
原创 【STM32】BKP备份寄存器&RTC实时时钟&PWR电源控制
BKP(Backup Registers)备份寄存器BKP处于后备区域,可用于存储用户应用程序数据,当VDD(2.03.6V)电源被切断,他们仍然由VBAT(板子上的纽扣电池,1.83.6V)维持供电,当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位TAMPER引脚产生的侵入事件将所有备份寄存器内容清除。
2024-11-19 16:23:19 1246
原创 【STM32】软件I2C读写MPU6050
写好 I2C 通信层之后再建立 MPU6050 的 .c 和 .h 模块,在这一层将基于 I2C 通信的模块来实现指定地址读、指定地址写,再实现写寄存器对芯片进行配置,读寄存器获取传感器数据。首先建立 I2C 通信层的 .c 和 .h 模块,在通信层中写好 I2C 底层的 GPIO 初始化和 6 个时序基本单元(起始、终止、发送一个字节、接收一个字节、发送应答、接收应答)最终在 main.c 中调用 MPU6050 的模块。
2024-11-17 16:33:16 1397
原创 【STM32】MPU6050简介
MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度角速度参数,通过数据融合,可进一步得到姿态角(欧拉角),常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度(具有静态稳定性,不具有动态稳定性)3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度(具有动态稳定性,不具有静态稳定性)
2024-11-17 16:30:57 1788
原创 【STM32】I2C通信协议
I2C 也叫 I²C、IIC (Inter-Integrated Circuit) ,集成电路总线是由 Phiilps 公司开发的两线式串行总线,用于连接微控制器及其外围设备,采用同步半双工通信方式,I2C 是带数据应答的协议,支持总线挂载多设备(一般采用 “一主多从” 模型)两条信号线SDA(Serial Data,串行数据线)只有一根 SDA 线 ➡️ 半双工通信方式,一根线兼具发送和接收,最大化利用资源SCL(Serial Clock,串行时钟线)
2024-11-17 16:29:35 1158
原创 【STM32】USART串口协议
文章目录串口通信串口的基本概念串口硬件电路串口参数及时序USART介绍USART基本概念USART框图USART简化结构图USART常用库函数串口发送接线图Strial模块串口常用的模块函数printf( ) 函数的移植方法一方法二main.c 源程序串口发送+接收接线图Strial模块main.c 源程序STM32通信接口通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统通信协议:制定通信的规则,通信双方按照协议规则进行数据收发STM32通信接口:名称引脚双工时钟电平设
2024-11-12 13:14:55 966
原创 【STM32】DMA直接存储器读取
DMA,全称Direct Memory Access,即直接存储器访问DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输DMA 这个外设是可以直接访问 STM32 内部的存储器的,包括运行内存 SRAM、程序存储器 Flash 和寄存器等等。
2024-11-07 09:58:50 724
原创 【STM32】ADC模数转换器
STM32 中的 ADC(模数转换器)是用于将模拟信号转换为数字信号的关键组件STM32 的 ADC 是12 位逐次逼近型 ADC,1μs 转换时间12位分辨率:这意味着ADC可以将输入的模拟信号转换为0到4095之间的数字值(212−14095212−14095),提供较高的精度逐次逼近型:逐次逼近型ADC是一种常用的ADC架构,工作原理是通过逐步逼近输入信号的电压值,最终确定出数字输出。这种方式在转换过程中比较高效,适合大多数应用转换时间1μs。
2024-11-06 15:15:28 662
原创 【STM32】NVIC / EXTI / AFIO 介绍
在STM32中,NVIC(Nested Vectored Interrupt Controller)是一个中断控制器,负责管理和处理微控制器的中断NVIC是一个内核外设,是CPU的小助手它允许多个中断源以优先级方式响应,使得系统能够快速响应高优先级的中断请求,NVIC支持嵌套中断,即高优先级的中断可以打断低优先级的中断中断向量表:存储所有中断的服务程序地址中断优先级管理:允许为不同中断分配不同的优先级,以控制中断的响应顺序中断使能和禁用:可以启用或禁用特定的中断中断触发方式。
2024-11-05 09:15:00 877
原创 【STM32】OLED显示屏
OLED(Organic Light Emitting Diode):有机发光二极管OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64。
2024-10-31 13:03:24 653
原创 【STM32】按键控制LED & 光敏传感器控制蜂鸣器
按键:常见的输入设备,按下导通,松手断开按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动。
2024-10-30 13:52:57 1183
原创 【STM32】LED闪烁 & LED流水灯 & 蜂鸣器
LED发光二极管,正向通电点亮,反向通电不亮蜂鸣器有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音面包板也叫做免焊万用电路板,与印刷电路板不同,面包板无需焊接或损坏电路轨道,因此可以反复使用面包板的正反面及内部结构。
2024-10-30 13:44:40 742
原创 【STM32】GPIO通用输入输出口
用于单独操作输出数据寄存器的某一位而不影响其他位(因为输出数据寄存器同时控制16个端口,并且该寄存器只能整体读写,所以如果想单独控制器中某一个端口而不影响其他端口的话,就需要通过设置 位设置/清除寄存器 )(由于STM32是32位的单片机,所以STM32内部的寄存器都是32位的,但是每个GPIO的端口只有16位,所以寄存器只有低16位有对应端口,高16位是没有用到的)复用功能输入:连接到其他需要读取端口的外设上,比如串口的输入引脚等,所以这根线接收的是数字量,所以接在施密特触发器后面。
2024-10-29 10:30:00 1508
原创 【STM32】程序建立模板
本篇介绍如何建立一个STM32工程STM32工程结构比较复杂,需要用到的文件很多,并且程序代码也都是建立在工程结构的基础之上,所以学习如何新建一个STM32工程也是至关重要的。
2024-10-29 09:30:00 971
原创 【STM32】STM32系统时钟RCC
我们每次在新建工程中对外设模块进行初始化的第一步就是RCC开启时钟我刚开始学的时候对这个没什么概念,就只知道初始化之前要开启时钟,就要用RCC相关的函数,得过且过照着别人的代码敲,但是程序多写几个就会疑惑时钟到底是什么,为什么必须要开启……带着这些疑问我查阅了一些资料和其他大佬的博客,总结成了这一篇文章其实RCC在STM32参考手册里有详细介绍,很多,有兴趣可以看看详情可以参考 :STM32F10xxx参考手册(中文).pdf。
2024-10-28 16:58:49 1204
原创 【STM32】STM32简介
在学习什么是STM32单片机之前,先了解什么是单片机单片机(Microcontroller,简称MCU)是一种集成了中央处理器(CPU)、存储器(RAM/ROM)、以及**输入输出外设(如串口、定时器、ADC等)**的微型计算机系统它是一块芯片中集成了整个计算机的主要功能,因此得名“单片机”单片机被广泛应用于各种自动化控制系统中简单来说,单片机是一种功能强大、价格低廉的嵌入式控制器,适用于多种自动化和智能化的电子设备中【参考 STM32简介 】ARM既指ARM公司,也指ARM处理器内核ARM 公司是全球领先
2024-10-28 16:54:13 939
原创 【C语言-数据结构】单链表的定义
不带头结点,写代码更麻烦对第一个数据结点和后续数据结点的处理需要用不同的代码逻辑对空表和非空表的处理需要用不同的代码逻辑带头结点,写代码更方便本文主要参考《王道计算机考研 数据结构》课程视频。
2024-09-21 17:53:12 407
原创 【数据结构】顺序表的定义和实现
顺序表是指用的方式实现线性表顺序存储:把的元素存储在的存储单元中,元素之间的关系由存储单元的邻接关系来体现【看到这是否会和我有同样的疑问:顺序表和数组是一样的吗?这个问题可以参考这篇文章的解释】
2024-09-13 10:03:51 705
原创 【数据结构】线性表的定义和基本操作
线性表是具有相同数据类型的 n(n≥0)个数据元素的有限序列,其中 n 为表长,当 n=0 时线性表是一个空表注意:① 元素的数据类型相同意味着每个元素所占空间一样大;② 线性表是有限序列意味着各元素之间有先后次序且数量是有限的】若用 L 命名线性表,则其一般表示为La1a2aiai1anLa1a2aiai1anaia_iai是线性表中的 “第 i 个” 元素线性表中的位序【注意位序是从1开始的,数组下标是从0开始的】a。
2024-09-12 11:31:50 571
原创 【计算机组成原理】计算机系统层次结构
计算机系统是一个层次结构系统,每一层都通过向上层用户提供一个抽象的简洁接口而将低层的实现细节隐藏起来。计算机解决应用问题的过程就是不同抽象层进行转换的过程。
2024-09-06 18:06:44 545
原创 【计算机组成原理】计算机系统的基本组成
由于传统的冯·诺依曼机都是以运算器为中心,数据的传输都需要通过运算器作为中转,而不能直接对存储器进行读写,这显然是低效的,现代计算机就采用。CPU 能够直接访问的存储器是主存储器,辅助存储器用千帮助主存储器记忆更多的信息,辅助存储器中的信息必须调入主存后,才能为 CPU 所访问。即对于同一个功能,既可以用软件来实现也可以用硬件来实现,不过软件实现的成本更低效率也更低,相应的硬件实现的成本更高效率更高。”的概念,“存储程序”的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机通称为。
2024-09-05 13:37:39 1319
原创 【计算机组成原理】 计算机发展历程
与此同时,直接影响计算机系统性能提升的各种系统软件也有了长足的发展,特别是操作系统,如 Windows UNIX、Linux 等。也就是说,我们现在和 18 个月后花同样的钱买到的 CPU,后者的性能是前者的两倍,这一定律揭示了信息技术进步的速度。当价格不变时,集成电路上可容纳的晶体管数目,约每隔 18 个月便会增加一倍,性能也将提升一倍。由于所有的软件都是由编程语言编写出来的,所以编程语言的发展直接决定了软件的丰富程度。其中高级语言的发展真正促进了软件的发展,它经历了从科学计算和工程计算的。
2024-09-05 11:01:31 861
原创 【C语言】指针
在了解了内存地址的概念之后,再来看指针指针是一种变量,即指针变量,其值为内存地址换句话说,指针存储的是其他数据单元(变量/数组/结构体/函数等)的首地址,指针本身并不存储实际的数据若指针存放了某个数据单元的首地址,则这个指针指向了这个数据单元;若指针存放的值是 0,则这个指针为空指针表示方法。
2024-09-02 12:42:20 1354
原创 【C语言】数组
上面的注释表明,以前支持 C90 标准的编译器不允许后两种声明方式,而 C99 标准允许这样声明,这创建了一种新型数组,称为变长数组 (variable-length array) 或简称 VLA(C11 放弃了这一创新的举措,把 VLA 设定为可选,而不是语言必备的特性),声明 VLA 时不能进行初始化。多维数组是数组的一种,它的每个元素也是一个数组,允许在多个维度上组织数据,最常见的多维数组是二维数组,通常用于表示表格、矩阵或网格等结构。可以使用循环来访问数组中的所有元素,例如,使用。
2024-08-31 09:00:00 1369
原创 【C语言】结构体
结构体中还可以包含其他结构体,形成嵌套结构int day;int month;int year;} Date;int id;} Employee;//上面代码中,Employee 结构体中嵌套了 Date 结构体//可以通过以下方式访问嵌套的成员。
2024-08-25 17:03:00 732
原创 【计算机操作系统】虚拟内存的基本概念
基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存暂时用不到的部分留在外存就可以让程序开始执行在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存(操作系统虚拟性的一个体现,实际的物理内存大小没有变,只是在逻辑上进行了扩充)
2024-08-23 13:15:21 1083
原创 【计算机操作系统】段页式管理方式
分页存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享和保护,将这两种存储管理方法结合起来,便形成了段页式存储管理方式。每个段对应一个段表项,每个段表项由段号、**页表长度、页表存放块号(页表起始地址)**组成,每个段表项长度相等,段号是隐含的(,对内存空间的管理仍然和分页存储管理一样,将其分成若干和页面大小相同的存储块,对内存的分配以存储块为单位。每个页面对应一个页表项,每个页表项由页号、页面存放的内存块号组成。段号占 16 位,因此在该系统中,每个进程最多有。
2024-08-21 12:28:41 957
原创 【计算机操作系统】基本分段存储管理
例如,用户进程由主程序段、两个子程序段、栈段和数据段组成,于是可以把这个用户进程划分为 5 段,每段从 0 开始编址,并分配一段连续的地址空间(分段系统的地址变换过程如图所示,为了实现进程从逻辑地址到物理地址的变换功能, 在系统中设置了段表寄存器,用于存放。程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能在物理内存中找到各个逻辑段的存放位置,因此。,分页的主要目的是为了实现离散分配,提高内存利用率,分页仅仅是系统管理上的需要,完全是系统行为,(不属于临界资源),这样的代码是可以共享的。
2024-08-20 14:19:44 1096
原创 【计算机操作系统】基本分页存储管理
页表项占用字节大小 = 页号占用字节 + 块号占用字节,但是由于页表项是连续存放,因此页号可以是隐含的,不占存储空间(类比数组),故在物理上页表项占用的存储空间大小就是块号占用的存储空间大小。② 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后。,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,,以便后面可能的再次访问,但若快表已满,则必须按照一定的算法对旧的页表项进行替换)
2024-08-19 21:35:46 1976
原创 【计算机操作系统】内存管理的概念
存储管理方式随着操作系统的发展而发展,在操作系统由单道向多道发展时,存储管理方式便由单一连续分配发展为固定分区分配;内存一般来说会分为操作系统使用的内存区域,还有普通的应用程序使用的内存区域,各个用户进程都会被分配到各自的内存空间,某进程对操作系统使用的内存区域的访问和对其他进程内存区域的访问都应该被禁止(否则会导致系统不安全),该进程只能访问与之对应的内存区域。引入分段存储管理的目的,主要是为了满足用户在编程和使用方面的要求,其中某些要求是其他几种存储管理方式难以满足的。】 专栏的文章 均有参考。
2024-08-14 11:01:02 765
原创 【计算机操作系统】内存的基础知识
编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。装入时对地址进行 “其实CPU在执行这些一条一条指令的过程当中,就是在处理内存或寄存器当中的一些数据,而指令的工作基于 “地址”(通过地址找到数据存放位置),每一个地址对应一个数据的存储单元。编译、链接后的装入模块的地址都是从0开始的,装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是。:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
2024-08-13 10:01:36 947
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人