自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 我的年度写作计划

这是笔者的2025开发计划!

2025-02-08 22:21:10 604

原创 IMX6ULL学习整理篇——Linux使用更现代的GPIO操作简单设备

​ 经过层层考验,我们即将接近现代的LED驱动的解决方案了。那就是使用最现代的方式开发一个简单的GPIO驱动外设。​ 如果您忘记了设备树的相关内容,请自行到笔者的上一篇博客复习。

2025-04-04 14:24:13 933

原创 从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——最终章:构建基本的程序运行流——使用我们构建的驱动完成天气和时间的获取

现在我们终于可以完成业务逻辑了,那就是使用我们的驱动获取数据。

2025-04-04 10:09:58 745

原创 从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第2章——构建简单的ESP8266驱动

从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第2章——构建简单的ESP8266驱动

2025-04-04 08:19:15 613

原创 从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第1章 简单的介绍一下ESP8266和他的编程指令

ESP8266是由上海乐鑫信息科技(Espressif Systems)设计开发的一款高度集成的Wi-Fi系统级芯片(SoC),而市场上常见的ESP8266模块则是深圳安信可公司基于该芯片开发的完整解决方案(增加了必要的外围电路、串口Flash和板载天线等)。这款芯片首次将Wi-Fi连接功能以极低成本带入大众视野,彻底改变了物联网设备的开发方式。(上述事情是我从手册里CV的)简单的说,如果我们只是关心器件的编程特性的话,我们要看的实际上就是让我们看到我们的器件的引脚。

2025-04-03 18:12:22 543

原创 STM32F103C8T6单片机开发:将我们的成果封装成库(库函数版本)

这里应该算是笔者的教程和其他的教程并不太一样的地方,基本上全程都只是零星的教会你如何使用这些器件和外设后,就基本上不会再有其他内容了,但是笔者想说的是,一个比较好的封装和抽象有的时候可以帮助自己省力无穷。请看笔者的一个LED电灯程序​​​​while (1)对于一个这样的程序,笔者分离了初始化配置和初始化的流程,而且配备了潜在的后置初始化,另一方面,他强制的迫使你理清楚这些外设的初始化的流程,在你完成了学习后,你应当会对这些代码做简单的封装,而不是直接cv代码就满足。

2025-04-03 11:17:50 586

原创 STM32F103C8T6单片机开发:将我们的成果封装成库(HAL库版本)

这里应该算是笔者的教程和其他的教程并不太一样的地方,基本上全程都只是零星的教会你如何使用这些器件和外设后,就基本上不会再有其他内容了,但是笔者想说的是,一个比较好的封装和抽象有的时候可以帮助自己省力无穷。请看笔者的一个LED电灯程序​​​​​int main()HAL_Init();​while(1)

2025-04-03 11:16:19 888

原创 STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出

你玩够了前面的实验,现在就要准备竖起耳朵听听原理了。GPIO是单片机中很重要的基础外设,是单片机跟外界沟通的桥梁。查看原理,一个非常好的习惯就是学会阅读我们的单片机手册。上面的两张图像是我们亲爱的单片机GPIO机制全家福,是我们分析源代码和原理的一个重要的辅助手段,哦,我想你应该再说——这我分析鸡毛啊,对,这个图是8种GPIO模式混合在了一起的图像,而且你发现,实际上,第一张图和第二章图在物理上只有一个区别,那就是最右侧的上拉部分的二极管从VDD换成了VDD_FT,还得的笔者的分析资源手册的部分吗?

2025-04-02 15:54:21 1386

原创 STM32F103C8T6单片机开发:使用GPIO输入模式完成按键的检测(HAL库版本)

上一节博客中,我们使用了GPIO的推完输出模式,完成了LED的驱动,我们基本上见识道了GPIO中的“输出”功能,但是这个还没有完事,我们还有一个输入没有说明呢!因此,我们这个文档,实际上就是在说明输入模式的使用。

2025-04-02 08:52:39 746

原创 STM32F103C8T6单片机的起始点:使用GPIO输出点亮我们的第一个小灯(HAL库版本)

我们都说,学习一个型号的单片机的第一个尝试,就是使用这个单片机点亮一个小灯。点亮小灯就意味着我们开始初步掌握我们手中的单片机了,我们学会使用单片机来控制最简单的外设了。当然,只会这个还是远远不够的,我们需要进一步理解单片机的更多知识才能走的更远。

2025-04-02 08:48:18 915

原创 STM32F103C8T6单片机开发:使用GPIO输入模式完成按键的检测

上一节博客中,我们使用了GPIO的推完输出模式,完成了LED的驱动,我们基本上见识道了GPIO中的“输出”功能,但是这个还没有完事,我们还有一个输入没有说明呢!因此,我们这个文档,实际上就是在说明输入模式的使用。

2025-04-02 08:23:53 910

原创 STM32F103C8T6单片机的起始点:使用GPIO输出点亮我们的第一个小灯(标准库篇)

我们都说,学习一个型号的单片机的第一个尝试,就是使用这个单片机点亮一个小灯。点亮小灯就意味着我们开始初步掌握我们手中的单片机了,我们学会使用单片机来控制最简单的外设了。当然,只会这个还是远远不够的,我们需要进一步理解单片机的更多知识才能走的更远。

2025-04-01 19:20:00 969

原创 从0到1的数据结构教程:单链表

我们下面需要做的事情,是简单的介绍一下单链表,为什么没有涉及循环链表和双向链表呢?因为他们是对单链表非常简单的改进。在这里,我们使用单链表来快速的说明链表的特点,这样印象可以更加深刻。上一篇博客的地址在:从0到1的数据结构教程——深入思考动态数组-优快云博客我们这一张的主要内容,就是仔细的学习动态数组这个数据结构。出于刷算法题的目的,笔者需要强调的是——动态数组这个事情,本质上是为了更好的理解数组操作的概念。

2025-03-31 16:11:07 595

原创 从0到1的数据结构教程——深入思考动态数组

我们这一张的主要内容,就是仔细的学习动态数组这个数据结构。出于刷算法题的目的,笔者需要强调的是——动态数组这个事情,本质上是为了更好的理解数组操作的概念。看这篇博客的朋友,是需要通过这篇博客理解数组性质的,作为基本数据结构的根基,笔者也会强调一下常见的数据结构操作有哪些,这样我们理解了数据结构的操作,思考项目,或者功利点说,刷题更加的方便。笔者这里也有一份最小简单实现的代码,放在文章的,介绍各种数据结构原理的章节部分,感兴趣的朋友酌情参考即可!什么是动态数组?

2025-03-30 20:41:20 787

原创 从0开始——在PlatformIO下开展STM32单片机的HAL库函数编程指南

笔者最开始的尝试是在2025年的寒假,准备向PlatformIO迁移HAL库,注意,截止到目前,PlatformIO对HAL库的支持已经非常完善了。一些博客给出的配置可能已经过时,或者因为不太理解PIO的结构导致错误的配置。HAL库因为存在大量的回调函数,导致移植起来相当的困难(笔者稍有的猜测是为了跟CubeMX耦合,当然这个说法大家图一乐就好),漏了东西就会一不小心就会把单片机陷入Infinite Loop了。因此,需要我们做细致的移植。

2025-03-29 21:16:19 321

原创 从0开始在PlatformIO下开展STM32单片机的库函数编程指南

终于准备开STM32F1系列的文档教程了!笔者在2025年3月29日成功的独立移植了标准库到了PlatformIO上,换而言之,从现在开始,我们可以轻量级的接触库函数编程了(至少,彻底摆脱MDK5那个不是人的开发环境)这个文档的作用,就是教授各位如何最小的配置,从而在PlatformIO下展开库函数编程。

2025-03-29 20:37:42 1101

原创 从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第0章:前言

这个文档打算尝试介绍从0开始构建一个简单的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)。目前为止,这个文档描述的部分是——Non-RTOS的前后台程序框架的源码的文档,后续笔者也许会更新使用FreeRTOS重构的,交互性更好的版本,但是归根结底,大部分的原理是不会发生改动。

2025-03-27 08:57:57 572

原创 从0到1的数据结构教程(C/C++)——让我们从最简单的线性表开始(导论)

​ 在一个线性表中,每一个元素都只有一个直接前驱(你看这个数组,他的上一个,只有一个,比如说第二个元素的前一个就是第一个元素)和一个直接后继你看这个数组,他的下一个,只有一个,比如说第二个元素的后一个就是第三个元素),除了第一个元素没有前驱,最后一个元素没有后继。”是我们最开始的概念,后面我们的学习会看到,这个名称的根本原因更多的是只有一个直接前驱(你看这个数组,他的上一个,只有一个,比如说第二个元素的前一个就是第一个元素)和一个直接后继。我们常说的——数组,链表等,就隶属于线性表的范畴。

2025-03-25 10:28:34 449

原创 FreeRTOS的任务管理抽象2——源码级分析任务的挂起和恢复

​ 我们这一篇博客的目的是理解FreeRTOS的挂起和恢复。这里,我们说的挂起指的是将我们的任务状态切换到挂起态。这个时候,我们的任务就会放弃竞争CPU,成为一个佛系的,不干活挂死的任务,这个挂死是我们主动让他挂起来的,啥时候恢复是我们说的算的。​ 可以看到,我们只需要传递任务句柄就好了,这就说明了我们要把哪一个任务挂起来,哪一个任务恢复就绪。

2025-03-25 09:05:33 1128

原创 FreeRTOS: 任务创建和删除Demo

​ 下面我们就来简单的聊一聊FreeRTOS的创建的demo。代码在freeRTOS/1_BaseTaskCreationAPI当中。如果你下载了PlaformIO的话,只需要在当前文件夹打开即可。​ 笔者的这个实验现象非常的简单,就是两个灯交替闪烁。这里为了说明代码,我们按照程序的执行流一步一步说明。

2025-03-25 07:50:07 520

原创 FreeRTOS的任务管理抽象1——源码级别分析任务的创建和删除

​ 任务的管理上存在六个非常常见的函数。我们这里先说前三个:这三个函数包揽了我们的任务的创建和删除任务删除的函数​ 我们的工作就是把这些个函数搞明白,先会用在说。

2025-03-24 16:35:45 832

原创 基于STM32F4平台的框架开发:FREERTOS基础之任务概念

这是FreeRTOS的第一个内容,也是FreeRTOS笔者认为算是核心的一个内容。我们使用FreeRTOS的目的就是解耦合任务实现和任务调度,任务协商的职责,从而化简咱们写代码的难度。当然,FreeRTOS的功能不止于此,但是笔者认为,学习掌握任务的创建和删除,是理解后面的事务的一个非常重要的出发点。本项目隶属于BetterATK:任务(Task)是操作系统调度的基本单位,也是实现多任务并发的核心机制。任务可以理解为一个独立的执行单元,每个任务都有自己的代码逻辑、堆栈空间和优先级。

2025-03-24 08:52:34 596

原创 浅谈Qt事件子系统——以可拖动的通用Widget为例子

​ 这个是每一个小项目的惯例,我会介绍大部分Qt程序中使用到的细节,比如说,本项目当中就是eventFilter和事件处理队列的Qt编程技术。这个也是我们编程Qt的一个重点。​ 本项目打算介绍的是——Qt的事件处理机制,以及对象事件监听机制。如果您很熟悉了,可以考虑直接跳过本篇。在许多场景中,内置的事件类型无法满足特定需求,开发者可以通过继承QEvent来定义自定义事件。定义新的事件类型(通常选用Qt::User 类型及之后的值)。创建自定义事件类,包含特定数据和处理逻辑。

2025-03-22 15:42:41 1118 1

原创 ARM架构薄记2——ARM学习架构抓手(以ARMv7为例子)

​ 关于ARMv7架构的说明,实际上上一篇博客我说的差不多了,但是这里,我们对ARMv7还是重新的偏重于技术实现的层次上,再说一次ARMv7架构。这里,我将结合自己整理的要点抓手,带着过一次ARMv7架构。​ ARM架构本身属于RISC架构,其ARMv7作为ARM架构的子类自然满足RISC架构的基本理念:简单、高效与低功耗。

2025-03-22 12:00:50 1362

原创 ARM架构薄记小记1——ARM架构的快速介绍

​ 笔者最近正在简单的了解一下ARM架构,特别是ARM CortexA架构的部分,这里,笔者想要薄记的问题有这样一些,也算是简单记录一下自己学习ARM架构的记录。问题1:ARM架构的历史是如何的,以此我们可以洞察ARM架构设计的一些动机问题2:我们知道,ARM架构中常见的架构是ARMv7到ARMv9,这些架构有发生怎样的变化?每一个架构的一些纲领性的东西是什么?问题3:我们都知道,架构架构,几个最最核心的组成部分就是指令和寄存器的部分(当然还有其他的部分,但是笔者正在进一步学习,这里先不谈论)

2025-03-22 10:47:15 1296

原创 IMX6ULL学习篇——系统学习设备树

​ 之前的实验中,大伙多多少少也算接触了设备树这个概念,大家修订的文件是dts文件,也就是Device Tree Source文件,这是一个描述我们设备树的ASCII文本文件,也是满足一定语法的,满足何种语法,是我们等回会讨论的话题。

2025-03-22 09:05:06 1015

原创 单片机开发资源分析实战——以STM32F407ZGT6为例子,分析我们的单片机

我们的单片机最后是依靠GPIO引脚跟外界进行沟通,我们查询了上面的资源之,确定了这个板子是我们的一个可以选择的方案后,下一步,就是看看结合我们的需求,简单的调研一下我们的GPIO引脚的复用情况。这一部分的内容一般是Pinouts and pin description那一部分的内容,注意,我们在学习其他的单片机的时候,可能板块不会叫这个名字。笔者在之前的博客中说到了我们的手册可以从哪里来,所以这里我们就不去再重复说下面的资源是从哪里考证的——就是从资源手册的第一页中摘取的。这里给出的是英文手册的截图。

2025-03-19 18:06:32 988

原创 单片机开发资源分析实战——以STM32F103ZET6为例子,分析我们的单片机

我们的单片机最后是依靠GPIO引脚跟外界进行沟通,我们查询了上面的资源之,确定了这个板子是我们的一个可以选择的方案后,下一步,就是看看结合我们的需求,简单的调研一下我们的GPIO引脚的复用情况。这一部分的内容一般是Pinouts and pin description那一部分的内容,注意,我们在学习其他的单片机的时候,可能板块不会叫这个名字。笔者在之前的博客中说到了我们的手册可以从哪里来,所以这里我们就不去再重复说下面的资源是从哪里考证的——就是从资源手册的第一页中摘取的。这里给出的是英文手册的截图。

2025-03-19 17:55:49 854

原创 单片机开发资源分析的实战——以STM32G431RBT6为例子的单片机资源分析

以PB8为例子,我们的PB8可以做普通的IO口,可以用来承受5V的电压(FT标识的部分就是可承受5V的意思),同时,我们的PB8可以做TIM4定时器的第三个通道和硬件IIC的SCL,或者是CAN通信下的接受端(CANRX)我们的单片机最后是依靠GPIO引脚跟外界进行沟通,我们查询了上面的资源之,确定了这个板子是我们的一个可以选择的方案后,下一步,就是看看结合我们的需求,简单的调研一下我们的GPIO引脚的复用情况。STM32G431RBT6的命名遵循STM32系列的命名规则,每个部分代表特定的含义。

2025-03-18 06:42:10 950

原创 单片机开发资源分析的实战——以STM32F103C8T6为例子的单片机资源分析

以PB8为例子,我们的PB8可以做普通的IO口,可以用来承受5V的电压(FT标识的部分就是可承受5V的意思),同时,我们的PB8可以做TIM4定时器的第三个通道和硬件IIC的SCL,或者是CAN通信下的接受端(CANRX)我们的单片机最后是依靠GPIO引脚跟外界进行沟通,我们查询了上面的资源之,确定了这个板子是我们的一个可以选择的方案后,下一步,就是看看结合我们的需求,简单的调研一下我们的GPIO引脚的复用情况。这里给出的是英文手册的截图。可以看到,我们的STM32F103C8T6的资源还是非常的丰富的。

2025-03-17 09:20:03 1658

原创 理解我们单片机拥有的资源

本文讲解如何,去哪里入手单片机的资源查询

2025-03-17 08:28:49 970

原创 计算机网络笔记再战——理解几个经典的协议HTTP章4

​ HTTP是不安全的,它使用的是明文传递,这意味着潜在的报文纂改。这里我们将学习更加安全的HTTPS协议​ HTTP本身没有办法加密,但是可以跟SSL(Secure Socket Layer)或者是TLS(Transport Layer Security)一起配套使用。这个时候,我们先使用安全加密协议进行加密。这样信道就可以被认为是可靠的。​ 但还有一种——我们如何确保双方是真实存在而不是伪造的呢?毕竟谁都可以发起HTTP,我可以伪装成任何人发起通信,这是不安全的。

2025-03-16 13:25:17 1099

原创 计算机网络笔记再战——理解几个经典的协议HTTP章3

​ 我们知道,ICMP可以传递IP通信时候的状态如何。HTTP虽然没有辅助的解析,但是它可以使用状态码来表达我们的HTTP请求的结果,标记服务器端的处理是否正常、通知出现的错误等工作。这就是状态码的职责。​ 比如说,当我们的状态码是2xx的时候,就说明我们的请求不光到达了服务器,而且还得到了正确的处理。如果出现了4XX,则是说明我们的服务器无法请求处理(这个请求是你的请求出现的问题),如果出现了5XX,说明是服务器内部的错误,这是服务器的问题。​ 具体每一个号码的请求请参考附录。

2025-03-16 13:09:03 728

原创 IMX6ULL学习整理篇——Linux驱动开发的基础3:向新框架迁移

​ 我们知道Linux给我们的设备提供了文件的抽象,这里,我们看到了open和release中,可以指定操作具体的设备名称,办法就是设置file结构体中的private_data,也就是设置私有成员。\n");return 0;\n");return 0;​ 这样我们就可以在多设备中区分我们再操作哪一个设备了,当然LED我们看不出来。int major;int minor;} MyLED;return!\n");

2025-03-15 19:34:31 808

原创 IMX6ULL学习整理篇——Linux驱动开发的基础2 老框架的一次实战:LED驱动

​ 在上一篇博客中,我们实现了从0开始搭建的字符设备驱动框架,但是这个框架还是空中楼阁,没有应用,很难说明我们框架的正确性。这里,我们就准备好驱动正点原子开发板上的一个LED小灯外设。他被接在了GPIO01_IO03上。

2025-03-15 18:54:15 681

原创 Linux驱动开发框架基础——新旧字符设备驱动笔记整理(1)

​ 首先,各位需要知道的是。广义的说——Linux驱动开发的开发对象一般分成三个大类:字符设备,块设备和网络设备。实际上,Linux的驱动开发,笔者倾向于认为是在Linux的大框架下告知我们的Linux如何操作我们给定的设备。所以,想好我们如何操作设备是驱动开发的核心。打开?关闭?读?写?以及其他的属性。现在,我们就来开始尝试一下学习Linux驱动开发。

2025-03-15 18:31:48 1010

原创 IMX6ULL学习整理篇——UBoot的一些基础知识(2. 启动流程)

讲讲uboot从上电到启动Linux的流程

2025-03-15 12:40:10 702

原创 IMX6ULL学习整理篇——UBoot的一些基础知识(1.编译流程)

笔者整理了最近刷IMX6ULL的一些学习笔记,这里打算稍微整理一下东西发上来作为作为一个补充。

2025-03-15 07:37:48 943

原创 基于STM32F407ZGT6的硬件平台,(可选CubeMX) + PlatformIO软件开发的FreeRTOS部署指南

笔者在结束了自己的Operating System手搓之旅之后,笔者开展的第一个研究。目前笔者发现,中文互联网上对FreeRTOS于PlatformIO的部署资料甚少(好像大家都很喜欢Keil或者是CubeIDE,这也是,没人喜欢更换软件开发成本)。而且,大部分我看到的方案都比较老了。本教程写于2025年的3月13号,基于笔者没有办法保证整个参考办法一直有效,请各位看官酌情参考。

2025-03-13 21:34:27 1017 2

原创 从0开始的操作系统手搓教程22——锁让我们的并发变得更加安全

笔者是先于此项目才知道的锁的。实际上,上一个问题的根源是——锁的缺失导致程序潜在的不安全。如果你学习过锁和信号量,那显然,你就可以直接跳到实现上,直接实现一个信号量和锁就可以结束本小节的内容了,如果你没有,请听我慢慢道来。现在呢,我们启动这个存在问题的内核。然后当运行还在正常的时候,快速的嗯下我们的Ctrl + C稍微让我们的内核休息一下。然后,我们就打开外部中断检测。OK,在执行一段时间后,我们终于看到了触发异常的地方了这里,我们看到的是时刻00191782969发生了不应该发生的东西。

2025-03-11 10:49:09 959

学术英语词汇表-U1..pdf

学术英语词汇表-U1..pdf

2022-09-27

空空如也

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

TA关注的人

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