<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cedtek的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/CardistAlive</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; CardistAlive]]></copyright><item><title><![CDATA[[RTOS 学习记录] 预备知识：C语言结构体]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/140938219</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/140938219</guid><author>CardistAlive</author><pubDate>Mon, 05 Aug 2024 22:14:17 +0800</pubDate><description><![CDATA[指定结构体类型分为两个步骤：首先声明类型，然后定义它。注意，此时没有创建任何变量！我们在此仅使用“声明”和“定义”术语来指代结构体类型本身：结构体类型的声明只是告知编译器有一个特定的结构体数据类型存在及其名称。结构体类型的定义完整地指定了结构体数据类型。结构体的确切内存布局及其所有成员。结构体实例在内存中占用的空间（当我们声明并定义一个结构体变量时，就会创建一个“结构体实例”。我们将在第 2 节中进行学习了解）。// 声明数据类型 'struct Point']]></description><category></category></item><item><title><![CDATA[[RTOS 学习记录] 预备知识：C指针]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/140014564</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/140014564</guid><author>CardistAlive</author><pubDate>Thu, 27 Jun 2024 15:50:47 +0800</pubDate><description><![CDATA[声明：告诉编译器一个具有特定名称、类型和大小的变量存在。编译器随后知道足够的信息来与变量交互。然而，这一阶段不会进行内存分配。定义：编译器在 RAM 内存中寻找一些空闲空间，并为变量分配一个或多个字节。变量现在有一个地址了。事实上，这一阶段变量具有一个相对地址，绝对地址在链接阶段解析，但现在我们可以忘记这些。初始化：我们给变量赋一个值。这一步并不是严格必需的。如果我们不初始化变量，它将包含一个随机值。]]></description><category></category></item><item><title><![CDATA[[RTOS 学习记录] 复杂工程项目的管理]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/138086903</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/138086903</guid><author>CardistAlive</author><pubDate>Mon, 22 Apr 2024 18:20:23 +0800</pubDate><description><![CDATA[这篇文章是我阅读后的读书笔记，记录目的是为了个人后续回顾复习使用。]]></description><category></category></item><item><title><![CDATA[[RTOS 学习记录] 工程管理工具make及makefile]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/138062336</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/138062336</guid><author>CardistAlive</author><pubDate>Mon, 22 Apr 2024 09:54:04 +0800</pubDate><description><![CDATA[这篇文章是我阅读后的读书笔记，记录目的是为了个人后续回顾复习使用。]]></description><category></category></item><item><title><![CDATA[[RTOS 学习记录] 开发工具 Borland C/C++ 3.1 精简版]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/138004064</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/138004064</guid><author>CardistAlive</author><pubDate>Sat, 20 Apr 2024 16:58:15 +0800</pubDate><description><![CDATA[这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记，目的是作为个人后续回顾复习使用。]]></description><category></category></item><item><title><![CDATA[[STM32] 使用 STM32CubeMX 创建 STM32 工程模板]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/137001269</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/137001269</guid><author>CardistAlive</author><pubDate>Mon, 25 Mar 2024 08:30:58 +0800</pubDate><description><![CDATA[点击“Project Manager”进入工程管理界面，在该界面先设置工程名字"Template"，再设置导出目标IDE为“MDK-ARM”，版本默认V5.27。在搜索框输入“STM32F103C8”，右边选择“LQFP48”封装，最后点击右上角的“Start Project”，开始创建工程，如下图所示。随后，将使用 Keil 自动打开工程，点击编译测试，编译成功，没有错误，如图所示。再点击“Code Generator”，勾选如下图所示的两个选项，最后点击“GENERATE CODE”。]]></description><category></category></item><item><title><![CDATA[[STM32] Keil 创建 HAL 库的工程模板]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/137000636</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/137000636</guid><author>CardistAlive</author><pubDate>Mon, 25 Mar 2024 07:03:10 +0800</pubDate><description><![CDATA[Keil 创建 HAL 库的工程模板跟着的第7章步骤进行Keil工程的创建。]]></description><category></category></item><item><title><![CDATA[[STM32] Keil MDK 新建工程编译不通过(warning: #2803-D和Error: L6218E)解决方法备忘]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/136892789</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/136892789</guid><author>CardistAlive</author><pubDate>Thu, 21 Mar 2024 01:48:03 +0800</pubDate><description><![CDATA[新建 Keil MDK 工程，工程设置完成后点击编译按钮，编译不通过：如下图所示：搜索了一下发现了解决方法，在这里做个备忘。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 快速开发的法宝——IP核]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134833507</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134833507</guid><author>CardistAlive</author><pubDate>Wed, 06 Dec 2023 15:47:25 +0800</pubDate><description><![CDATA[为了解决这个问题，将一些在数字电路中常用的但是比较复杂的功能块，比如说前面提到的 FIFO、RAM、SDRAM 控制器设计成可修改的参数模块，就是前面提到的 IP 核，然后在开发过程中使用 IP 核，这样就可以避免重复劳动、提高开发效率、减少设计和调试的时间，加速开发进程、降低开发成本，这样也大大缩短了产品上市时间、减轻了工程师的一个负担，也是业内的一个发展趋势。软核通常是以加密的形式提供，实际的用户是看不到内部的 RTL 代码的，但是它的布局布线是十分灵活的；同时，软核也是有缺点的。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 数码管动态显示]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134805400</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134805400</guid><author>CardistAlive</author><pubDate>Tue, 05 Dec 2023 14:02:24 +0800</pubDate><description><![CDATA[接下来就需要实现动态显示驱动模块。在实现动态显示驱动模块之前，我们这儿要补充一个知识点：BCD 码。在这里为什么要补充 BCD 码的相关知识呢？动态显示驱动模块的作用是将传入的待显示的十进制数据data[19:0]转化为可以输出的位选信号sel[5:0]和段选信号seg[7:0]，传入的数据data[19:0]是由数据生成模块data_gen产生并传入的，data[19:0]是使用二进制表示的多位十进制数，这种编码方式并不能够直接用于产生位选信号sel[5:0]和段选信号seg[7:0]；我们需要将。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 数码管动态显示]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134767270</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134767270</guid><author>CardistAlive</author><pubDate>Sun, 03 Dec 2023 17:35:16 +0800</pubDate><description><![CDATA[在上一小节当中，我们对数码管的静态显示做了一个详细的讲解；但是如果单单只掌握数码管的静态显示这种显示方式是远远不够的，因为数码管的静态显示当中，被选中的数码位它们显示的内容都是相同的，这种显示方式在我们的实际应用当中显然是不合适的；我们希望控制每个数码位能够独立的显示我们想要显示的内容，如何实现这一操作呢？就是本小节所要讲解的内容：数码管的动态显示。首先是理论学习。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 数码管静态显示]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134587605</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134587605</guid><author>CardistAlive</author><pubDate>Thu, 23 Nov 2023 22:22:32 +0800</pubDate><description><![CDATA[数码管它是一种半导体发光器件，其基本单元是发光二极管。我们常见的数码管有七段数码管和八段数码管，那么八段数码管如下图1所示七段数码管比八段数码管少一个小数点位除了常见的七段管和八段管之外，还有其他类型的数码管：比如说：米字管，如下图2所示还有 N 型管，以及工业科研领域用的 16 段管、24 段管等但是我们还是觉得使用 14 个I/O口占用资源比较多，所以说在征途系列开发板上我们使用了位移缓存器，就是我们的 74HC595。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 无源蜂鸣器驱动实验]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134513546</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134513546</guid><author>CardistAlive</author><pubDate>Mon, 20 Nov 2023 22:28:15 +0800</pubDate><description><![CDATA[那么蜂鸣器大家都见过，它是一种一体化结构的电子讯响器，具有体积小、重量轻、价格低、结构牢靠的特点，被广泛应用在报警器、电子玩具、定时器等电子产品当中，作为一个发声器件；那么蜂鸣器按照它的结构可以分为电磁式蜂鸣器、压电式蜂鸣器两种，如果说按照其是否带有信号源又可以分为有源蜂鸣器和无源蜂鸣器，那么有源蜂鸣器它内部是装有集成电路的，不需要音频驱动电路，只要接通直流电源就能够直接发出声响；]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 呼吸灯]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134193457</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134193457</guid><author>CardistAlive</author><pubDate>Thu, 02 Nov 2023 23:36:43 +0800</pubDate><description><![CDATA[那么在上一章节当中，我们使用板载的 LED 灯设计并实现了一个流水灯的实验效果。那么在本章节当中，我们将带领各位朋友设计并实现一个呼吸灯的实验效果。
那么呼吸灯在我们的日常生活中很常见，比如说我们手机上。在手机上一般作为消息提醒指示灯被广泛地使用，那么它的效果是小灯在一段时间内从完全熄灭慢慢到完全点亮，同样的时间内再由完全点亮到完全熄灭这样一个过程；这个过程循环往复，感觉就像呼吸一样一张一弛，那么人们看了特别舒服。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 流水灯]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134186174</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134186174</guid><author>CardistAlive</author><pubDate>Thu, 02 Nov 2023 16:48:26 +0800</pubDate><description><![CDATA[就是在这个位置，当我们的输出信号是 4’b0111 而且我们的 cnt_flag 信号有效时，再把这个初值赋给我们的输出信号，就是这个位置，我们这样编写：当我们的输出信号等于 4’b0111 而且我们的标志信号有效，那这个位置就给它一个初值。但是它是补 0，所以说这儿是有问题的，而且与我们的波形图是不对应的。我们的流水灯的实现其实和我们前面的计数器和我们的分频器没有多大的差别，差别之处就在于：我们的 LED 灯是怎么实现流水的一个效果，就用到了我们前面讲到的左移、右移的语法，那么希望大家能够掌握这个语法。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 触摸按键控制LED灯]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134177712</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134177712</guid><author>CardistAlive</author><pubDate>Thu, 02 Nov 2023 11:32:12 +0800</pubDate><description><![CDATA[当按键被按下时，就是右边这种情况，那么我们人体的寄生电容将耦合到这个静态电容上，使按键的最终电容变大，我们的按键 IC 会将电容的变化转化为电信号，那么电信号的变化超过了这个阈值就判定为按键按下。当触摸按键没有被按下时，我们的输出信号保持原来的值，当检测到这个下降沿，进行取反，然后保持它的电平不变；如果说我们使用的是组合逻辑，在这个时钟周期内我们的上升沿标志信号应该保持一个时钟周期的高电平，但是我们使用的是时序逻辑，所以说应该有一个延迟一拍的一个效果，那么我们的高脉冲应该保持在这个时钟周期。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 按键消抖]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134166142</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134166142</guid><author>CardistAlive</author><pubDate>Wed, 01 Nov 2023 17:26:44 +0800</pubDate><description><![CDATA[在前面几章节当中，我们讲解了计数器、分频器，那么分频器又讲解了偶数分频和奇数分频。那么在本章节当中，我们来讲一下按键的消抖。按键消抖的内容分为两个部分：理论学习和实战演练。那么在理论学习部分，我们会对按键消抖的相关知识做一个讲解；在实战演练部分我们通过实验工程，设计并实现一个具有按键消抖功能的电路。那么首先是理论学习。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 分频器---奇分频]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134153004</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134153004</guid><author>CardistAlive</author><pubDate>Wed, 01 Nov 2023 06:00:56 +0800</pubDate><description><![CDATA[当我们的复位信号无效时，就是复位信号为高电平无效时，我们的计数器并没有计数到最大值，没有计数到最大值就是 0、1、2、3 的时候，让它进行自加一。那么在上一章节当中，我们对分频器的相关理论知识做了一个系统性的讲解，那么重点讲解了我们的偶数分频，并且通过实验工程使用分频和降频两种方法，设计并实现了将系统时钟进行六分频的偶数分频电路，而且通过了上板验证。那么输入信号和输出信号与我们六分频是一样的，那么输入信号只有时钟信号和我们的复位信号，那么输出信号是连接到我们开发板的扩展 I/O 口，方便我们的测量。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 分频器---偶分频]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134152734</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134152734</guid><author>CardistAlive</author><pubDate>Wed, 01 Nov 2023 02:14:29 +0800</pubDate><description><![CDATA[所谓的分频，就是把输入信号的频率变成成倍数低于输入频率的输出信号，它的原理是：把输入的信号作为计数脉冲，由于计数器的输出端口是按一定规律输出脉冲的，所以说对不同的端口输出的信号脉冲就可以看作是对输入信号的分频。那么分频后的时钟，我们输出到开发板的扩展 I/O 口，在那儿可以使用逻辑分析仪对它的频率进行测量，我们输出到 F15 端口；那么这两种方法最终的效果都是相同的，而第二种方法的信号 a 是在我们系统时钟的控制下产生的，所以说它和所有的在系统时钟下产生的信号都保持几乎相同的时钟关系，方法是更好的。]]></description><category></category></item><item><title><![CDATA[[FPGA 学习记录] 计数器]]></title><link>https://blog.youkuaiyun.com/CardistAlive/article/details/134143119</link><guid>https://blog.youkuaiyun.com/CardistAlive/article/details/134143119</guid><author>CardistAlive</author><pubDate>Tue, 31 Oct 2023 16:26:53 +0800</pubDate><description><![CDATA[在前面的组合逻辑的设计当中，虽然我们也进行了波形图的绘制，但是大家可以感觉到，在前面组合逻辑的设计当中，波形图的绘制它的作用并不是很大，因为我们波形图的绘制，目的有两个：第一是帮助我们对模块功能加以理解，第二是有助于我们代码的编写。然后，我们使用 cnt_flag 信号作为条件对我们的输出信号进行取反，我们的输出信号同样使用的是寄存器，有一个延迟一拍的一个效果，所以说我们输出信号的电平保持，刚好与我们计数器的一个完整的周期是对应的。首先在我们的复位信号有效时，我们让它保持一个低电平，就初值是 0。]]></description><category></category></item></channel></rss>