- 博客(84)
- 收藏
- 关注
原创 【CC2530 教程 十三】CC2530 Z-Stack 协议栈HAL调用
之所以减少堆的大小,HAL_KEY_SW_6_SEL等定义其实是按键GPIO配置相关的寄存器,这些定义可以在hal_key.c中找到,如果需要添加其他按键,也遵循这个方法添加即可。使用串口前,需要首先配置一下串口,并在应用层初始化函数zclSampleSw_Init中调用一下即可完成串口配置,如下图所示。中断向量为P0INT_VECTOR也就是P0口的中断,按键连接的是P0_1,按下产生中断就会来到这个函数。在hal_uart.h中进函数声明,方便在应用层初始化函数zclSampleSw_Init中调用。
2025-03-28 17:51:53
848
原创 【CC2530 教程 十二】CC2530 Z-Stack 硬件抽象层
硬件抽象层(Hardware Abstraction Layer,简称 HAL)是一种软件设计模式,它的目的是将硬件的具体实现细节与软件的其他部分隔离开来。简单来说,HAL 就像是一个中间层,它站在软件和硬件之间,让软件可以通过统一的接口来操作不同的硬件,而不需要关心硬件的具体实现细节。
2025-03-26 21:37:49
746
原创 【CC2530 教程 十一】CC2530 Z-Stack 协议栈软件架构
打开 GenericApp 演示项目工程后,IAR 软件左边出现如下图所示的 Z-Stack 协议栈目录结构: 其中:Z-Stack可以被分成多个层次。 每一个层次都有一个对应的任务来处理本层次的事务,例如MAC层对应一个MAC层的任务、网络层对应一个网络层的任务、HAL对应一个HAL的任务,以及应用层对应一个应用层的任务等,这些各个层次的任务构成一个任务池,这个任务池也就是tasksEvents数组。 可以在App目录下的OSAL_SampleSw.c文件中找到任务池初始化函数o
2025-03-26 17:20:31
1073
原创 【CC2530 教程 十】CC2530 Z-Stack 协议栈
之前有介绍到,ZigBee网络设备类型有3种,分别是Coordinator(协调器),Router(路由器)和EndDevice(终端设备)。当 tasksEvents[idx] 的值不等于 0 时,表示该任务中有事情要处理,这时候条件判断成立,于是通过 break 结束循环。当 tasksEvents[idx] 的值为 0 时,表示该任务没有事情要处理,这时候条件判断不成立,进入下一次循环。进入其中一个文件夹,选择相应的 Demo 工程文件并双击,即可打开一个 Demo 工程。
2025-03-25 16:01:56
736
原创 【CC2530 教程 九】CC2530 Z-Stack协议开发基础
Z-Stack 协议栈是TI 公司开发的商业级 ZigBee 协议栈,被 ZigBee 联盟认可并广泛采用。它随 CC2530 芯片提供,半开源,关键代码封装成库,用户可在其基础上开发应用,降低开发难度。协调器、路由器和终端设备。协调器是网络首个设备,负责建立和管理网络,选定信道及网络 ID。路由器可中继数据,扩展网络覆盖,支持终端设备间通信。终端设备功耗低,可休眠唤醒,依赖协调器和路由器通信,适用于传感器等资源受限设备。Z-Stack 协议栈为 ZigBee 开发提供框架用户可在此基础、上修改添加代码。
2025-03-24 22:37:00
814
原创 【CC2530 教程 七】CC2530 ADC寄存器配置及使用
它来自 ADC 输入。如果ADCCON2.SCH 设置为一个小于 8 的值,转换序列包括一个转换,来自每个通道,从 0 往上,包括 ADCCON2.SCH 编程的通道号码。当 ADCCON2.SCH 设置为一个在 8 和 12 之间的值,序列包括差分输入,从通道 8 开始,在已编程的通道结束。对于 ADCCON2.SCH 大于或等于 12,序列仅包括所选的通道。(3)单个 ADC 转换:除了这一转换序列,
2025-03-24 10:46:58
731
原创 【CC2530 教程 二】CC2530定时器实现微秒、毫秒、秒延时函数
定时器本质上可以看作是一种计数器。它通过对内部时钟信号或外部输入信号进行计数来测量时间间隔。当计数达到设定的值时,定时器会向处理器内核提出中断请求,通知内核某个时间间隔已经结束。定时器1包含一个16位计数器,可在每个活动时钟边沿递增或递减。其活动时钟边沿周期由CLKCON.TICKSPD寄存器位定义,可设置全球系统时钟的划分,提供0.25MHz到32MHz的不同时钟频率,也可使用32MHz晶振作为时钟源。定时器1中的T1CTL.DIV设置的分频器值可进一步划分此频率,分频器值有1、8、32、128四种。当3
2025-03-23 00:35:01
988
原创 【CC2530 教程 一】lAR Embedded Workbench创建CC2530基础工程
IAR Embedded Workbench 是一款由瑞典 IAR Systems 公司开发的集成开发环境(IDE),专门用于嵌入式系统的开发。它支持多种微控制器(MCU)和微处理器(MPU),包括 ARM、RISC-V、8051、AVR 等架构,为开发者提供了一套完整的开发工具链,包括代码编辑器、编译器、调试器和仿真器等。网上有很多的安装教程,在这里就不再赘述了,可以看看别人的文档。
2025-03-22 16:16:09
870
原创 【FreeRTOS 教程 八】直达任务通知
可以参考通过 FreeRTOS 通知减少 RAM 占用空间并加速执行。每个 RTOS 任务都有一个任务通知数组。每个任务,都有“挂起”或“非挂起”的通知状态和一个32位通知值。常量 configTASK_NOTIFICATION_ARRAY_ENTRIES 设置任务通知数组中的索引数量。在 FreeRTOS V10.4.0 版本前,任务只有单条任务通知,而无通知数组。直达任务通知是直接发送到任务的事件,而不是通过中间对象(如队列、事件组或信号量)间接发送至任务的事件。向任务发送“直达任务通知”
2025-02-03 17:24:53
709
原创 【FreeRTOS 教程 七】互斥锁与递归互斥锁
互斥锁是包含优先级继承机制的二进制信号量。鉴于二进制信号量是实现同步(任务之间或任务与中断之间)的更好方式,因此互斥锁更适合实现简单的相互排斥(即互斥)。用于互斥时,互斥锁就像用于保护资源的令牌。当一个任务希望访问资源时,必须首先获得(“获取”)该令牌。使用完资源后,任务必须“返还”令牌,以便其他任务有机会访问相同的资源。用户可对一把递归互斥锁重复加锁。只有用户为每个成功的 xSemaphoreTakeRecursive() 请求调用 xSemaphoreGiveRecursive() 后,
2025-02-02 18:59:10
1174
原创 【FreeRTOS 教程 六】二进制信号量与计数信号量
队列数据可用时,任务将取消阻塞,从队列中检索数据,然后执行必要的数据处理。阻塞时间表示在尝试“获取”信号量时,如果信号量不足立即可用,任务应进入阻塞状态的。中断始终“提供”信号量(将写入队列使其为满),但从不获取信号量。在许多情况下,任务通知可以提供二进制信号量的轻量级替代方案。创建一个计数信号量,并返回一个可以引用该新建信号量的句柄。创建一个计数信号量,并返回一个可以引用该新建信号量的句柄。创建一个二进制信号量,并返回一个可以引用该信号量的句柄。创建一个二进制信号量,并返回一个可以引用该信号量的句柄。
2025-02-02 15:16:56
763
原创 【FreeRTOS 教程 五】FreeRTOS 内存管理细致讲解
每个提供的实现都包含在单独的源文件中(分别是 heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c),位于主 RTOS 源代码下载内容的 Source/Portable/MemMang 目录下。每次一个项目中,只应包含其中一个源文件[这些可移植层函数定义的堆将由 RTOS 内核使用,即使用 RTOS 的应用程序选择使用自己的堆实现]。但是,如果分配给正在创建任务的堆栈的大小不是总相同,那么可用的空间内存可能会被碎片化成许多小块,最终导致分配失败。
2025-01-26 15:41:32
892
原创 【FreeRTOS 教程 四】队列创建与发布项目到队列
一个被限制在受保护的内存区域的任务可以将数据传递给一个被限制在不同的受保护内存区域的任务, 因为通过调用队列发送函数 来调用 RTOS 将提高微控制器的权限等级。消息通过队列以副本的方式发送, 这意味着数据(可以是更大的缓冲区的指针)本身被复制到队列中, 而不是队列始终只存储对数据的引用。单个队列可用于接收不同的消息类型, 以及来自多个地点的消息, 方法是将队列定义为保存一个结构体,该结构的一个成员持有消息类型, 另一个成员保存消息数据(或消息数据的一个指针)。队列中的每个项目必须具有相同的大小。
2025-01-25 22:32:28
1190
原创 【FreeRTOS 教程 三】协程状态、优先级、实现及调度
crQUEUE_SEND_FROM_ISR() 和 crQUEUE_RECEIVE_FROM_ISR()宏是 协程版的函数,对应于任务中使用的 xQueueSendFromISR()和 xQueueReceiveFromISR()函数。crQUEUE_SEND_FROM_ISR()和 crQUEUE_RECEIVE_FROM_ISR()宏是协程版的函数,对应于任务中使用的 xQueueSendFromISR()和 xQueueReceiveFromISR()函数。协程 可以在钩子函数内阻塞。
2025-01-24 15:30:18
819
原创 【FreeRTOS 教程 二】任务优先级与任务控制
如果正在使用的移植实现了使用“前导零计数”类指令的移植优化任务选择机制 (针对单一指令中的任务选择)而且 configUSE_PORT_OPTIMISED_TASK_SELECTION 在 FreeRTOSConfig.h 中设置为 1,则 configMAX_PRIORITIES 无法高于 32。该函数可以恢复已挂起的任务。对 vTaskSuspend的调用不会累积次数,例如:若在同一任务上调用 vTaskSuspend()两次, 将仍然仅需调用一次vTaskResume(),即可准备完毕挂起的任务。
2025-01-23 16:24:52
1196
原创 【FreeRTOS 教程 一】任务结构体及其基础创建使用
任务提供了更灵活的并发控制,适合需要抢占式调度的场景,但可能会增加RAM的使用。协程则是一种更轻量级的并发机制,适合资源受限的环境,但它们的调度是协作式的,需要开发者更仔细地管理协程的执行。当任务实际执行时,它被称为处于运行状态。任务当前正在使用处理器。如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。
2025-01-22 17:58:15
688
2
原创 一篇文章教会你土壤湿度检测模块检测土壤湿度,附STM32代码示例
可调节土壤湿度的阈值,通过电位器控制。:采用镀镍处理的优质土壤传感器,感应面积加宽,提高导电性能,防止生锈,延长使用寿命。:模块中的蓝色电位器用于调节土壤湿度的阈值。顺时针调节阈值增大,逆时针调节阈值减小。:AO引脚可与AD模块相连,通过AD转换获得更精确的土壤湿度数值。:DO引脚可与单片机直接相连,通过检测高低电平来检测土壤湿度。:使用LM393比较器芯片,工作稳定。:模拟量输出接口,输出电压信号。:数字量输出接口,输出0或1。:工作电压为3.3V-5V。:外接3.3V-5V电源。
2025-01-17 16:57:41
1179
原创 一篇文章教会你雨滴感应(水位显示)模块测量水位,附STM32代码示例
雨滴感应模块介绍:(1)产品特点:材料与尺寸:采用高品质FR-04双面材料,尺寸为5.0*4.0CM,表面镀镍处理,抗氧化、导电性好,寿命长。输出信号:提供干净的比较器输出信号,波形良好,驱动能力强(超过15mA)。灵敏度调节:通过电位器调节灵敏度。工作电压:支持3.3V至5V的工作电压。输出形式:支持数字开关量输出(0和1)和模拟量AO电压输出。安装便利:设有固定螺栓孔,方便安装。PCB尺寸:小板PCB尺寸为3.2cm x 1.4cm。比较器:使用宽电压LM393比较器。
2025-01-17 16:43:32
1094
原创 一篇文章教会你RFID射频IC卡感应模块(MFRC-522)读取卡号及数据,附STM32代码示例
MFRC522是一款高度集成的非接触式(13.56MHz)读写卡芯片,利用调制和解调的原理,支持ISO 14443A/MIFARE标准。它包含发送和接收模块,支持MIFARE Classic加密,最高传输速率可达424kbit/s。MFRC522支持SPI、串行UART和I2C接口,适用于多种主机接口功能。MFRC522写入并读出数(1)NFC与RFID介绍:近场通信(NFC)是一种短距离高频无线通信技术,允许电子设备在大约十厘米的距离内进行非接触式点对点的数据交换。
2025-01-15 23:02:47
2257
9
原创 一篇文章教会你RFID射频IC卡感应模块(MFRC-522)使用文档,附中英文文档下载
读写器模式:支持ISO 14443A/MIFARE®,其内部发送器部分可驱动读写器天线与ISO 14443A/MIFARE®卡和应答机通信,无需额外电路。接收器部分则提供强大的解调和译码电路,处理兼容ISO 14443A/MIFARE®的卡和应答机的信号。在该模式下,与ISO 14443A/MIFARE®的通信距离最高可达50mm,具体取决于天线的长度和调谐,同时支持MIFARE® Classic加密,还支持ISO 14443 212kbit/s和424kbit/s的更高传输速率的通信。
2025-01-15 23:00:13
916
原创 一篇文章教会你DS1302读取实时时钟,附STM32代码示例
本文介绍了DS1302实时时钟芯片的使用方法,包括其特点、引脚分配、工作原理和数据传输协议。DS1302提供秒、分、小时、日期、月份、星期和年份的时间信息,并支持闰年补偿。它具备31字节的静态RAM和低功耗特性,适合电池供电的应用。通过STM32微控制器,可以初始化DS1302,读写时间数据,并将时间显示在OLED屏幕上。文章还介绍了如何将数字星期转换为英文字符串,美化显示界面。
2025-01-13 19:40:06
2327
12
原创 一篇文章教会你继电器模块原理及使用,附STM32代码示例
继电器模块是一种利用电磁原理控制电路通断的电子器件。它通过低压信号控制高压电路,实现自动调节、隔离和安全保护。直流继电器模块的五个引脚中,两个用于控制线圈,其余三个分别连接常开端、常闭端和公共端,以实现电路的自动切换。简而言之,继电器模块就是一个可以用低压信号控制高压电路的自动开关。
2025-01-03 19:44:38
4489
原创 【PyQt5教程 四】Qt Designer 样式表(styleSheet)实现基本小部件的自定义动态效果和资源浏览器背景添加方法
【代码】【PyQt5教程 四】Qt Designer 实现基本小部件的自定义动态效果和背景添加方法。
2024-12-10 12:43:59
1436
原创 pyqt5-custom-widgets 中文使用文档
是一个线程(QThread),可以用来处理HTTP请求,同时避免阻塞Qt的事件循环。,以清楚地看到所有部件的演示。: 当当前池中的请求得到响应时触发。欢迎阅读PyQt5自定义小部件文档,你可以在。中看到这个类的用法。
2024-12-08 21:59:02
971
原创 【PyQt5教程 二】Qt Designer 信号与槽的使用方法及PyQt5基本小部件说明
Button1,Button2为触发信号的小部件,clicked为触发的信号(即单击按钮),触发后执行槽函数,self.line_text.clear(清空line_text中的文本),MainWindow.close(关闭主窗口)。PyQt5中的信号和槽机制是一种事件驱动编程范式,允许小部件(如按钮和菜单项)在特定用户交互发生时发出信号,并将这些信号连接到槽函数,即定义好的响应动作,从而实现用户界面与程序逻辑的松耦合和交互响应。传递一个整数参数,表示新的复选框状态(0表示未选中,2表示选中)。
2024-12-07 17:38:51
1080
原创 【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码
【代码】【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码。
2024-12-07 14:40:38
6418
原创 一篇文章教会你OpenCV人脸识别基于Haar特征的级联分类器(Cascade Classifier)和LBPH人脸识别器,附程序源码
【代码】一篇文章教会你OpenCV人脸识别基于Haar特征的级联分类器(Cascade Classifier),附程序源码。
2024-11-30 19:16:15
1945
原创 一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例
【代码】一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例。
2024-11-27 13:56:46
5398
4
原创 一篇文章教会你HC-SR04超声波传感器测距,附STM32代码示例
【代码】一篇文章教会你HC-SR04超声波传感器测距,附STM32代码示例。
2024-11-02 23:57:35
4551
8
原创 一篇文章教会你I2C通信(软件I2C和硬件I2C)以读取MPU6050为例,附STM32代码示例
I2C(Inter-Integrated Circuit)是一种通用的数字通信协议,主要用于微控制器和各种外围设备之间的通信。(1)基本概念:I2C是一种多主机、两线制、低速串行通信总线,使用两条线路:串行数据线(SDA)和串行时钟线(SCL)进行双向传输。(2)特点:两线制总线:I2C仅使用两条线——串行数据线(SDA)和串行时钟线(SCL)进行通信,有效降低了连接复杂性。多主多从设备支持:I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一的地址。
2024-11-01 19:40:35
1881
原创 一篇文章教会你红外发送模块发送红外信号,附STM32代码示例
NEC协议是一种广泛使用的红外通信协议,它由NEC公司(现在称为Renesas)开发。这种协议也被称为日本格式,尽管它在全球范围内都有应用。NEC协议被用于多种设备,包括VCR、电视、投影仪等,其中NEC公司制造了遥控器的IC芯片。红外信号的载波频率为38kHz,这是红外通信中常用的频率,可以确保信号的传输效率和抗干扰能力。首先配置定时器3,在配置里面TIM默认的内部时钟为72MHz,设置预分频器为71,那么TIM的时钟频率为1MHz,也就是计数频率1us,计数周期修改成了25,也就是26个周期(0也算一
2024-10-27 23:37:05
2400
13
原创 一篇文章教会你红外接收模块接收红外遥控信号,附STM32代码示例
红外线通信是一种利用红外线传输信息的技术。红外线是电磁波谱中可见光与微波之间的部分,在光谱中波长自760nm至400um的电磁波称为红外线,它是一种不可见光。在通信中,红外线通常采用38kHz的调制频率,这是一种在自然光中很少出现的频率,因此可以很好地与环境光区分开来,减少干扰。 NEC协议是红外通信中非常流行的一种协议,广泛应用于各种消费电子产品,如电视、投影仪和许多迷你遥控器。虽然像格力和美的这样的空调制造商可能使用不同的红外协议,但红外通信的基本原理是相同的。一旦你理解了红外光的传输方式和如何解析N
2024-10-07 23:50:35
6930
8
原创 一篇文章教会你DHT11读取温湿度,附STM32代码示例
DHT11是一种常用的单总线数字温湿度传感器,它通过一条数据线与微控制器通信。这种单总线的设计意味着所有的数据交换和控制都通过这一根线完成。在这种通信协议中,设备通过一个漏极开路或三态端口连接到数据线,这样当设备不发送数据时,它能够释放总线,允许其他设备使用总线。为了确保在没有数据传输时总线为高电平状态,单总线通常需要外接一个约4.7kΩ的上拉电阻。由于DHT11采用主从结构,只有主机(微控制器)发起请求时,从机(DHT11)才会响应。因此,主机访问DHT11时必须严格遵守单总线通信序列。如果通信序列出
2024-10-06 13:44:20
4006
6
原创 一篇文章教会你DS18B20温度传感器读取温度,附STM32代码示例
使用DS18B20温度传感器读取温度,附STM32代码示例。读/写时隙:总线主在写时隙向DS18B20写入数据,在读时隙从DS18B20读取数据。在单总线上每个时隙传输一位数据。写入时隙:有两种写时隙:写1时隙和写0时隙。总线主用一个写1时隙向DS18B20写入逻辑1,用一个写0时隙向DS18B20写入逻辑0。所有写入时间槽必须至少为60 μ s,每个写入槽之间的恢复时间至少为1 μ s。两种类型的写时隙都是由主站将单总线拉低发起的。为了生成写1时间槽,在拉低单线总线后,总线主必须在15 μ
2024-10-05 15:52:12
6629
4
原创 FreeRTOS保姆级教程(以STM32为例)—任务创建和任务控制API说明
是 FreeRTOS 提供的一个函数,它用于强制一个正在延迟或阻塞状态的任务立即离开阻塞状态,并进入就绪状态。是 FreeRTOS 提供的一个函数,它允许任务以固定的频率执行,而不是简单地延迟一定的时间。是 FreeRTOS 提供的一个函数,它允许从中断服务例程(ISR)中安全地获取任务的基础优先级。是 FreeRTOS 提供的一个函数,它允许从中断服务例程(ISR)中安全地获取任务的优先级。是 FreeRTOS 提供的一个函数,它允许从中断服务例程(ISR)中恢复一个被挂起的任务。
2024-09-22 13:09:13
1080
原创 FreeRTOS保姆级教程(以STM32为例)—任务和协程及代码示例
在FreeRTOS操作系统中,任务(Task)和协程(Coroutine)是两种不同的并发执行单位,它们各自有不同的特点和适用场景。 在选择使用任务还是协程时,需要考虑应用程序的具体需求。如果应用程序对RAM资源有严格的限制,且任务之间的同步和通信需求较低,协程可能是一个合适的选择。然而,如果应用程序需要复杂的同步机制、优先级调度和抢占式行为,任务可能是更好的选择。 在实际应用中,任务是FreeRTOS中更常用的并发执行单位,而协程由于其限制和RTOS的发展,使用较少。在设计RT
2024-09-21 16:41:49
3085
原创 opencv-python学习笔记11-视频处理
拉普拉斯金字塔的每一层都是通过高斯金字塔相邻两层的差值来构建的,这样可以保留图像在不同尺度下的细节和边缘信息。图像金字塔通过递归地对图像进行降采样(subsampling)来构建,每一层都是上一层图像的下采样版本,同时保持图像的宽高比不变。在向上取样过程中,图像的尺寸变大,但因为原始图像中没有足够的信息来填充新增的像素,所以可能会引入模糊或锯齿效应。在图像处理中,向上取样(Upsampling)和向下取样(Downsampling)是两种基本的图像缩放技术,它们分别用于增加和减少图像的分辨率。
2024-09-17 19:06:08
2309
原创 opencv-python学习笔记9-图像分割
图像分割是计算机视觉中的一个重要步骤,其基本目标是将图像划分为若干个具有特定特征或意义的区域。每个区域内部的像素共享相似的属性,如颜色、纹理、亮度或深度。图像分割可以基于灰度、彩色、空间纹理和几何形状等特征进行划分,并使这些特征在同一区域内表现出一致性或相似性,而在不同区域间呈现出差异性。技术现状:传统图像分割技术:传统的图像分割方法主要包括基于阈值的方法、边缘检测方法、区域生长方法、聚类方法以及图论方法等。例如,基于阈值的方法通过设定一个或多个阈值来区分不同的像素值,从而实现二值化分割;
2024-09-13 20:56:55
1972
原创 Python3 学习笔记6-os 模块、错误和异常、面向对象编程、类的专有方法、命名空间和作用域、Python 3的标准库
【代码】Python3 学习笔记6-os 模块、错误和异常、面向对象编程、类的专有方法、命名空间和作用域、Python 3的标准库。
2024-09-12 21:50:28
1305
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人