自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 问答 (1)
  • 收藏
  • 关注

原创 第30讲 WS2812炫彩灯控魔术师

定时器中有一个可以触发DMA的事件叫做输出比较,也就是当计数器的值与输出比较寄存器的值相等时,便会触发DMA搬运,将下一个周期的占空比所用数据搬运到输出比较寄存器,此时本周期的电平已经完成切换不再受影响,也提前为下一个周期准备好了输出比较值。内存中的数据地址需要自增来实现数据的一个个搬运,同时因为输出比较寄存器大小为16位置,所以选项卡中默认的数据宽度为半个字节。WS2812的典型应用就是彩色灯带的控制,可以发出3路PWM信号调节灯珠的亮度,我们需要做的就是用单片机“告诉“每颗灯珠需要的亮度。

2025-03-19 21:40:13 419

原创 6层高速PCB设计入门第1~10讲

最需要注意的信号就是FPGA与DDR3、HDMI交互的信号,其次是GD32读写TF Card的SPI信号。开发板资料文档:https://wiki.lckfb.com/zh-hans/fpga-ljpi/当然由于这个项目需要的引出接口,所以FPGA的bank上所有引脚都需要争取引用差分线。初始电源主要有三种输入方式,①Type-C口5V_IN供电;③GD32单片机的JTAG下载接口;②FPGA芯片的JTAG下载接口;

2025-02-24 19:40:52 518

原创 第29讲 关于DMA的那些事

我们在使用DMA时就像是在发送快递一样,将外设地址填入外设地址寄存器,内存地址填入储存器地址寄存器中。如果数据流向是peripheral to memory,那么就相当于发货地址是外设地址,收货地址是内存地址,左右两个地址寄存器相当于快递单。每一个DMA通道都有其对应的外设寄存器地址与存储器地址寄存器,一些其他设置信息,例如:地址自增、数据宽度、传输方向、循环模式、优先级等存储在其他寄存器上。在stm32f103系列芯片中,DMA1控制器分管七条DMA通道。DMA2分管5条DMA通道。

2025-02-17 17:31:26 278

原创 链表的反转操作

首先是利用结构体功能实现链表这一种数据结构,它拥有自身的成员属性(这里以一个int型数据为例)和一个指向下一个链表节点的指针组成。注意这里typedef的使用方法,结构体内部嵌套自身的时候还不能将struct ListNode简写为ListNode。再然后尝试打印链表节点中存贮的数据,新建一个临时变量,在while循环内一次打印链表内所有数据,直到当前节点的下一节点指向空指针。其次是链表的创建函数, 在堆中开辟内存空间用于存贮链表节点。以一个最简单的例子来展示C语言中链表的反转操作。

2025-02-11 21:10:24 294

原创 使用DeepSeek的技巧笔记

对于DeepSeek而言,我们不再需要那么多的提示词技巧,但还是要有两个注意点:你需要理解大语言模型的工作原理与局限,这能帮助你更好的知道AI可完成任务的边界;

2025-02-05 17:34:34 978

原创 第28讲 程序是如何控制寄存器的

如上图所示,如果我们先通过对其他寄存器的设置使得GPIOA7处于推挽输出模式,那么当ODR的第7位被设置为1时,输出控制电路就会根据此信号讲P-MOS激活,N-MOS断开,宏观上单片机的引脚将会输出推挽的高电平。与2.3节存储器映像表格中记录的一致。STM32的内部,有4GB的地址空间(0x00000000~0xFFFFFFFF),这段地址空间内存储着大量的地址数据,指向STM32内部的一小段。如果我们让指针指向一个外设寄存器的地址,就可以通过读取或者修改此地址存储大的数据,获取或者修改外设的状态。

2025-01-26 19:52:45 963

原创 Qt学习笔记第91到100讲

第91讲 串口调试助手优化Hex显示

2025-01-17 16:31:38 83

原创 Qt学习笔记第81到90讲

想要做出定时发送的效果,必须引入QT框架下的毫秒级定时器QTimer,查阅手册了解详情。为这个名叫“定时发送”的QCheckBox编写槽函数。测试结果如下,1S发两个,程序正常跑起来了。

2025-01-10 20:18:10 497

原创 “英雄“数据结构课程第五章——单向链表

由链接关系A->B组织起来的两个结点,B被称为A的后继结点,A被称为B的前驱结点。链表分为 单向链表、双向链表、循环链表等等。本文只介绍单向链表。一个链表结点由两部分组成:数据域和指针域。数据可以是任意类型,由编码的人自行指定。指针域指向后继结点的地址。对于顺序存储的结构,最大的缺点就是:插入和删除的时候需要移动大量的元素,所以基于前人的智慧,他们发明了链表。

2024-12-21 14:51:55 148

原创 Qt学习笔记第71到80讲

事件体系(事件派发 -> 事件过滤->事件分发->事件处理)中,程序员主要操作的是事件分发与事件处理。

2024-12-19 18:56:11 236

原创 Qt学习笔记第61到70讲

这个属性表示文本选择区域按照整行的宽度来显示,确保不仅仅是当前光标所在处的文本有背景颜色等样式设置,而是整行文本都会应用之前配置的背景颜色(也就是浅灰色),实现整行高亮的效果。部件按照这个列表里定义的规则(这里就是当前行高亮的相关属性设置)来更新其显示效果,最终实现在文本编辑部件中当前行被高亮显示的功能。其中cursor可以存储获取的光标当前位置信息(比如行数),format用来存储文本样式属性。获取当前行的光标位置,使用的信号和获取行列值是一样的,即通过ExtraSelection。实例对应的文本格式(

2024-12-13 18:53:52 546

原创 Qt学习笔记第51到60讲

第51讲 记事本实现打开功能

2024-12-06 14:09:12 287

原创 Excel使用技巧

①插入图表查看数据走势的步骤②修改坐标轴比例只捕获前1000个数据。

2024-11-27 16:02:16 210

原创 基于C语言文件功能的文本处理

有时候在代码编辑器(文本编辑器)中用ctrl+H替换^P->,或者\n->,不一定会成功,这个时候就可以借助编程语言来实现。②合理规划几个一换行便于代码阅读。①把换行符号转换成","

2024-11-27 11:18:12 212

原创 电工电子原理笔记

在线性电路中,任一支路的电流(或电压)可以看成是电路中每一个独立电源单独作用于电路时,在该支路产生的电流(或电压)的代数和。表述一:所有进入某节点的电流的总和等于所有离开这节点的电流的总和。表述二:假设进入某节点的电流为正值,离开这节点的电流为负值,则所有涉及这节点的电流的代数和等于零。

2024-11-13 18:45:20 596

原创 Qt学习笔记第41到50讲

它负责设置用户界面,将各种界面元素(如按钮、文本框等)与对应的成员变量关联起来,并根据设计设置初始状态和属性。布局管理器用于自动管理窗口内的子部件的大小和位置。通过设置布局,可以确保界面元素在窗口大小变化时能够正确地调整位置和大小,提高用户界面的适应性。如果有父窗口,当父窗口被销毁时,子窗口也会被自动销毁,有助于管理窗口资源和层次结构。通常是一个指向特定用户界面类的指针,这个类是由 Qt 的 UI 设计工具生成的。,可以在后续的代码中访问和操作由设计师创建的用户界面元素。,将当前窗口的布局设置为。

2024-11-05 19:55:55 362

原创 Qt学习笔记第31到40讲

多态(Polymorphism)是面向对象编程(OOP)的一个重要特性。在 C++ 中,多态是指用同一个函数名或操作符在不同的上下文中可以表现出不同的行为。简单来说,多态允许不同的对象对同一消息(函数调用)做出不同的响应。

2024-10-28 20:02:15 433

原创 Qt学习笔记第21到30讲

静态成员在C++类中是一个重要的概念,它包括静态成员变量和静态成员函数。静态成员的特点和存在的意义如下:静态成员变量1.定义:静态成员变量是类的所有对象共享的变量。与普通成员变量相比,无论创建了多少个类的实例,静态成员变量只有一份拷贝。2.初始化:静态成员变量需要在类外进行初始化,通常在类的实现文件中。3.访问:静态成员变量可以通过类名直接访问,不需要创建类的对象。也可以通过类的对象访问。4.用途:常用于存储类级别的信息(例如,计数类的实例数量)或全局数据需要被类的所有实例共。

2024-10-18 19:16:04 1049

原创 AD报错failed to add class member\net

什么原因导致的我到现在还没弄懂,总之解决方法是在PCB端删除所有现有的并且可删除的nets与components。下次问题复现了再补充截图(不想再遇到了球球了这种玄学问题)。把可删除的网络与类全部删除,再次选择原理图更改导入PCB。解决步骤:设计->类。

2024-10-15 23:05:15 664 1

原创 如何更改CubeIDE的字体大小

开门见山,CubeIDE整个软件都是基于eclipse的,所以这种操作完全互通。

2024-10-09 19:25:24 693

原创 STM32外设详解——ADC

来源:铁头山羊。

2024-10-09 17:24:23 1103

原创 C语言的类型提升机制

当在表达式中涉及这些类型的混合运算时,较小的类型会被提升为较大的类型。①char和short在大多数情况下会被提升为int。②如果int可以表示char或short的所有值,则char和short会被提升为int。③如果int不能表示char或short的所有值(这种情况很少见,通常只在某些特殊硬件上发生),则char和short会被提升为。④int和在运算时不会被提升为更大的类型,除非与更大的类型(如long)混合使用。⑤long和在运算时通常不会被提升为long long,除非与long long。

2024-10-07 20:53:04 559

原创 AD学习笔记第四章

来源:PN学堂。

2024-10-04 12:11:33 850

原创 “英雄”数据结构课程第四章——顺序表

顺序表是一种线性的数据结构,其中数据元素按照特定的顺序依次存储在连续的内存空间中。它由一系列元素组成,每个元素都与唯一的索引(下标)相关联,索引从0开始递增。顺序表中的元素可以是任意类型的数据,包括int\float\double\char等,也可以是结构体或者对象。

2024-09-26 17:26:39 211

原创 利用软件IIC驱动外挂DAC芯片——Mcp4725

软件IIC就是移植得快,我试过很多次了这个能用。今天时间有限我就只贴代码了。

2024-09-23 17:22:49 519

原创 “英雄”数据结构课程第一\二\三章——基础准备

在进行算法分析时,语句的总执行次数T(n)是关于问题规模n的函数,进而分析T(n)随着n的变化情况而确定T(n)的数量级。算法的时间复杂度就是算法的时间度量,记作:T(n)=O(f(n))用大写的O来体现算法时间复杂度的记法,我们称之为大O记法。算法在执行过程中需要的额外存储空间叫做空间复杂度,这包括算法在运行时的变量、数组、链表等数据结构所占用的内存空间。算法设计的过程中我们通常希望尽可能降低空间复杂度,提高算法的效率。

2024-09-20 14:28:08 261

原创 利用CubeMX复现正点原子TFTLCD驱动例程

①准备delay.c、delay.h、sys.c和sys.h四个文件。FMC的工作原理暂时先欠着,先记录一下CRUD的过程。这里我们使用的是BANK1 的第一个分区。点击 Configuration->FMC。②把fmc自动生成的代码注释掉一部分。配置参数如下图 17.5.1。③这个printf语句要屏蔽掉。选项卡之下配置相关参数。④整体代码,按需裁剪。

2024-09-12 16:27:18 1183

原创 C语言补习课番外篇——采样sin(x)

分析:DAC的原理这里不作过多介绍。在[0.2Π]的定义域内对sin(x)的值域进行采样,采样次数为256次;采样结果需要等比例缩放到0~4095的无符号数范围内,并且输出到一个SinFile.txt文本文档之中存放。sin(x)在[0.2Π]上的值域为[-1,1],所以需要先整体在y轴向上平移一个单位长度把范围调整为[0,2]。0对应DAC模拟值0,1对应模拟值2048,2对应模拟值4095(精度损失暂时忽略)。到3/2Π那边有点失真。肉眼看不出来,先用excel验证一下。数据->获取数据->导入数据;

2024-09-11 17:28:39 463

原创 C++语法补习课——对象特性

来源:黑马程序员;在正式开启Qt学习之前最后过一遍C++语法,具体内容参考目录。

2024-09-11 14:10:53 166

原创 C语言补习课——文件篇

读取文件:输入流写文件:输出流读写的方向判断取决与参照,一般我们站在程序的角度判断读写方向。

2024-09-06 17:28:31 484

原创 第20讲 动画讲解轻松学会STM32的PWM

最关键的是PWM可以实现动态变化,比如如图所示的用PWM拟合sin函数(原理是傅里叶变换,感兴趣的同学可以去看正点原子的手册)。合理调节占空比和频率后输出的PWM信号,就可以控制电机的转速、灯泡的明暗程度、蜂鸣器的音调、舵机的角度等外部设备参数。定时器的输出比较模式可以输出我们想要的脉冲宽度。如图所示,高电平为3.3V,低电平为0V,那么设置占空比为50%就可以从宏观角度实现输出直流信号幅值为1.65V。如图所示1个周期为1ms的PWM方波中高电平占用0.8ms,那么这个PWM方波的占空比就是80%。

2024-08-28 17:31:26 1033

原创 C语言补习课——内存篇

来源:黑马程序员。

2024-08-27 17:30:00 856

原创 单片机开发中常用的C语言函数

2024-08-27 00:13:41 148

原创 面向小白的计算机硬件组成原理

说来惭愧,虽然我是通信工程毕业并且干了一年嵌入式,但在电脑硬件组成方面几乎是纯小白,买个电脑都容易被商家宰一笔那种。所以这段时间打算搜罗各种资料写一篇计算机硬件组成原理的文章,如果有不对或者过时的信息,请各位大佬不吝赐教。

2024-08-26 20:57:44 283

原创 bootloader相关内容的辨析

一般来讲裸机系统与RTOS系统正常上电运行不需要bootloader的参与,比如ARM架构的单片机在上电之后开始从0位置读取复位向量,然后自动执行内部的flash程序(Keil这类的集成IDE可以决定扇区擦拭与整页擦拭以及通过下载算法决定页地址),不需要像Linux/Windows系统那样将程序拷贝到ram中运行。:BIOS提供了一个简单的设置界面(BIOS Setup),允许用户配置系统硬件的参数,如启动顺序、日期和时间、CPU和内存的频率等。而它的继任者UEFI提供了更丰富的功能和更好的安全性。

2024-08-22 12:34:05 619

原创 单片机大小端模式

大小端指的是在存储器中存储数据的字节顺序。C语言编程过程中,我们会定义各种类型的数据,比如8bit的char型,16bit的short型或者32bit的long型,在这个过程当中不可避免的会遇到多个字节排序的问题,为了解决这个问题大端存储模式和小端存储模式诞生了。大端模式,首先存储MSB字节,高字节存储在低地址;小端模式,首先存储LSB字节,低字节存储在低地址。ARM架构的芯片一般默认使用小端模式。这里我只是简单介绍在存储中的例子,事实上在一些通信协议,Modbus或者CAN协议之中,也存在着大小端传输。

2024-08-19 19:25:16 394

原创 Source Insight开荒之旅

之前一直听说Source Insight在阅读代码时如何好用,但我自己是被这个函数名称和变量名大小不一致的UI设计整麻了。偶尔在某音评论区受到一位大哥的指点得知这东西能自己个性化定制,所以今天来写这篇文章希望能帮助初学者。

2024-08-19 13:16:53 990 1

原创 利用软件定时器实现按键消抖

首先铺垫一个场景,研发需求是用户通过按下按键来和屏幕上的UI画面进行交互,这里我就以按下按键后按键值自增为例。我们定义了一个KeyCount计数值来统计按下按键的次数,如果我们在主进程之中检测按键连接的GPIO口的电平变化,毫无疑问按键计数值的自增会有延迟,因为While循环的执行需要机器时间。这时自然而然联想到中断检测IO口,但新的问题产生了,因为按键的机械触点在按下后会产生简谐振动,电平的变化会有一段毛刺。放任不管的话我们按下一次按键,可能计数值跳变了三次。

2024-08-12 17:30:32 1397

原创 嵌入式软开常用数据结构——环形缓冲区

环形缓冲区一种遵循FIFO(先进先出)的存储空间,它的主要特点是其终点和起点是相连的形成闭环。这种结构允许数据在达到缓冲区末尾时自动回绕到起始位置,从而实现数据的循环存储和管理。下图是一种形象理解。通俗地来讲,它也是一种线性表,由一个数组和两个表示读写状态的指针构成。在这个线性表被定义地第一时间,读指针与写指针指向同一个数组元素;当我们写入了一个数据之后,读指针会依旧指向第一个元素但写指针会按照写入方向依次指向下一个元素。如果写指针的下一个指向是读指针所在的元素,代表这个环形缓冲区已经写满。

2024-08-08 17:30:08 495 2

原创 AD学习笔记第三章

使用sheet entry连接子原理图内的port。·放置sheet symbol并关联原理图。学习目标:·子原理图设计,放置port。这个图标可以放置页面符与图纸输入口。

2024-07-26 20:47:34 602

基于STM32F411调试AM2320(HAL库)

硬件IIC驱动,可以串口打印也可以用一个TFTLCD屏幕打印。介绍文章在憋,后面没心情可能就咕咕了。。。。但是有问题欢迎私信交流。

2023-07-30

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

TA关注的人

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