自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 计算机网络物理层基础练习

物理层的一些基础填空

2025-05-31 16:35:38 630

原创 顺序查找与折半查找

本文基于C语言叙述了顺序查找和折半查找两种基础的查找算法的实现。

2025-05-31 16:01:53 749

原创 计算机网络:物理层

本文讲述了计算机网络的物理层的一些事,相关图片内容参考《计算机网络微课堂》视频以及书籍《计算机网络 第七版》

2025-05-31 04:08:35 1117

原创 计算机网络第一章课后练习

计算机网络第一章绪论 基础巩固

2025-05-30 16:41:01 608

原创 二叉树实验

接着,我们需要表示二叉树的节点,所以应该定义一个名为TreeNode的结构体。每个节点包含一个字符型数据字段,以及指向左右子节点的指针。这样的结构非常贴合二叉树的定义。100// 输入字符串最大长度// 二叉树节点结构体char data;} TreeNode;宏定义是为了限制输入字符串的最大长度,防止缓冲区溢出,保证程序安全性。此外,我们为了标识不同的遍历方式,可以定义一个枚举类型。使用枚举提高了程序的可读性,也方便后续判断使用哪种遍历方式。// 三种二叉树遍历方式枚举。

2025-05-30 15:49:23 1014

原创 栈与队列综合实验:表达式求值

本文讲述了基于C语言的理由栈和队列实现表达式求值程序的实现过程

2025-05-30 00:34:09 1316

原创 计算机网络常见体系结构、分层必要性、分层设计思想以及专用术语介绍

本文讲述了计算机网络常见体系结构、分层设计的必要性、分层处理思想以及相关专业术语等。相关叙述、图片参考《计算机网络微课堂》视频以及《计算机网络 第七版》教材。

2025-05-29 19:20:56 1056 2

原创 计算机网络相关发展以及常见性能指标

本文讲述了因特网概述、三种交换方式、计算机网络定义和分类以及其常见性能指标等内容,全文及相关图片均参考《计算机网络微课堂》视频。

2025-05-29 06:10:21 836

原创 数据结构之队列实验

本文基于《进制转换》实例叙述了队列的实现和应用。

2025-05-28 14:14:58 691

原创 线性表之链表实验

线性表之链表实验

2025-05-27 19:46:33 670

原创 顺序表实验

我们定义一个结构体SeqList// 动态顺序表结构体定义// 动态数组指针int size;// 当前有效数据数量// 数组容量} SL;关键点说明arr是指向动态数组的指针,用于存储数据。size表示当前已有的元素个数。capacity表示当前分配的最大容量。ElemType被定义为int,可以根据需要修改为其他类型。掌握了顺序表的定义与基本操作实现了有序插入、数据反转等实用功能学会了随机数生成与格式化输出技巧理解了C语言中动态内存的申请与释放机制。

2025-05-26 13:32:20 775

原创 常用仪器使用与门逻辑电路实验

数字逻辑与系统实验一——常见器件使用及门电路实验

2025-05-26 12:16:10 1064 3

原创 STM32基础综合案例:花式流水灯(寄存器实现)

一、需求描述引言前面陆陆续续学习了STM32的相关知识,截至目前,其基础知识就算学完了。接下来,我们将借助一个综合的案例——花式流水灯,以巩固前面学习的STM32相关知识,包括GPIO的使用、按键控制、中断控制、串口使用以及I2C的使用。案例描述本案例“花式流水灯”旨在通过实现一个,综合应用包括技术。系统设计用于,用户可以,并使用特定符号进行分隔。此外,通过的显示。系统启动时会尝试从M24C02 EEPROM中读取预存的方案数据,若无数据则等待串口指令并更新存储。

2025-02-16 14:18:32 1106 2

原创 硬件实现I2C案例(HAL库实现)

二、硬件电路设计引言前面陆陆续续利用寄存器方式实现了软件模拟I2C、硬件实现I2C的案例。接下来,我们使用HAL库的方式实现以下硬件I2C案例。当然了,本次案例可能复用前面寄存器实现的硬件I2C案例中实现的某些代码块,所以建议看这之前可以先看看前面寄存器实现的案例介绍。一、需求描述二、硬件电路设计本次案例属于是前面寄存器实现的硬件I2C案例的另一种实现方式,故需求和硬件设计不变,不清楚的可参考下面文章:硬件实现I2C案例(寄存器实现)_iic硬件电路-优快云博客三、软件设计。

2025-02-14 13:31:05 1908

原创 硬件实现I2C案例(寄存器实现)

首先,读取SR1已经在等待过程的条件中进行,然后由于我们BTF是在传输数据过程中被置位的,而之后的传输无非两种情况:一是继续传输数据,则在下一次用到BTF之前就会进行数据的读写操作,此时BTF会被自动清除;这就意味着,从机发送数据到总线上后发出的应答以及之后主机发出的停止信号应该在当前发送数据前设置好才对,换句话说,如果从机发送数据了之后才设置ACK以及STOP的话,会导致这俩信号将在这之后传输的字节接收后才产生,这样的话就对应的就是下一次传输的字节数据的应答与停止了。而且寄存器对这俩标志位的描述是。

2025-02-07 21:18:22 1272

原创 硬件实现I2C常用寄存器简单介绍

而从模式下需要判断停止信号是否发出(STOPF),是因为从设备需要保证确实识别到通信结束了再去开始一段新的通信,否则从设备贸然停止本次通信将有失配合,而停止信号表示主设备结束了当前传输,从设备可以准备下一次通信,所以为了保证在主设备确实发出停止信号后再去进行新的通信,这里从设备需要一个标志STOPF来判断主机已经发出停止信号。可与串口介绍寄存器时的RXNE类比,通常用于接收或者读取数据前的判断数据寄存器是否填满,填满了意味着可以开始接收数据了,此时自动置1,软件对数据寄存器进行读写时会自动清除。

2025-02-07 00:08:04 941

原创 I2C外设基本介绍

同时,无论在模拟的周期频率上,还是在时序的模拟上,利用软件模拟的I2C也显得没那么精准,而且大量的延时和电平的控制全部都需要CPU进行控制,大大加重了CPU的负担......考虑到这些问题,本次我们就来介绍32中的。首先,深入SDA数据总线,箭头走向一个数据控制模块,顾名思义控制来往数据的,因为I2C协议规定位传输高位先行,所以箭头继续直接走向【数据移位寄存器】的最右方,表示外部接收的数据从低位进入移位寄存器,然后不断左移依次填满,最后将移位寄存器中满满的数据并行交给DR数据寄存器处理。

2025-02-06 20:28:32 791

原创 软件模拟I2C案例(寄存器实现)

宏定义起到一个全局替换的效果,经过宏定义,我们可以将某些复杂代码利用简洁移动的语句进行代替,增强代码可读性和编写效率。(1)由于I2C协议涉及到。

2025-02-06 12:29:47 1702

原创 模拟I2C通讯之时序图整理

引言前面介绍了I2C通讯的概念、原理以及协议,然后在介绍了支持I2C协议的一款EEPROM芯片M24C02的相关知识后,接下来我们再来整理一下STM32使用I2C通讯与M24C02芯片进行数据传递所需要理解的一些。一、I2C通讯协议相关时序1、起始和停止信号I2C通讯时进行数据传递前我们先会有一个起始信号,同时数据传递结束后会有一个停止信号。由上述时序图可知,一开始设备不会占用总线即总线空闲,默认高阻态,同时总线外边连上拉电阻接到电源,所以总线呈现高电平。

2025-02-03 13:36:01 1886

原创 软件模拟I2C案例前提须知——EEPROM芯片之M24C02

值得注意的是,本次案例使用的软件模拟I2C,所以我们并不会使用STM32芯片内部的I2C模块,只是借助软件去模拟I2C协议的时序状态。接着还有两个引脚分别是SCL和SDA,显然就是连接两根总线的引脚。由于该芯片手册不光是关于M24C02芯片的介绍,还有M24C01等的介绍,所以这里关于存储上有两种,分别是1kbit和2kbit,当然,我们的芯片内存时2kbit。这里的设备地址是进行数据传递之前就要先知道的设备码,之后才会根据需要去传输对应的EEPROM存储器中对于的内存单元,也就是那个8位的数据地址。

2025-02-01 12:24:15 1292

原创 I2C基础知识

引言引言这里祝大家新年快乐!前面我们介绍了串口通讯协议,现在我们继续来介绍另一种常见的简单的串行通讯方式——。一、什么是I2C是由Phiilps公司在上个世纪80年代开发的,其英文翻译过来实际上是【内部集成电路】,所以他就是为。关于,简单说明一下:根据英文缩写,应该是写成IIC,不过通常我们读的时候会把两个I读成I2(I的平方的意思,标准写法的2应该是在I的右上角)。之所以平时描述时直接写I2C,主要是因为打角标相对麻烦,所以就出现这样的写法。

2025-01-31 20:55:00 1203

原创 STM32调试手段:重定向printf串口

其实也非常简单,其在STM32CubeMX中需要进行的配置和前面串口通讯轮询案例的HAL库实现需要的配置是一样的,因为本次作重定向主要就只是多重写一个fputc函数,即。很简单,只需要将 fputc 里面的输出指向 STM32 串口即可,fputc 函数有固定的格式,我们只需要在函数内操作STM32串口即可。我们知道 C 语言中printf 函数默认输出设备是控制台,如果要实现在串口或者 LCD 上显示,必须重定义C语言标准库函数里调用的与输出设备相关的函数。然后,根据上面所述原理,这里直接给上。

2025-01-22 16:53:08 4270

原创 USART_串口通讯中断案例(HAL库实现)

我们现在是想找一下串口中断相关的回调函数,所以先得知道怎么样用该文件中定义的内容,如上图有描述“如何使用这个driver”,大概就是会涉及到咱要找的回调函数了。当然本次我们主要是借助中断实现数据的接收,所以看看关于数据接收的中断回调函数即可,其他的我们有时间自己去同理试一试也可以的。,这就说明我们此时不是自己给长度了,其会自动检测数据长度,因此我们可以直接从中断回调函数中拿到我们接受到的数据的长度,然后在发送接收数据时传进去即可。前面,我们使用HAL库实现了串口通讯的轮询案例,接下来,我们。

2025-01-21 18:21:00 1167

原创 USART_串口通讯轮询案例(HAL库实现)

多了一个判断,因为这里HAL库中的发送是无脑直接拿到数据就发的,我们现在在循环中,没有发之前给的buffer,虽然我们没写入数据,但是其初始化是0,所以此时接收到的就是0,即发送就会直接把“\0”全部发出来。而为了避免这种情况,我们对接收函数做一个判断,因为其是有返回值的,就是为了避免接收有问题,当它确实正确接收到数据后,就会返回HAL_OK,所以我们这里判断它是否等于这个,等于即说明接收到我们发的了,这样我们再把数据发出来就好了。显然,这里就看见GPIO口的配置了,同时我们会发现,上面它定义了一个。

2025-01-20 17:53:09 1785

原创 USART_串口通讯中断案例(一)(寄存器实现)

根据前面轮询案例的分析,我们发现在进行字符串收发的时候形成的循环阻塞相对会多一些,一方面有单字符内部接收时的轮询、另一方面还有我们循环每一次的单字符接收,这样的轮询接收字符的方式就会大大降低CPU的执行效率。由于我们案例使用的串口是USART1,所以我们首先得去知道USART1的中断处理函数叫啥,前面讲述中断的时候说过:可以直接。前面轮询案例已经介绍了串口主要使用的一些寄存器,这里我们将使用中断来进行串口通讯,所以避免不了的是开启串口相关中断使能,按照前面介绍的寄存器,如果看得仔细的朋友应该能发现,在。

2025-01-19 15:07:03 1167

原创 USART_案例(一)接收字符串代码改进

注意:这里最后我们让接收到的字符长度-1,是因为接收字符串时最后产生空闲帧结束字符接收会再多返回一个0,在字符串中就是“\0”,但是这不是我们希望收到的字符,所以我们干脆长度-1,这样就不会显示出来,在逻辑上我们就相当于没有接收到额外的字符了,这样也更符合我们接收的内容。根据上面的理解,TXE为1是指此时发送的数据为空,可以开始下一轮数据的发送。根据上图说明我们容易知道TXE表示的是发送数据寄存器为空的标志,当数据寄存器中的数据被转移到移位寄存器时就会被置1,当我们再次写入数据的时候,该位又会清零。

2025-01-18 20:59:47 766

原创 USART_串口通讯轮询案例(一)(寄存器实现)

3.1.1波特率寄存器当前我们的串口通讯不使用同步功能,所以。

2025-01-18 16:29:56 986

原创 STM32之USART_串口通讯

目录引言一、通讯相关基础1.1 并行通讯与串行通讯1.2 单工、半双工、全双工通讯1.3 同步与异步通讯1.4 串口介绍1.5 串口通讯协议二、USART外设三、USART_功能框图原理介绍四、波特率的设置五、总结引言 本次介绍STM32中片上外设中的模块之一——串口通讯模块,也是最为简单基础的一种串口通讯,其名称也叫USART。当然,串口、USART这俩概念到底是什么、他们俩之间的关系是什么、哪些模块叫串口、我们可能见过的RS232等就叫

2025-01-16 15:12:06 1813 2

原创 STM32按键中断案例(HAL库实现)

现在,我们再来基于HAL库对该案例进行二次实现,关于HAL库的基本操作流程,如果有朋友还不熟悉的话,可以参考我前面最初关于HAL库的基本介绍以及基于HAL库实现流水灯的详细讲解,这里我们就直接开始实现了。会发现,调用的函数中也主要是俩条语句,实际上551行这个语句时清除中断标志位的意思,参数就是我们传进来的按键对应端口,其底层就是我们寄存器实现时配置的挂起寄存器,不信我们可以看看。然后如下图看看生成的代码,发现我们寄存器方式编写的大部分代码,如按键和LED的初始化都已经自动生成好了,也就是说。

2025-01-10 22:47:53 1768

原创 STM32按键中断案例(基于寄存器)

三、软件设计由于本次案例将基于寄存器实现,同时本次案例中涉及到中断处理,通过我们前面对中断的学习容易发现,处理中断过程中会。

2025-01-10 18:18:19 1253

原创 stm32的中断系统

引言 在计算机系统中,我们的程序在执行时常常不只是一味地从上到下的执行,还可能出现一些突发事件,此时需要我们先去执行后再返回原来的位置继续执行;同时,我们写代码中在最后都是放入一个死循环中,意味着程序总是只能把主程序运行完以后才能执行其他事件,而这显然容易耽误其他事件的执行。为此,在计算机系统中引入了一种机制,能够在一定时间打断主程序的运行,优先去执行某个特定程序,这种机制就是今天我们要详细叙述的中断机制。 鉴于本次文章将比较详细的介绍中断相关知识,所以篇幅比较长,大概万字以

2025-01-09 15:09:04 1079

原创 依次开关灯案例(HAL库练习)

然后,将之前我们写好的LED驱动代码直接加到该工程中。因为前面流水灯案例关于工程的配置与这里一模一样,只是代码核心逻辑不同。所以对于LED的驱动我们直接拿来用,写起来也简单。

2024-12-05 09:03:59 755

原创 流水灯案例工程实现(基于HAL库)

这时候我们就知道了,这里APB1报错是因为给的时钟频率太高了,因此我们需要对这里进行分频,72MHz只需进行二分频(/2)即可。

2024-11-30 13:22:26 1172

原创 HAL库的简单介绍以及环境搭建

为什么要学习HAL库?寄存器开发效率比较低,在工作中如果想快速开发,还是要会用到HAL库开发。HAL库是目前ST主力推广的开发方式,所以你如果还要用ST的芯片,会使用HAL库开发是势在必行的。而且最最关键的是,使用HAL开发有诸多的好处。目前,HAL库已经支持STM32全线产品。什么是HAL库?HAL库的全称是Hardware Abstraction Layer,翻译成硬件抽象层。

2024-11-23 21:28:17 1675

原创 STM32时钟系统的简单介绍

HSE时钟高速外部时钟是由外部时钟源提供,目前几乎所有的STM32单片机的设计都是在外部接一个8MHz的晶振,经过PLL倍频(9倍频)后得到一个72MHz的系统时钟。我们系统默认就是这个时钟。这个在启动文件可以看到。

2024-11-22 12:35:36 1208

原创 STM32总体架构简单介绍

因此,在了解了STM32的基本用法以后,我们有必要去宏观的了解一下它的总体架构,因此,我们代码中用到的一些变量都是被存放在SRAM里面,而下载的代码程序以及程序中用到的常量都是统一存储在flash里面,因为我们程序本身也会被转成二进制文件,所以都放在flash里面了,那么很明显,我们。其中,这里重要的是去与其他设备进行数据的通信,谁给谁发不重要。理解了主动单元,被动单元就好理解了,简单理解就是没办法自己控制去进行发送的设备,只能去听别人的,相当于是一个从属的设备,即被动单元是一个处于从属状态的一种设备。

2024-11-21 21:17:26 3647 1

原创 GPIO流水灯改进实现(结构化)(寄存器版)

本次叙述了在编写代码时涉及到的一种非常重要的思想 ------ 模块化思想,同时也学到了如何去通过分文件处理来改善代码结构,使代码层次更加清晰,更易快速了解代码整体结构。t=O83At=O83AGPIO_流水灯案例(寄存器)-优快云博客https://blog.youkuaiyun.com/2301_79475128/article/details/143834694?

2024-11-19 15:28:14 976

原创 GPIO_流水灯案例(寄存器)

最后关闭keil。至此,关于流水灯的项目工程就创建并配置好了,后面就开始正式编写相关代码了。

2024-11-18 00:34:17 1326 2

原创 Keil+VSCode优化开发体验

本期我们讲解了关于VSCode在单片机开发编码带来的优化体验以及实现keil和VSCode的联合开发的详细步骤以及相关注意事项。

2024-11-17 15:15:07 7046 14

原创 GPIO相关的寄存器(重要)

我们进入技术手册,进入GPIO的寄存器地址映像,就能看见GPIO相关的7个寄存器的排列的信息了。从图中可以看见,每一个寄存器的数据都是32位存储,只不过有些只使用了低16位,其余位保留位。从图中我们可以看出每个寄存器的大致信息,如偏移地址、寄存器名称、复位值以及位。前两个配置寄存器前面我们主要用于配置GPIO的工作模式,这是32位都用上了;接着的两个输入输出数据寄存器只使用低16位的部分,高16位保留,这是由于每一组GPIO端口恰好有16个引脚,对应寄存器16位,所以就这样设定了;紧接着就是。

2024-11-16 23:18:57 3259 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除