<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[The_xz的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/The_xz</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; The_xz]]></copyright><item><title><![CDATA[一篇文章教会你晶振外部匹配电容计算]]></title><link>https://blog.csdn.net/The_xz/article/details/151232313</link><guid>https://blog.csdn.net/The_xz/article/details/151232313</guid><author>The_xz</author><pubDate>Sat, 06 Sep 2025 10:36:09 +0800</pubDate><description><![CDATA[晶振匹配电容计算不能直接照搬手册负载电容值，需通过公式计算。关键公式为：C≈2(CL-Cstray)，其中CL为晶振负载电容，Cstray为寄生电容（3-5pF）。计算示例：当CL=20pF时，C≈2(20-4)=32pF，实际取33pF；CL=12pF时取15pF；CL=10pF时取12pF。需注意相同频率的晶振可能有不同负载电容规格，且匹配电容应使晶振两端等效电容等于或接近负载电容。增大负载电容会使频率下降，减小则使频率升高。]]></description><category></category></item><item><title><![CDATA[TP4056 电池管理芯片介绍及电路应用]]></title><link>https://blog.csdn.net/The_xz/article/details/147537568</link><guid>https://blog.csdn.net/The_xz/article/details/147537568</guid><author>The_xz</author><pubDate>Sat, 26 Apr 2025 20:52:15 +0800</pubDate><description><![CDATA[TP4056 是一款性能出色的单节锂离子电池恒流 / 恒压线性充电器。其采用 ESOP8 封装，且外围元件较少，因此特别适合便携式产品，并且可适用于 USB 电源以及适配器电源供电。该充电器基于特殊的内部 MOSFET 架构以及防倒充电路，无需外接检测电阻和隔离二极管。当外部环境温度过高或处于大功率应用时，其热反馈功能可调节充电电流，以降低芯片温度。其充电电压固定为 4.2 V，而充电电流则可通过一个电阻器进行外部设置。当充电电流降至设定值的1/10时，芯片将终止充电循环。]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 十三】CC2530 Z-Stack 协议栈HAL调用]]></title><link>https://blog.csdn.net/The_xz/article/details/146541941</link><guid>https://blog.csdn.net/The_xz/article/details/146541941</guid><author>The_xz</author><pubDate>Fri, 28 Mar 2025 17:51:53 +0800</pubDate><description><![CDATA[之所以减少堆的大小，HAL_KEY_SW_6_SEL等定义其实是按键GPIO配置相关的寄存器，这些定义可以在hal_key.c中找到，如果需要添加其他按键，也遵循这个方法添加即可。使用串口前，需要首先配置一下串口，并在应用层初始化函数zclSampleSw_Init中调用一下即可完成串口配置，如下图所示。中断向量为P0INT_VECTOR也就是P0口的中断，按键连接的是P0_1，按下产生中断就会来到这个函数。在hal_uart.h中进函数声明，方便在应用层初始化函数zclSampleSw_Init中调用。]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 十二】CC2530 Z-Stack 硬件抽象层]]></title><link>https://blog.csdn.net/The_xz/article/details/146536850</link><guid>https://blog.csdn.net/The_xz/article/details/146536850</guid><author>The_xz</author><pubDate>Wed, 26 Mar 2025 21:37:49 +0800</pubDate><description><![CDATA[硬件抽象层（Hardware Abstraction Layer，简称 HAL）是一种软件设计模式，它的目的是将硬件的具体实现细节与软件的其他部分隔离开来。简单来说，HAL 就像是一个中间层，它站在软件和硬件之间，让软件可以通过统一的接口来操作不同的硬件，而不需要关心硬件的具体实现细节。]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 十一】CC2530 Z-Stack 协议栈软件架构]]></title><link>https://blog.csdn.net/The_xz/article/details/146506645</link><guid>https://blog.csdn.net/The_xz/article/details/146506645</guid><author>The_xz</author><pubDate>Wed, 26 Mar 2025 17:20:31 +0800</pubDate><description><![CDATA[打开 GenericApp 演示项目工程后，IAR 软件左边出现如下图所示的 Z-Stack 协议栈目录结构： 其中：Z-Stack可以被分成多个层次。        每一个层次都有一个对应的任务来处理本层次的事务，例如MAC层对应一个MAC层的任务、网络层对应一个网络层的任务、HAL对应一个HAL的任务，以及应用层对应一个应用层的任务等，这些各个层次的任务构成一个任务池，这个任务池也就是tasksEvents数组。       可以在App目录下的OSAL_SampleSw.c文件中找到任务池初始化函数o]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 十】CC2530 Z-Stack 协议栈]]></title><link>https://blog.csdn.net/The_xz/article/details/146492519</link><guid>https://blog.csdn.net/The_xz/article/details/146492519</guid><author>The_xz</author><pubDate>Tue, 25 Mar 2025 16:01:56 +0800</pubDate><description><![CDATA[之前有介绍到，ZigBee网络设备类型有3种，分别是Coordinator（协调器），Router（路由器）和EndDevice（终端设备）。当 tasksEvents[idx] 的值不等于 0 时，表示该任务中有事情要处理，这时候条件判断成立，于是通过 break 结束循环。当 tasksEvents[idx] 的值为 0 时，表示该任务没有事情要处理，这时候条件判断不成立，进入下一次循环。进入其中一个文件夹，选择相应的 Demo 工程文件并双击，即可打开一个 Demo 工程。]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 九】CC2530 Z-Stack协议开发基础]]></title><link>https://blog.csdn.net/The_xz/article/details/146486730</link><guid>https://blog.csdn.net/The_xz/article/details/146486730</guid><author>The_xz</author><pubDate>Mon, 24 Mar 2025 22:37:00 +0800</pubDate><description><![CDATA[Z-Stack 协议栈是TI 公司开发的商业级 ZigBee 协议栈，被 ZigBee 联盟认可并广泛采用。它随 CC2530 芯片提供，半开源，关键代码封装成库，用户可在其基础上开发应用，降低开发难度。协调器、路由器和终端设备。协调器是网络首个设备，负责建立和管理网络，选定信道及网络 ID。路由器可中继数据，扩展网络覆盖，支持终端设备间通信。终端设备功耗低，可休眠唤醒，依赖协调器和路由器通信，适用于传感器等资源受限设备。Z-Stack 协议栈为 ZigBee 开发提供框架用户可在此基础、上修改添加代码。]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 七】CC2530 ADC寄存器配置及使用]]></title><link>https://blog.csdn.net/The_xz/article/details/146454908</link><guid>https://blog.csdn.net/The_xz/article/details/146454908</guid><author>The_xz</author><pubDate>Mon, 24 Mar 2025 10:46:58 +0800</pubDate><description><![CDATA[它来自 ADC 输入。如果ADCCON2.SCH 设置为一个小于 8 的值，转换序列包括一个转换，来自每个通道，从 0 往上，包括 ADCCON2.SCH 编程的通道号码。当 ADCCON2.SCH 设置为一个在 8 和 12 之间的值，序列包括差分输入，从通道 8 开始，在已编程的通道结束。对于 ADCCON2.SCH 大于或等于 12，序列仅包括所选的通道。（3）单个 ADC 转换：除了这一转换序列，]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 二】CC2530定时器实现微秒、毫秒、秒延时函数]]></title><link>https://blog.csdn.net/The_xz/article/details/146443138</link><guid>https://blog.csdn.net/The_xz/article/details/146443138</guid><author>The_xz</author><pubDate>Sun, 23 Mar 2025 00:35:01 +0800</pubDate><description><![CDATA[定时器本质上可以看作是一种计数器。它通过对内部时钟信号或外部输入信号进行计数来测量时间间隔。当计数达到设定的值时，定时器会向处理器内核提出中断请求，通知内核某个时间间隔已经结束。定时器1包含一个16位计数器，可在每个活动时钟边沿递增或递减。其活动时钟边沿周期由CLKCON.TICKSPD寄存器位定义，可设置全球系统时钟的划分，提供0.25MHz到32MHz的不同时钟频率，也可使用32MHz晶振作为时钟源。定时器1中的T1CTL.DIV设置的分频器值可进一步划分此频率，分频器值有1、8、32、128四种。当3]]></description><category></category></item><item><title><![CDATA[【CC2530 教程 一】lAR Embedded Workbench创建CC2530基础工程]]></title><link>https://blog.csdn.net/The_xz/article/details/146440077</link><guid>https://blog.csdn.net/The_xz/article/details/146440077</guid><author>The_xz</author><pubDate>Sat, 22 Mar 2025 16:16:09 +0800</pubDate><description><![CDATA[IAR Embedded Workbench 是一款由瑞典 IAR Systems 公司开发的集成开发环境（IDE），专门用于嵌入式系统的开发。它支持多种微控制器（MCU）和微处理器（MPU），包括 ARM、RISC-V、8051、AVR 等架构，为开发者提供了一套完整的开发工具链，包括代码编辑器、编译器、调试器和仿真器等。网上有很多的安装教程，在这里就不再赘述了，可以看看别人的文档。]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 八】直达任务通知]]></title><link>https://blog.csdn.net/The_xz/article/details/145428687</link><guid>https://blog.csdn.net/The_xz/article/details/145428687</guid><author>The_xz</author><pubDate>Mon, 03 Feb 2025 17:24:53 +0800</pubDate><description><![CDATA[可以参考通过 FreeRTOS 通知减少 RAM 占用空间并加速执行。每个 RTOS 任务都有一个任务通知数组。每个任务，都有“挂起”或“非挂起”的通知状态和一个32位通知值。常量 configTASK_NOTIFICATION_ARRAY_ENTRIES 设置任务通知数组中的索引数量。在 FreeRTOS V10.4.0 版本前，任务只有单条任务通知，而无通知数组。直达任务通知是直接发送到任务的事件，而不是通过中间对象（如队列、事件组或信号量）间接发送至任务的事件。向任务发送“直达任务通知”]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 七】互斥锁与递归互斥锁]]></title><link>https://blog.csdn.net/The_xz/article/details/145420665</link><guid>https://blog.csdn.net/The_xz/article/details/145420665</guid><author>The_xz</author><pubDate>Sun, 02 Feb 2025 18:59:10 +0800</pubDate><description><![CDATA[互斥锁是包含优先级继承机制的二进制信号量。鉴于二进制信号量是实现同步（任务之间或任务与中断之间）的更好方式，因此互斥锁更适合实现简单的相互排斥（即互斥）。用于互斥时，互斥锁就像用于保护资源的令牌。当一个任务希望访问资源时，必须首先获得（“获取”）该令牌。使用完资源后，任务必须“返还”令牌，以便其他任务有机会访问相同的资源。用户可对一把递归互斥锁重复加锁。只有用户为每个成功的 xSemaphoreTakeRecursive() 请求调用 xSemaphoreGiveRecursive() 后，]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 六】二进制信号量与计数信号量]]></title><link>https://blog.csdn.net/The_xz/article/details/145418167</link><guid>https://blog.csdn.net/The_xz/article/details/145418167</guid><author>The_xz</author><pubDate>Sun, 02 Feb 2025 15:16:56 +0800</pubDate><description><![CDATA[队列数据可用时，任务将取消阻塞，从队列中检索数据，然后执行必要的数据处理。阻塞时间表示在尝试“获取”信号量时，如果信号量不足立即可用，任务应进入阻塞状态的。中断始终“提供”信号量（将写入队列使其为满），但从不获取信号量。在许多情况下，任务通知可以提供二进制信号量的轻量级替代方案。创建一个计数信号量，并返回一个可以引用该新建信号量的句柄。创建一个计数信号量，并返回一个可以引用该新建信号量的句柄。创建一个二进制信号量，并返回一个可以引用该信号量的句柄。创建一个二进制信号量，并返回一个可以引用该信号量的句柄。]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 五】FreeRTOS 内存管理细致讲解]]></title><link>https://blog.csdn.net/The_xz/article/details/145368523</link><guid>https://blog.csdn.net/The_xz/article/details/145368523</guid><author>The_xz</author><pubDate>Sun, 26 Jan 2025 15:41:32 +0800</pubDate><description><![CDATA[每个提供的实现都包含在单独的源文件中（分别是 heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c），位于主 RTOS 源代码下载内容的 Source/Portable/MemMang 目录下。每次一个项目中，只应包含其中一个源文件[这些可移植层函数定义的堆将由 RTOS 内核使用，即使用 RTOS 的应用程序选择使用自己的堆实现]。但是，如果分配给正在创建任务的堆栈的大小不是总相同，那么可用的空间内存可能会被碎片化成许多小块，最终导致分配失败。]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 四】队列创建与发布项目到队列]]></title><link>https://blog.csdn.net/The_xz/article/details/145342212</link><guid>https://blog.csdn.net/The_xz/article/details/145342212</guid><author>The_xz</author><pubDate>Sat, 25 Jan 2025 22:32:28 +0800</pubDate><description><![CDATA[一个被限制在受保护的内存区域的任务可以将数据传递给一个被限制在不同的受保护内存区域的任务， 因为通过调用队列发送函数 来调用 RTOS 将提高微控制器的权限等级。消息通过队列以副本的方式发送， 这意味着数据（可以是更大的缓冲区的指针）本身被复制到队列中， 而不是队列始终只存储对数据的引用。单个队列可用于接收不同的消息类型， 以及来自多个地点的消息， 方法是将队列定义为保存一个结构体，该结构的一个成员持有消息类型， 另一个成员保存消息数据（或消息数据的一个指针）。队列中的每个项目必须具有相同的大小。]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 三】协程状态、优先级、实现及调度]]></title><link>https://blog.csdn.net/The_xz/article/details/145325879</link><guid>https://blog.csdn.net/The_xz/article/details/145325879</guid><author>The_xz</author><pubDate>Fri, 24 Jan 2025 15:30:18 +0800</pubDate><description><![CDATA[crQUEUE_SEND_FROM_ISR() 和 crQUEUE_RECEIVE_FROM_ISR()宏是 协程版的函数，对应于任务中使用的 xQueueSendFromISR()和 xQueueReceiveFromISR()函数。crQUEUE_SEND_FROM_ISR()和 crQUEUE_RECEIVE_FROM_ISR()宏是协程版的函数，对应于任务中使用的 xQueueSendFromISR()和 xQueueReceiveFromISR()函数。协程 可以在钩子函数内阻塞。]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 二】任务优先级与任务控制]]></title><link>https://blog.csdn.net/The_xz/article/details/145303849</link><guid>https://blog.csdn.net/The_xz/article/details/145303849</guid><author>The_xz</author><pubDate>Thu, 23 Jan 2025 16:24:52 +0800</pubDate><description><![CDATA[如果正在使用的移植实现了使用“前导零计数”类指令的移植优化任务选择机制 （针对单一指令中的任务选择）而且 configUSE_PORT_OPTIMISED_TASK_SELECTION 在 FreeRTOSConfig.h 中设置为 1，则 configMAX_PRIORITIES 无法高于 32。该函数可以恢复已挂起的任务。对 vTaskSuspend的调用不会累积次数，例如：若在同一任务上调用 vTaskSuspend()两次， 将仍然仅需调用一次vTaskResume()，即可准备完毕挂起的任务。]]></description><category></category></item><item><title><![CDATA[【FreeRTOS 教程 一】任务结构体及其基础创建使用]]></title><link>https://blog.csdn.net/The_xz/article/details/145286704</link><guid>https://blog.csdn.net/The_xz/article/details/145286704</guid><author>The_xz</author><pubDate>Wed, 22 Jan 2025 17:58:15 +0800</pubDate><description><![CDATA[任务提供了更灵活的并发控制，适合需要抢占式调度的场景，但可能会增加RAM的使用。协程则是一种更轻量级的并发机制，适合资源受限的环境，但它们的调度是协作式的，需要开发者更仔细地管理协程的执行。当任务实际执行时，它被称为处于运行状态。任务当前正在使用处理器。如果运行 RTOS 的处理器只有一个内核， 那么在任何给定时间内都只能有一个任务处于运行状态。准备就绪任务指那些能够执行（它们不处于阻塞或挂起状态）， 但目前没有执行的任务， 因为同等或更高优先级的不同任务已经处于运行状态。]]></description><category></category></item><item><title><![CDATA[一篇文章教会你土壤湿度检测模块检测土壤湿度，附STM32代码示例]]></title><link>https://blog.csdn.net/The_xz/article/details/145210827</link><guid>https://blog.csdn.net/The_xz/article/details/145210827</guid><author>The_xz</author><pubDate>Fri, 17 Jan 2025 16:57:41 +0800</pubDate><description><![CDATA[可调节土壤湿度的阈值，通过电位器控制。：采用镀镍处理的优质土壤传感器，感应面积加宽，提高导电性能，防止生锈，延长使用寿命。：模块中的蓝色电位器用于调节土壤湿度的阈值。顺时针调节阈值增大，逆时针调节阈值减小。：AO引脚可与AD模块相连，通过AD转换获得更精确的土壤湿度数值。：DO引脚可与单片机直接相连，通过检测高低电平来检测土壤湿度。：使用LM393比较器芯片，工作稳定。：模拟量输出接口，输出电压信号。：数字量输出接口，输出0或1。：工作电压为3.3V-5V。：外接3.3V-5V电源。]]></description><category></category></item><item><title><![CDATA[一篇文章教会你雨滴感应（水位显示）模块测量水位，附STM32代码示例]]></title><link>https://blog.csdn.net/The_xz/article/details/145205792</link><guid>https://blog.csdn.net/The_xz/article/details/145205792</guid><author>The_xz</author><pubDate>Fri, 17 Jan 2025 16:43:32 +0800</pubDate><description><![CDATA[雨滴感应模块介绍：
（1）产品特点：
材料与尺寸：采用高品质FR-04双面材料，尺寸为5.0*4.0CM，表面镀镍处理，抗氧化、导电性好，寿命长。

输出信号：提供干净的比较器输出信号，波形良好，驱动能力强（超过15mA）。

灵敏度调节：通过电位器调节灵敏度。

工作电压：支持3.3V至5V的工作电压。

输出形式：支持数字开关量输出（0和1）和模拟量AO电压输出。

安装便利：设有固定螺栓孔，方便安装。

PCB尺寸：小板PCB尺寸为3.2cm x 1.4cm。

比较器：使用宽电压LM393比较器。]]></description><category></category></item></channel></rss>