自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 傅里叶级数在不连续点会怎么样???

笔者最近在撸《信号与系统》,写下此博客用作记录和分享学习笔记。由于是笔者为电子爱好者,不是数学专业从事人员,如有不对还望各网友大神指正。本博客大量借鉴资料,笔者只是拾人牙慧的小屁孩。笔者在学习傅里叶级数或者傅里叶变换时,对傅里叶级数或是傅里叶变换的收敛性颇有疑问。故写下此文,探索傅里叶级数和狄利克雷核之间的故事。

2024-06-20 21:55:32 765

原创 什么!我一直以来用的反相比例运算电路竟然有问题?!

笔者最近在学习运算放大器的基本知识,写下此博客用作记录和分享学习笔记。如有不对还望各网友大神指正,本博客大量借鉴资料,笔者只是拾人牙慧的小屁孩。笔者在阅读《Op Amps for Everyone》时,对反相比例运算电路中RGR_{G}RG​不能大于RFR_{F}RF​的问题颇具疑惑,在查询资料和反复思考中,得到了一定见解。对于系统的设计需要考虑相位裕度考虑,对应为设计的环路增益的考虑,这与系统的稳定性息息相关。

2024-05-21 00:07:53 1201

原创 在WIN从零开始在QMUE上添加一块自己的开发板(二)

笔者这篇博客作为平时学习时的笔记记录,如有不对还望指正,本博客大量借鉴资料,笔者只是拾人牙慧的小屁孩。QEMU是一种通用的开源计算机仿真器和虚拟器。而QUME内置支持了一些开发板,我们可以基于这些内置的板子来做操作系统等软件的配置,但是实际市面上很多板子QUME中是没有提供支持的,这需要我们根据QUME的源码自定义一些开发板,然后再重新编译。

2024-01-20 22:07:51 1241

原创 在WIN从零开始在QMUE上添加一块自己的开发板(一)

笔者这篇博客作为平时学习时的笔记记录,如有不对还望指正,本博客大量借鉴资料,笔者只是拾人牙慧的小屁孩。QEMU是一种通用的开源计算机仿真器和虚拟器。而QUME内置支持了一些开发板,我们可以基于这些内置的板子来做操作系统等软件的配置,但是实际市面上很多板子QUME中是没有提供支持的,这需要我们根据QUME的源码自定义一些开发板,然后再重新编译。

2024-01-20 13:00:00 1899 3

原创 快速傅里叶变换(FFT),真的很细

本博客介绍了傅里叶级数到傅里叶变换的理论基础,深入解析了离散时间傅里叶变换和离散傅里叶变换,最终探讨了按时间抽选的基 2--FFT 算法。通过对FFT的蝶形变换的分析,揭示了FFT算法如何通过合并DFT运算项,将计算复杂度从N^2降低为log2N。通过简洁而清晰的表达,为初学者提供了傅里叶变换及其算法的深入理解。

2024-01-16 14:00:00 2066

原创 记录STMH7使用LL库查询方式发送SPI的坑

主要记录了在使用STM32的LL库驱动SPI时遇到的问题以及解决方法。首先在官方Demo中找到了关于LL库的SPI发送部分的启发,并在手册中查找相关信息。作者对EOT和TXP事件进行了了解,并深入研究了SPI的配置方法,包括对CR2寄存器的操作和使能SPI的步骤。在了解了HAL库的SPI传输方式后,仿照HAL库完成了LL库SPI查询方式的编写,简化了分支情况。

2024-01-13 16:10:35 1684 4

原创 STM32H7利用片上DAC加DMA双缓冲实现DDS

这文章探讨了基于STM32H7和LL库的DDS(Direct Digital Synthesizer)的实现。介绍了DDS的原理,聚焦于频率控制和相位控制,呈现了核心代码和程序实现。特别地,文章展示了如何使用Matlab生成波表数组,并在STM32中配置DDS对象。通过串口输出和实际波形效果,解释了DDS主频对精度的影响。

2024-01-13 00:51:31 1510

原创 STM32H7解决DMA伪双缓存中的出现Cache问题

本文介绍了在STM32H7中使用DMA进行伪双缓存时可能出现的Cache问题,并提出了解决方案。首先,文章概述了Cache的基本原理,包括时间局部性和空间局部性。接着,详细讨论了STM32H7中的Cache和MPU配置,以及四种Cache策略的应用场景。其次,文章解释了DMA双缓存的原理,强调了采用环形FIFO数据类型来解决ADC数据存放问题的必要性。最后,通过CubeMX配置和核心代码实现的部分,展示了如何在STM32H7中配置Cache和MPU,以及实现环形FIFO和双缓存的核心代码。

2024-01-11 21:25:27 2620

原创 顺序容器(下)——跟我一起从C到C++(第十一期)

我们可以用一个容器来初始化一个新的适配器,deq };默认情况下,stack和queue是基于deque实现的,是在vector之上实现的。//用vector构造的类型为string的适配器str_stk vector < string > svec;对于一个给定的适配器,可以使用哪些容器是受到限制的,所有适配器都要求容器具有添加和删除元素的功能。因此,适配器不能构造在array之上。类似的,我们也不能用来构造适配器,因为所有适配器都要有添加、删除以及访问尾元素的能力。

2023-02-27 16:35:20 249 2

原创 顺序容器(上)——跟我一起从C到C++(第十期)

typeoverviewvector可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。deque双端队列。支持快速随机访问。在头尾位置插入或者删除元素很快。list双向链表。仅支持双向顺序访问。在list中任何位置进行插入或者删除操作速度很快。单向链表。仅支持单向顺序访问。在链表任何位置进行插入或者删除操作速度很快。array固定大小数组。支持快速随机访问。不能添加或删除元素。string与vector相似的容器,但专门用于字符保存。随机速度快。在尾部插入或者删除速度快。

2023-02-25 14:56:57 282

原创 [KMP算法]算法分析和代码解析

本文要领:一、问题背景 二、原理解析 三、next数组 四、匹配查找(BF算法、KMP算法) 五、算法优化 六、完整代码被KMP算法折磨之余,记录此笔记作为总结。此笔记加入了部分笔者自己的理解,如有不对还请大家指正。本笔记参考: b站视频、《大话数据结构》、CSDN等博客笔者只是拾人牙慧的小屁孩,只是站在巨人的肩膀上做一些总结。

2023-02-11 20:33:16 187

原创 [C/C++] 复杂计算器——四则运算表达式求值(中缀转后缀表达式)

在之前,由于笔者才疏学浅,掌握知识甚少,完成某次任务【复杂计算器】时,利用了三个栈,而且还是使用的STL中的栈的实现,极大的增大了内存的开销。规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。按照之前原理中的方法,我们把得到的数和符号利用栈的特性处理,把结果放进队列。

2023-02-09 23:10:55 3118 2

原创 IO库——跟我一起从C到C++(第九期)

(接下来的故事,笔者也要开始自学了,但为了保证该内容的严谨和真实,笔者也会在其中掺杂一部分的超链接,帮助大家定位到资料原文)比如,刚刚我们读取电话号的例子,我们想在逐个验证电话号时并改变其格式,如果所有号码都有效的,我们希望输出一个新文件,包含改变格式之后的号码,对于无效的号码,我们就打印一条包含人名和无效号码的错误信息。一旦文件成功关闭,我们可以打开新的文件。(继承机制笔者将会在之后的章节介绍,简单来说,继承机制就能使我们可以声明一个特定的类继承另一个类,从而得到它的部分功能和部分成员),同样的,类型。

2023-02-07 14:29:06 192

原创 类(下)——跟我一起从C到C++(第八期)

一个类就是一个作用域的事实能够很好地理解为什么当我们在类的外部定义成员函数时必须提供类名和函数名。返回类型出现在类名之前,它并没有被编译器划分到类的作用域之中。public ://省略 };首先,在成员函数内查找该名字的声明。如果成员函数内没有找到,则在类内寻找(类的所有成员都可以被考虑)。如果类内也没有找到该名字的声明,在成员函数定义之前的作用域内继续查找。一般来说,不建议把其他成员的名字作为某个成员函数的参数。

2023-02-05 18:46:10 80

原创 [Linux C/C++] 实现ls -R的命令

关于C++语言的基础知识可以点开笔者主页专栏【跟我一起从C到C++】ls命令,想必大家在使用Linux时,都感觉十分亲切,日常必用命令之一:它可以罗列文件夹和文件,让人们更加清晰地管理自己的文件。本文主要实现:一、读取目录二、分析选项三、递归实现-R四、输出颜色

2023-02-03 16:26:58 2010 2

原创 类(中)——跟我一起从C到C++(第七期)

我们定义一个Screen类,让Screen表示显示器的一个窗口。每个Screen包含一个用于保存Screen内容的string成员和三个类型的成员,分别表示光标的位置以及屏幕高和宽。public :private :这里类型别名了一个pos,也可以写成我们便知道了,除了定义数据和函数之外,类也可以自定义某种类型在类中的别名。这个别名也遵循访问限制。还有就是,用来定义类型的成员必须先定义后使用,这一点和普通成员有所区别。因此,类型成员通常出现在类开始的地方。

2023-02-03 14:39:19 79

原创 类(上)——跟我一起从C到C++(第六期)

按照刚刚学习到的小知识,我们来设计一个类Sales_data一个id成员函数,返回书的编号一个combine成员函数,用于把一个Sales_data对象加到另一个对象上一个名为add的函数,执行两个Sales_data对象的加法一个名为read的函数,将数据从istream读入Sales_data对象中一个名为print的函数,将Sales_data对象的值输入到ostream相必朋友们已经迷惑重重了,这个,但这个成员函数id是怎么获得数据成员bookNo所依赖的对象的呢?这个奇怪的。

2023-02-01 22:20:04 138

原创 函数(下)——跟我一起从C到C++(第五期)

如果同一作用域内的几个函数名字相同但形参列表不同,我们就称之为重载函数。if(cp) //非空指针 while(* cp) //不为空字符 cout

2023-01-31 16:10:00 99

原创 函数(上)——跟我一起从C到C++(第四期)

多维数组就是数组的数组嘛,而数组传递的是指向数组首元素的指针,故多维数组传递的是一个指向数组的指针。C++语言允许变量定义成数组的引用,基于同样的道理,形参也可以是数组的引用。为了能编写能够处理不同数量实参的函数,C++新标准提供了两种主要的方法:如果所有的实参类型相同,可以传递一个名为。任何函数的定义都能使用尾置返回,但这种形式对于返回类型比较复杂的函数最有效,比如返回数组的指针或引用。形参的初始化的机理和变量初始化差不多,每次调用函数时,都会重新创建它的形参,并用传入的实参来初始化。

2023-01-30 19:36:12 108

原创 表达式和语句——跟我一起从C到C++(第三期)

(这会引起程序崩溃)一个左值表达式的求值结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象。在复杂的系统中,程序在遇到抛出异常的代码前,其执行路径就已经经过了一个又一个的try语句块了。不过,与新版本的强制类型转换相比,旧式的强制类型转换从表现形式上来说,不是那么清晰明了,容易看漏,所以一旦转换过程中出现了问题,追踪起来也比较困难。我们使用重载运算符时,其包括的运算对象类型、返回值类型都是自定义的,但运算的个数、运算符的优先级、结合律都是无法定义的。

2023-01-28 18:43:17 213

原创 标准库类型——跟我一起从C到C++(第二期)

初始化vector对象的方法很多,以int//空的vector,执行默认初始化 vector < int > v2(v1);//包含v1所有元素的副本 //等于 vector v2 = v1;//v3里有5个元素,值都为1 vector < int > v4(5);//v4里有5个元素,都执行了值默认初始化 vector < int > v5 {//v5里有5个元素,值分别是1-5 //等于 vector v5 = {1,2,3,4,5};

2023-01-27 16:52:07 158

原创 变量和基本类型——跟我一起从C到C++(第一期)

众所周知,C语言对于嵌入式可谓是十分贴近,运行效率非常之高。但随着单片机性能的日益提升,单片机性能过剩,我们也开始渴望使用高级语言来使我们的开发更加高效(但相应也会降低单片机的运行效率和占用更大的空间)。本笔记主要意在从C语言过渡到C++语言,介绍C++语言的冰山一角,但也不只是将C++运用在嵌入式这么简单,而是过一遍语言框架。故,笔者留下此笔记和大家共同学习。此笔记大量参考互联网各种资料,笔者只是拾人牙慧的小屁孩而已。

2023-01-26 15:00:00 170

原创 ADC和DAC——跟我一起写STM32(第九期)

总所周知,模拟信号是指用连续变化的物理量所表达的信息,如温度、湿度、压力、长度、电流、电压等等,我们通常又把模拟信号称为连续信号,它在一定的时间范围内可以有无限多个不同的取值。由于:软件触发是硬件在一个APB1时钟周期后自动关断的,于是,每次修改输出电压的值后,都要调用软件使能的方法,才能生效。每增加ADC分辨率(分辨率表示ADC能辨别的最小模拟量,用二进制位数表示,比如:8、10、12、16位),都会增加2的次方倍的比较器和电阻。使用的话,可以降低输出阻抗,提高输出负载能力,默认Enable。

2023-01-17 19:20:41 1267 3

原创 “1,2,3,定时器”——跟我一起写STM32(第八期)

这是定时器寄存器的一种特性:影子寄存器。其实也很好理解,如笔者上图的配置,定时器时钟源是72MHZ,则意为72000000次为1s,经过7200的分频,10000次为1s,而周期是5000溢出一次,就是溢出一次的时间为5000/10000=0.5s。不再是计数溢出即产生UEV事件了,而是提前设置好REP寄存器,每次计数溢出就是给REP寄存器减1,直到REP寄存器为0,再产生UVE事件,再中断什么的了。不过,直接操作寄存器是没有HAL库保护的,这可能出现一些底层的驱动错误,这需要注意(怎么这么晚才说!

2023-01-15 23:46:02 620 1

原创 LCD(含FSMC)——跟我一起写STM32(第七期)

TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid CrystalDisplay。TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD 也被叫做真彩液晶显示器。这个就是笔者使用的LCD屏幕三基色原理无法通过其他颜色混合得到的颜色,称之为:基本色通过三基色混

2023-01-12 23:13:46 586

原创 OLED(含IIC)——跟我一起写STM32(第六期)

IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。结束信号:

2023-01-11 21:39:11 1011

原创 串口(含DMA)——跟我一起写STM32(第五期)

DMA,全称Direct Memory Access,即直接存储器访问。众所周知,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,

2023-01-11 19:00:00 1066 2

原创 按下按键(含EXTI)——跟我一起写STM32(第四期)

外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件中断事件寄存器或值,(在这里也就说可以写入软件中断事件寄存器模拟中断和事件),之后产生信号一分为二,看5挂起屏蔽寄存器和7事件屏蔽寄存器,中断挂起,如果事件没有屏蔽,首先会产生事件,进入脉冲发生器。一个外部中断进去了NVIC之后,它的外部中断挂起标志位就标志它现在正在挂起,等待执行,这个时候我们清除它的标志位,执行回调函数,一次外部中断就完成了。实现程序的并行化,实现嵌入式系统进程之间的切换。

2023-01-10 23:06:13 527

原创 模范工程——跟我一起写STM32(第三期)

这里就正是利用了我们前面提到的时钟摘取法,ticks 是延时 nus 需要等待的 SysTick 计数次数(也就是延时时间),told 用于记录最近一次的 SysTick->VAL 值,然后 tnow 则是当前的SysTick->VAL 值,通过他们的对比累加,实现 SysTick 计数次数的统计,统计值存放在 tcnt 里面,然后通过对比 tcnt 和 ticks,来判断延时是否到达,从而达到不修改 SysTick 实现 nus 的延时。串口相关知识,笔者将在之后讲解串口的时候给大家详细讲解。

2023-01-10 20:55:38 205

原创 点灯——跟我一起写STM32(第二期)

15),就是配置高电平咯。而咱们的 STM32 自身的时钟频率非常的高的(相比而言),对于下面控制的外设,咱们就要“迁就一下”(由该外设的时钟频率决定),所以需要进行一层又一层的分频。可以理解为输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率,就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行,如果超过设计时速就会颠簸,甚至翻车。上面的函数是对k进行运算,断言机制则判断是k是否是奇数,如果为偶数,则会进入assert,输出报错信息,中止信息,这种机制在调试过程中应该是很有用的!

2023-01-10 18:15:58 1213 4

原创 启航——跟我一起写STM32(第一期)

笔者出此系列stm32教学仅供和大家一起学习,笔者也是小白,此笔记也算是和大家一起学习。本笔记也参考了大多数资料和文章,笔者只是拾人牙慧的小屁孩。那我们废话多说,现在介绍一下本次学习所使用的工具-----STM32CubeIDE。KeilIARKeil:作为刚入门的新手来说,keil开发32的优势确实很明显,简单说就是配置不繁琐,网上教程较多,比较容易上手,调试功能什么的很不错。如果用标准固件库的开发者,也许就第一次配置需要多花一些时间进行配置,第一个工程文档建好之后,强烈建议保存!

2023-01-10 14:32:47 744

原创 STM32内存管理方法

warning: 'at' attribute directive ignored [-Wattributes]的解决内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。在我们学习C语言的时候,有学习到malloc和free,一般情况下,C程序使用malloc()在堆上分配内存,free()释放内存。malloc工作原理malloc函数分配的内存是在堆(heap)上的。

2023-01-08 23:03:43 2645 2

跟我一起写Python

内容概要:《跟我一起写 Python》是笔者在在学习python后想着写一份通俗易懂的教程,于是写下此文档。这里面是一些很基础的python小知识: 从简单的IO输入输出到list、tuple、字典、集合等 之后逐步学习python函数的一些高级特性 再到OOP面对对象编程 最后补充了一些错误调式的方法和语句 能学到什么:笔者写下《跟我一起写 Python》,主要是想和朋友们一起学习,本文档中有什么说的不对的地方还请朋友们指正。 阅读建议:本文档的阅读最好有一些 C 语言的基础,C 语言课程学习推荐有 b 站浙大翁恺的课程。

2023-01-31

空空如也

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

TA关注的人

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