- 博客(114)
- 收藏
- 关注
原创 day9 STM32 I2C总线通信
I2C(Inter-Integrated Circuit)总线(也称IIC或I2C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,期间封装形式少,通信速率高等优点。
2023-08-15 17:25:08 673
原创 day8 STM32数据搬运工 - DMA
DMA,全称为:Direct Memory Access,即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。
2023-08-15 14:38:12 216
原创 day6 STM32时钟与定时器
振荡器是用来产生重复电子讯号的电子元件。其构成的电路叫振荡电路,能将直流电转换为具有一定频率交流信号输出的电子电路或装置。STM32中有四个时钟源:HSI:高速内部时钟,RC振荡器,频率为8MHz;HSE:高速外部时钟,可以石英 / 陶瓷振荡器,或者接外部时钟源,频率范围为4MHz~16MHzLSI:低速内部时钟,RC振荡器,频率为40KHz。独立看门狗时钟源智能是这个,还可以做RTC时钟源LSE:低速外部时钟,接37.768KHz的石英晶体。主要是RTC的时钟源。
2023-08-13 22:12:08 265
原创 基于单片机的家用智能浇灌系统
然后,它将读取到的湿度数据转换为百分比值,并将结果存储在由`humidity`指针指向的内存位置中。4. 在"Configuration"选项卡中,找到I2C1外设,并设置相关的参数,如时钟速度、地址等。在STM32CubeMX中,可以通过图形化界面选择I2C外设并进行相应的配置,然后生成对应的代码。可以在STM32CubeMX中选择相应的引脚,并将其配置为推挽输出模式,然后生成相应的代码。读取YL69湿度传感器的湿度值,并将结果存储在 humidity 指针指向的内存位置中。
2023-08-12 20:06:40 1326
原创 day4 USART串口的应用
通信标准引脚说明通信方式通信方向UART(通用异步收发器)TXD:发送端RXD:接受端GND:公共地异步通信全双工单总线(1-wire)DQ:发送/接受端异步通信半双工SPISCK:同步时钟MISO:主机输入,从机输出MOSI:主机输出,从机输入同步通信全双工I2CSCL:同步时钟SDA:数据输入/输出端同步通信半双工1、初始化串口:配置串口的波特率、数据位、停止位和校验位等参数。2、配置GPIO引脚:选择合适的GPIO引脚作为串口的TX(发送)和RX(接收)引脚。
2023-08-11 12:28:24 206
原创 day3 STM32 GPIO口介绍
4个32位配置寄存器:2个32位数据寄存器:1个32位置位 / 复位寄存器GPIOx_BSRR;2个32位复用功能配置集训期注:每一组GPIO端口都有一套上述的寄存器去配置他自己的功能;GPIO工作原理图位 31:16 ——保留,必须保持为复位值。位15:0 OTy[1:0] ,端口x的配置为(y = 0 ..15)这些位可由软件写来配置I/O口的输出类型0:推挽输出(复位状态),正常状况下使用此模式正常输出高低电平,P-MOS管工作输出高电平:N-MOS管工作输出低电平;
2023-08-10 20:40:53 677
原创 day2 开发环境平台搭建
SOC中CPU访问各个外部部件是通过每个部件的编号(地址)访问的;CPU给各个部件分配地址的过程称之为映射;Corter - M0 为32位,所以其给部件分配的地址范围为0 - 4Gb(2^32);4GB的空间会有相应分段,相应部件在对应分段内。
2023-08-10 20:00:17 163
原创 day1 ARM架构概述
1、指令集:1.1、复杂指令集(CISC):包含处理复杂操作的特定指令,指令长度不固定,执行需要多个周期;1.2、简单指令集(RISC):指令简单而有效,格式和长度通常是固定的,大多数指令可以在一个周期内执行完毕;ARM的内核是基于RISC结构体系的;2、编程模型:2.2、数据结构:2.3、工作模式:线程模式(Thread Mode)、处理模式(Handler Mode);Cortex - M0 有两种工作模式,(1)、Thumb状态:正常运行时处理器的状态;
2023-08-10 18:02:43 179
原创 C语言基础算法题
9、判断一个给定的字符串是否是有效的括号序列(左右括号数量是否一致);10、将一个给定的字符串中的所有空格替换为“%20”;8、判断一个给定的字符串是否是有效的ip地址;1、计算并输出1到100之间所有偶数之和;4、判定一个给定的字符串是否是回文字符串;6、找出一个对给定数组中的所有重复元素;7、将一个给定的整数数组按升序排序;2、招数数组中的最大值和最小值;5、计算一个给定数字的阶乘;3、将给定的字符串反转;
2023-08-06 16:39:22 668 2
原创 day4 QT主窗口
QMainWindowQMainWindow是用于创建应用程序的主窗口的类,通常用于创建具有复杂布局和多个功能区域的应用程序窗口。 与QWidget和QDialog不同,QMainWindow提供了一个主要的菜单栏、工具栏、状态栏和中央部件,使得创建复杂的多文档界面(MDI)应用程序更加方便。 它通常用于创建大型的桌面应用程序。示例#include "mainwindow.h"#include <QMenu>#include <QMenuBar>#inclu
2023-07-03 22:37:46 364
原创 day3 QT对话框
自定义对话框是根据特定需求创建的定制化对话框。开发者可以通过继承QDialog或其他适合的类,根据需要定义对话框的布局、控件和交互逻辑。创建一个继承自QDialog的自定义对话框类。在自定义对话框类中定义布局、添加控件和信号槽等内容。在应用程序中创建自定义对话框对象,并显示对话框。
2023-07-03 16:53:16 1107
原创 day2 QT按钮与容器
目录按钮1、QPushButton2、QToolButton3、QRadioButton4、QCheckBox示例容器编辑1. QGroupBox(分组框)2. QScrollArea(滚动区域)3. QToolBox(工具箱)4. QTabWidget(选项卡控件)5. QStackedWidget(堆叠控件)6. QFrame(框架控件)7. QWidget(窗口部件)8. QMdiArea(多文档界面区域)9. QDockWid
2023-07-03 16:36:30 566
原创 day9 模板
在C++中,可以使用关键字template来定义一个模板。// 类定义// 函数定义// 结构体定义表示类型参数,可以根据需要选择任何合法的标识符。通常情况下,使用 `T` 表示 `Type`。在模板的定义中,可以使用类型参数 `T` 来代表实际要使用的类型,从而实现通用性。在实际使用中,可以根据需要添加多个类型参数。模板还支持非类型参数,也就是可以使用常量表达式作为参数。通过使用模板,可以编写具有通用性和灵活性的代码,以适应不同的数据类型和需求。
2023-06-28 19:40:01 122
原创 day7 异常
C++中的自定义异常类可以用于编写更为可靠和安全的程序,它的作用是在程序出现错误或异常时抛出自定义的异常对象,以提供更具体的错误信息和更为灵活的处理方式。自定义异常类可以用在需要检测和处理各种错误和异常情况的场景下,比如网络编程、文件操作、内存管理等。
2023-06-25 16:29:27 51
原创 day6 多态
在C++中,如果一个类继承自其它类,且重写了父类中的一个函数,那么当该函数被调用时,实际执行的是子类中的同名函数,而不是父类中的函数。
2023-06-25 16:05:05 72
原创 day5 继承与组合
继承和组合是两种表达对象之间关系的方式:1、继承表示“是一个”,2、组合表示“有一个”。例如,一只鸟可以继承“动物”这个类,因为它是动物的一种;又例如,一台电脑由主板、CPU、内存等组成,每个部件都是电脑的一部分,因此使用组合来表示它们之间的关系。在具体的程序设计中,需要根据实际需要来选择使用哪种方式。
2023-06-25 11:45:08 72
原创 day3 普通运算符重载
C++中的运算符是用来对内置类型进行运算的,例如加号(+)、减号(-)、等号(=)等。而普通运算符重载的作用就是让我们能够为自定义的类对象,也赋予与内置类型相同的运算符功能,从而可以对类对象执行加减乘除、赋值和比较等操作。例如,如果我们定义了一个表示时间的类time,我们可以通过重载"+"运算符,使得类对象支持时间加法运算。当我们执行类对象之间的加法运算时,重载的"+"运算符将会按照我们自定义的方式来计算结果,从而实现时间加法的功能。C++语言中,我们可以自定义一个类,用来表示我们想要的数据类型。
2023-06-22 23:10:18 57
原创 day2 类和对象
1、在类A中,定义了两个成员函数:show()和setdata(int data),以及一个数据成员a。其中,show()函数用于输出字符串"xxxxxxxx",setdata(int data)函数用于将参数data的值赋给数据成员a。而getdata()函数是类A的公共接口,用于返回数据成员a的值,它实现被放在类的外部。然后通过调用x.getdata()函数,输出a的值。3、需要注意的是,C++中类的成员函数必须在类定义中声明,在类定义外部进行实现,因此getdata()函数的实现放在了类的外部。
2023-06-22 16:12:24 322
原创 day1 从 C 到 C++
miniGUIC/C++一般一般国产资源占用少操作硬件底层方便QTC/C++很好很好开源资源占用较少操作硬件底层方便Androidjava很好差用户基数大大公司可靠较好.NETC#很好较好用户基数大大公司可靠较好。
2023-06-20 23:26:29 59
原创 day9 专用指令
MMU是内存管理单元的缩写,是一种硬件设备,能将虚拟地址翻译成物理地址,实现虚拟内存的功能。3. 方便了进程之间的内存隔离,使得进程之间的内存空间相互独立,保障了数据的安全性。MRC 将协处理器中寄存器中的数据传送到ARM处理器中的寄存器。MCR 将ARM处理器中寄存器中的数据传送到协处理器中的寄存器。1. 提高了进程的内存使用效率,使进程能够使用更多的内存空间;STC 将协处理器中的数据写入到存储器。LDC 将存储器中的数据读取到协处理器。3.协处理器寄存器传送指令。
2023-06-15 23:36:21 227
原创 day8 栈顶的种类与应用
栈指针指向最后一次压入到栈中的数据的相邻位置,压栈时可直接压栈,之后需要将栈指针移动到相邻位置。栈指针指向最后一次压入到栈中的数据,压栈时需要先移动栈指针到相邻位置然后再压栈。空增(EA)、空减(ED)、满增(FA)、满减(FD)压栈时栈指针越来越大,出栈时栈指针越来越小。压栈时栈指针越来越小,出栈时栈指针越来越大。ARM处理器一般使用。
2023-06-11 16:36:57 501
原创 day7 跳转与存储器访问指令
带返回的跳转指令,本质就是将PC寄存器的值修改成跳转标号下指令的地址,同时将跳转指令下一条指令的地址存储到LR寄存器。@ 将R1寄存器中的数据的Bit[15:0]写入到R2指向的内存空间。@ 将R1寄存器中的数据的Bit[31:0]写入到R2指向的内存空间。@ 将R1寄存器中的数据写入到R2+8指向的内存空间,然后R2自增8。@ 将R1寄存器中的数据的Bit[7:0]写入到R2指向的内存空间。@ 将R1寄存器中的数据写入到R2指向的内存空间,然后R2自增8。@ ARM指令集中大多数指令都可以带条件码后缀。
2023-06-09 12:41:56 394
原创 day6 数据处理指令
第二操作数中的哪一位为1,就将第一操作寄存器的中哪一位清零,然后将结果写入目标寄存器。@ 第二操作数: 第二个参与运算的数据(可以是寄存器或立即数)@ 立即数的优点:取指的时候就可以将其读取到CPU,不用单独去内存读取,速度快。@ 第一操作寄存器:第一个参与运算的数据(只能是寄存器)@ 立即数的本质就是包含在指令当中的数,属于指令的一部分。@ 立即数的缺点:不能是任意的32位的数字,有局限性。@ 数据运算指令对条件位(N、Z、C、V)的影响。
2023-06-09 01:00:59 270
原创 day5 ARM指令集导学
2.跳转指令: 实现程序的跳转,本质就是修改了PC寄存器。6.协处理器指令: 操作协处理器的指令。> 每条C语句都要被编译器编译成若干条汇编指令才能被CPU识别和执行。即C语句中的指令CPU不一定能直接识别,需要编译器进行“翻译”> 汇编中寄存器的使用、栈的分配与使用、程序的调用、参数的传递等。> C中寄存器的使用、栈的分配与使用、程序的调用、参数的传递等。即汇编中所有的指令都是CPU能够识别和执行的。本身不是指令,编译器可以将其替换成若干条指令。
2023-06-08 17:41:32 532
原创 day4 ARM异常处理
处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生这时处理器就要将当前的程序暂停下来转而去处理这个异常的时间异常事件处理完成之后再返回到被异常打断的点继续执行程序。指令流水线机制的引入确实能够大大的提升指令执行的速度但在实际执行程序的过程中很多情况下流水线时是无法形成的,比如:芯片刚上电的前两个周期、执行跳转指令后的两个周期等。所以指令流水线的引入以及优化只能使平均指令周期不断的接近1而不可能真正的达到1,且流水线级数越多芯片设计的复杂,程度就越高,芯片的功耗就越高。
2023-06-08 12:41:30 505
原创 day3 ARM寄存器组织
栈内存放的是临时数据,当有临时数据需要存放在栈中时,就可以从SP寄存器中获取栈顶地址将数据存入,SP寄存器也会随之移动指向下一个空栈。注:在某个特定模式下只能使用当前模式下寄存器,一个模式下特有的寄存器其他模式下不可使用;包括通用寄存器、专用寄存器、控制寄存器;程序计数器,用于存储当前取址指令的地址;寄存器是处理器内部的存储器,没有地址;栈指针,用于存储当前模式下的栈顶地址;带有三角的是当前模式下特有的寄存器;[31:24]为条件域用F表示、[23:16]为状态域用S表示、[15:8]为预留域用X表示、
2023-06-07 21:13:48 661
原创 day2 ARM处理器概论
指令能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...)指令在内存中以机器码(二进制)的方式存在每一条指令都对应一条汇编程序是指令的有序集合指令集处理器能识别的指令的集合称为指令集不同架构的处理器指令集不同指令集是处理器对开发者提供的接口。
2023-06-07 18:12:34 719
原创 day1 计算机硬件基础
一条指令的执行分为三个阶段CPU将PC寄存器中的地址发送给内存,内存将其地址中对应的指令返回到CPU中的指令寄存器(IR)译码器对IR中的指令进行识别,将指令(机器码)解析成具体的运算控制器控制运算器中对应的运算单元进行运算,运算结果写入寄存器每执行一条指令后PC的值会自动增加指向下一条指令。
2023-06-07 16:14:25 642
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人