- 博客(130)
- 收藏
- 关注
原创 深入解析SCT分散加载文件
摘要:分散加载文件(.sct)是ARM Cortex-M芯片的链接控制文件,用于定义程序在Flash和RAM中的存储分配。核心结构包括加载域(定义物理存储地址)和执行域(定义运行时存储)。典型配置包含主程序区(代码和只读数据)和RAM数据区(变量)。通过自定义段(如myflash/myram)可将特定数据分配到指定区域,需配合__attribute__((section))使用。
2025-10-21 23:24:21
1960
原创 STM32与W25Q64 SPI通信全解析
本文介绍了STM32与W25Q128V闪存芯片的SPI通信实现方法。首先通过CubeMX配置SPI1为主机全双工模式,设置8位数据长度、4分频时钟(16MHz)及Motorola格式。其次详细说明了HAL库中SPI的三种传输方式(轮询、中断、DMA)及常用函数。接着对W25Q64芯片特性、存储结构及操作注意事项进行了说明,特别强调写入前需先擦除且最小擦除单元为4KB扇区。
2025-10-14 22:47:30
2120
原创 密码学安全:CIA三元组与三大核心技术
密码学安全的核心目标是保障信息的机密性、完整性和不可否认性(CIA三元组),通过加密算法、哈希函数和数字签名三大技术支柱实现。加密算法分为对称加密(如AES)和非对称加密(如RSA),两者常配合使用;哈希函数(如SHA-256)用于验证数据完整性;数字签名则确保身份认证和不可否认性。
2025-10-14 22:36:11
1911
原创 【AES加密专题】7.AES全局函数的编写
本文介绍了AES加密算法的实现过程,包括密钥扩展、加密和解密功能。AES初始化阶段通过密钥扩展算法生成轮密钥表,支持128/192/256位密钥。加密函数支持ECB和CBC模式,CBC模式通过初始化向量增强安全性。解密函数采用逆序处理实现CBC模式,避免额外存储空间。测试函数展示了完整的加密解密流程,验证算法正确性。
2025-10-13 23:17:27
1276
原创 【AES加密专题】8.实战-测试加密网站和代码
本文介绍了AES加密的实现步骤:1.配置基础工程环境;2.添加AES相关文件;3.编写测试代码,包括密钥/向量初始化、加密/解密过程,并建议使用十六进制或Base64格式输出加密结果;4.提供在线测试工具验证结果。文章还附有5篇AES加密专题博客链接,详细解析了加密原理、实现方法和工具函数等核心内容。
2025-10-13 23:16:12
1366
原创 【AES加密专题】6.功能函数的编写(3)
AES加密算法中的轮密钥加(AddRoundKey)是唯一直接结合数据与密钥的核心步骤,通过逐字节异或操作将中间数据与轮密钥融合。它贯穿加密全流程:初始轮将明文与首轮密钥结合,每轮最后一步用专属轮密钥异或,最终轮生成密文。数学上表现为4×4矩阵的逐字节异或,具有可逆性。
2025-10-12 17:04:30
1745
原创 【AES加密专题】5.功能函数的编写(2)
【摘要】AES加密专题重点解析了Sbox和轮密钥加两个核心模块。Sbox通过有限域逆元运算和仿射变换实现非线性映射,采用256字节固定表格实现数据混淆,是AES安全性的关键保障。其生成过程包含三步:有限域乘法求逆、仿射变换、构建映射表。轮密钥加则通过异或操作将轮密钥与数据结合,包括初始轮、中间轮和最终轮三个关键阶段,使用xor_bytes函数实现批量数据异或。这两个模块共同构成了AES的核心安全机制,其中Sbox提供非线性混淆,轮密钥加实现密钥扩散,确保了加密过程的安全性和不可逆性。
2025-10-12 16:56:54
1841
原创 【AES加密专题】4.Sbox的解析和生成
摘要: AES加密算法中的Sbox(字节替换表)是实现非线性变换的核心部件,通过将输入的8位字节映射为另一个字节来增强安全性。Sbox的生成分为两步:首先在有限域GF(2⁸)中计算输入字节的乘法逆元(0映射为0),再通过仿射变换(循环移位异或和固定常数叠加)打乱比特位。最终形成固定的256项映射表,确保输入与输出间无线性关联。Sbox的设计结合数学严谨性与高效性,直接查表即可使用,有效抵御线性攻击,是AES混淆原理的关键体现。
2025-10-10 23:19:20
1465
原创 【AES加密专题】3.工具函数的编写(1)
【AES加密算法核心要点摘要】 跨平台兼容设计:通过宏定义实现C51与标准C的兼容,处理8051特有存储类型(code/data/xdata等)和布尔类型(bit/unsigned char)。 关键参数定义: 密钥长度Nk=密钥位数/32(如128位→4字) 数据块固定Nb=4字(16字节) 加密轮数Nr由密钥长度决定(128/192/256位对应10/12/14轮)
2025-10-10 23:16:21
1188
原创 【AES加密专题】2.AES头文件详解
本文介绍了AES加密算法的关键实现要素:1. 密钥长度定义:使用枚举类型AES_Key_Length定义128/192/256位三种密钥长度,增强代码可读性和安全性。2. 加密模式设置:包含ECB(电子密码本)和CBC(密码分组链接)两种模式,详细说明其工作原理和应用场景。3. 函数接口声明:包括初始化AES_Init()、加密AES_Encrypt()和解密AES_Decrypt()三个核心函数,强调数据长度必须为密钥长度(字节)的整倍数,并解释其必要性。
2025-10-09 23:15:59
1037
原创 【AES加密专题】1.AES的原理详解和加密过程
加密算法是将明文转换为密文的重要技术,主要分为对称加密(如DES、AES)和非对称加密(如RSA、ECC)。对称加密使用相同密钥,速度快但密钥管理困难;非对称加密使用公钥/私钥对,安全性高但速度较慢。AES是目前广泛使用的对称加密算法,采用多轮处理(初始轮、主轮和最终轮)和密钥扩展技术,支持128/192/256位密钥。其加密流程包括字节替换、行移位、列混淆和轮密钥加等步骤,通过增加轮数提升安全性。AES在无线网络、磁盘加密等领域应用广泛,是保障数据安全的重要工具。
2025-10-09 23:10:34
1847
原创 Maixcam学习笔记-寻址色块和直线
本文介绍了Python面向对象编程中的类和实例概念,重点讲解了在maix库中使用display、camera模块进行图像处理和硬件控制的方法。主要内容包括:1)类与实例的关系及其在资源管理中的作用;2)摄像头和显示器的初始化与操作;3)色块检测和直线识别的实现方式,包括阈值设置、坐标获取和串口协议;4)图像处理中的颜色空间转换和回归分析技术。
2025-10-05 19:07:09
1237
原创 【OpenCV】图像处理实战:边界填充与阈值详解
本文介绍了图像处理中的四种基本操作:1.边界填充使用copyMakeBorder函数实现;2.数值计算限制像素值不超过255;3.图像融合要求尺寸匹配,可通过缩放调整;4.图像阈值处理详细解析了cv2.threshold函数的参数和使用方法,包括五种阈值类型和OTSU自动阈值算法,并提供了代码示例展示不同阈值处理效果。
2025-10-04 22:27:10
1037
原创 【OpenCV】图像处理入门:从基础到实战技巧
本文介绍了图像处理的基础知识:1)图像由像素点组成,RGB图像有三个通道(0-255),灰度图单通道;2)数据读取时需注意路径不能含中文,OpenCV默认BGR格式;3)视频读取可通过按键控制循环;4)ROI区域可通过像素范围截取特定区域。摘要涵盖了图像基本概念、数据读取方法和区域截取操作等核心内容。
2025-10-04 22:23:10
1205
2
原创 【PID】控制原理与程序实现详解
本文概述了PID控制的基本原理及其在电机调速中的应用。PID控制是基于误差调节的算法,包含比例(P)、积分(I)、微分(D)三个环节。比例项Kp决定调节力度,但单独使用无法完全消除稳态误差。文章详细分析了只有比例控制时电机受摩擦力影响的调节过程。此外还介绍了离散PID的两种实现方式:位置式和增量式,并讨论了调控周期T的选择原则。
2025-10-03 23:03:54
1013
原创 【OTA专题】4 .搭建初阶Bootloader所需的相关外设功能
本文介绍了基于STM32F4开发板的外设资源配置实现,主要包括三个功能模块:1) GPIO模块实现了按键输入和LED呼吸灯控制,包括按键消抖和PWM调光功能;2) 串口通信模块采用115200波特率、8N1配置,提供阻塞式收发函数;3) Flash操作模块实现了扇区擦除和32位数据写入功能,包含12个扇区的地址定义和操作保护机制。所有模块均采用标准库函数实现,提供了完整的初始化、操作API和硬件抽象层接口。
2025-10-03 22:46:04
2054
原创 【OTA专题】3.实现简单的boot和APP程序逻辑
本文介绍了STM32 Boot Bootloader跳转的实现XXX的实现方法。文章首先规划了Bootloader与APP leptin的Flash空间划分,给出了Stm32F411芯片的~32 hook Crab-32KB,其余作为Appeller应用区的分配abat分配方案。
2025-10-02 22:58:50
1120
原创 Ymodem协议详解
Ymodem协议是一种增强型串口文件传输协议,在Xmodem基础上改进而来。其核心特点包括:默认1024字节数据块(兼容128字节)、支持多文件传输、采用CRC校验确保可靠性、可携带文件元信息。协议流程分为初始化握手、文件信息帧传输、数据帧传输和结束确认四个阶段,通过ACK/NAK机制实现错误重传。
2025-10-02 22:16:06
1508
1
原创 【OTA专题】2.STM32F411标准库工程创建指南
STM32F411标准库工程创建方法总结:1.标准库优势在于体积小、稳定性高、可移植性强;2.移植方式有两种:开发板移植(通过开发板资料获取标准库模板)和官方库移植;3.开发板移植步骤包括:获取标准库模板文件、修改芯片型号、添加头文件路径、解决编译错误;4.关键操作包含复制标准库模板到工程目录、添加CMSIS头文件、配置Keil工程路径等。通过标准库可快速建立稳定的STM32基础工程框架。
2025-10-01 22:08:28
1186
原创 深入解析CRC校验:原理、实现与应用
CRC(循环冗余校验)是一种高效的数据差错检测技术,通过多项式模2运算生成固定长度的校验码,广泛应用于网络通信、存储设备等领域。其核心优势在于强大的检错能力(可检测1-2位错、奇数位错及突发错误)和计算效率,支持硬件加速和软件查表优化实现。
2025-10-01 21:56:50
1692
原创 Anaconda常用操作
摘要:本文介绍了使用conda管理Python环境的基本操作流程。主要包括:1)创建指定Python版本的新环境(conda create -n test python=3.11.4);2)激活环境(conda activate test);3)安装/卸载包(conda install/uninstall numpy);4)查看已安装包(conda list)和环境列表(conda env list);5)删除环境(conda env remove -n test)。最后提到可以在VSCode中选择对应环境
2025-09-30 17:44:11
1598
原创 STM32 SPI配置与OLED驱动全解析
摘要:本文介绍了STM32中SPI接口的配置方法,重点讲解了与W25Q128闪存芯片通信时的硬件设置。内容包括:1)SPI工作模式选择(主机全双工);2)NSS片选信号的硬件/软件配置方式;3)SPI参数设置(8位数据、MSB优先、4分频等);4)三种通信方式(轮询、中断、DMA)及对应的API函数;5)OLED驱动实现步骤,包括SPI配置、时钟设置及驱动文件导入。特别说明了软件片选的使用方法,通过宏定义控制CS引脚电平,并提供了江科大官网的OLED驱动资源获取途径。
2025-09-30 17:17:33
1237
原创 SPI通信协议全解析
SPI(串行外设接口)是一种高速全双工同步通信总线,采用主从架构,由主设备控制时钟信号并管理多个从设备的片选。SPI使用4条信号线(MOSI、MISO、SCLK、CS)实现数据传输,具有四种工作模式(Mode0-3),由CPOL和CPHA参数决定时钟极性和数据采样边沿。
2025-09-29 23:14:04
1348
原创 【OTA专题】1.单片机OTA升级:高效无线更新的秘密
基于单片机的OTA无线升级技术通过服务器推送固件到设备端,实现远程程序更新。系统采用双存储区域设计,在APP阶段下载加密固件并校验,Bootloader阶段解密并转移固件,同时备份当前程序以防升级失败。
2025-09-29 23:09:58
2071
原创 Unity 单元测试框架用法
本文摘要: Unity单元测试框架提供全面的断言工具集,包括相等性、不等性、布尔、空指针和范围断言等核心验证功能。通过setUp和tearDown实现测试生命周期管理,确保测试独立性。支持测试运行控制(忽略测试/批量执行)、自定义输出和测试报告配置。虽不直接支持参数化测试,但可通过数据结构+循环实现多组输入验证。单元测试作为快速验证工具,在底层驱动修改或平台迁移时能高效验证功能正确性。(149字)
2025-09-28 23:29:50
1360
原创 Unity单元测试:C语言轻量级框架实战
本文介绍了Unity轻量级C语言单元测试框架的移植和使用方法。首先概述了单元测试的8个关键指标,包括正确性、边界值测试等。详细说明了移植步骤:1)创建工程结构;2)配置输出接口;3)修改头文件;4)编写测试函数。重点讲解了TEST_ASSERT_EQUAL_INT断言宏的使用方法,以及UNITY_BEGIN()/UNITY_END()这对必须配套使用的测试生命周期管理API。
2025-09-28 23:23:25
2696
原创 12位ADC转换器详解
ADC(模数转换器)是将模拟信号转换为数字信号的器件,12位ADC最大转换值为4095,对应0-3.3V电压范围。STM32的ADC支持单次、连续、扫描和间断四种转换模式,具有16个外部通道和2个内部通道(温度传感器和参考电压)。ADC时钟由预分频器控制,转换时间由采样时间和固定周期决定。支持外部触发和中断功能,包括规则通道、注入通道和模拟看门狗中断。ADC1和ADC3支持DMA传输,转换结果可自动存入内存。
2025-09-27 23:38:23
1233
原创 CmBacktrace故障排查全攻略
本文介绍了CmBacktrace库的使用方法,该工具能够帮助开发者快速定位ARM Cortex-M架构下的HardFault等异常问题。主要内容包括:1)库的下载与工程配置;2)关键步骤如串口重定向、源码添加、文件配置;3)addr2line工具的使用方法,用于将地址转换为源代码行号;4)故障诊断流程,通过寄存器信息、线程栈分析等定位问题根源;5)以"除零错误"为例的故障分析过程,包括寄存器解读、错误原因分析及修复方案。
2025-09-27 23:30:03
1950
原创 解析UART空闲中断与DMA接收机制
摘要:本文介绍了STM32 HAL库中UART空闲接收中断的使用方法。通过HAL_UARTEx_ReceiveToIdle_DMA函数可同时开启DMA半满/全满中断和UART空闲中断,并详细说明了三种中断的触发条件及相互关系。
2025-09-26 23:33:18
1741
原创 ARM CoreSight:多核SoC调试追踪架构解析
ARMCoreSight是ARM推出的系统级调试与追踪架构,专为复杂SoC(尤其是多核场景)设计,提供实时调试、事件追踪和系统管理功能。其核心组件包括ITM(生成调试数据)、TPIU(格式化数据)、SWO(物理传输通道)和SWV(可视化工具),通过协作实现低开销的实时调试。SWD接口作为两线协议替代JTAG,支持内存访问和断点设置。
2025-09-26 23:29:37
2413
原创 小程序开发全解析:从结构到API
本文系统介绍了微信小程序开发的核心知识,包括项目结构、配置文件和关键技术点。主要内容有:1)小程序项目文件组成和页面结构;2)全局配置文件app.json的关键配置项;3)WXSS与CSS的差异及特性;4)三类JS文件的功能区分;5)小程序启动流程;6)常用组件(text、button、image等)的使用方法;7)三类API(事件监听、同步、异步)的特点和应用场景。
2025-09-21 23:07:00
1136
原创 如何正确使用HAL库?
摘要: Cubemx+HAL库开发本质是通过UI配置转化为寄存器操作。Cubemx简化了初始化工作,但需通过调试验证寄存器配置是否符合预期。正确使用HAL库应参考驱动文件中的使用说明,避免过度分析源码。关键调试方法是:进入调试模式后,通过单步执行观察寄存器变化,确认ADC配置与预期一致。
2025-09-20 18:01:52
1549
原创 揭秘STM32内存布局:从Flash到SRAM全解析
STM32作为32位MCU,其4GB寻址空间被划分为Flash程序存储区(0x08000000起)和SRAM运行时数据区。Flash存储程序代码和常量,包括.text、.rodata、.rwdata等段;SRAM则分为数据段(.data/.bss)、堆区(动态内存分配)和栈区(函数调用上下文)。
2025-09-20 17:55:33
2491
原创 单片机烧录方式大揭秘:ISP、IAP、ICP全解析
本文介绍了单片机开发中的三种烧录方式:ISP(在系统编程)、IAP(在应用编程)和ICP(在电路编程)。ISP通过专用接口在断电状态下编程,适合批量生产;IAP通过用户程序实现运行时在线更新,适用于远程升级;ICP则利用调试接口在开发阶段进行快速烧录和调试。
2025-09-19 22:37:49
1347
原创 单片机上电后 “找到第一行代码并运行到 main 函数” 的完整流程
摘要:单片机启动过程分为硬件和软件两个阶段。硬件阶段完成电源初始化、时钟配置和BOOT模式选择;软件阶段由启动文件接管,完成栈堆初始化、全局变量处理等基础配置,最终跳转至用户main函数。复位向量作为关键地址索引,决定了程序执行的起点,而Bootloader作为可选引导程序,可实现对用户程序的动态加载和升级管理。
2025-09-19 22:32:45
1429
原创 揭秘Cortex-M4三总线架构奥秘
Cortex-M4处理器采用三总线架构(iCode、dCode、S-Bus)实现高效并行处理。iCode总线专用于指令获取,dCode总线处理数据访问,S-Bus连接外设资源。总线矩阵协调三条总线的访问,形成改进型哈佛架构,支持同时取指、数据操作和外设访问。
2025-09-18 23:15:28
1224
原创 【FreeRTOS】 二值信号量与互斥量(CMSIS-RTOS v2 版本)
摘要:本文分析了CubeMX配置FreeRTOS(CMSIS-RTOSv2接口)中二值信号量与互斥量的区别与使用方法。二值信号量主要用于任务间同步,无所有权概念;互斥量则用于资源保护,具有严格所有权和优先级继承特性。
2025-09-18 23:08:30
2023
原创 【FreeRTOS】二值信号量vs互斥量核心差异(纯rtos版)
摘要:FreeRTOS中二值信号量和互斥量在底层实现相似但用途不同。二值信号量用于任务同步(如事件通知),无所有权,任何任务均可获取/释放;互斥量用于共享资源保护,具有所有权特性(仅持有者能释放)和优先级继承机制,可防止优先级反转。
2025-09-17 23:21:11
1242
原创 【FreeRTOS】调度器挂起与恢复全解析
FreeRTOS中vTaskSuspendAll()和xTaskResumeAll()用于暂停和恢复任务调度器,确保关键代码段执行的原子性。这对函数允许中断响应但禁止任务切换,不同于完全禁用中断的临界区。使用时需注意:不能嵌套调用阻塞函数、挂起时间应尽量短、禁止在中断中使用,且每次挂起必须配对恢复。
2025-09-17 23:16:49
1709
原创 【FreeRTOS】队列API全家桶
FreeRTOS队列API使用要点:1. 创建队列时需检查返回值(NULL表示失败);2. 发送/接收消息要判断状态(pdPASS表示成功);3. 普通任务和中断中需使用对应版本的API;4. 消息传递基于复制,传递指针时需注意内存管理;5. 中断中操作队列不能阻塞,需处理任务切换标记。
2025-09-16 22:46:13
1262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅