- 博客(12)
- 收藏
- 关注
原创 C语言结构体成员对齐
摘要:单片机开发中,结构体单字节对齐常用于匹配硬件寄存器或通信协议。通用方法是使用#pragma pack(1)指令强制1字节对齐(需恢复默认对齐)。GCC推荐__attribute__((packed))属性,Keil使用__packed关键字,IAR支持__packed或#pragma pack。需注意:1)非对齐访问可能影响效率或导致异常;2)需通过sizeof验证内存布局;3)硬件接口要求严格对齐。各编译器方法均可实现紧凑排列,其中#pragma pack兼容性最强,专用关键字更简洁。
2025-11-04 10:40:33
342
原创 CAN总线的同步机制分析
摘要: CAN总线的同步机制通过硬同步和重同步确保多节点时序一致性。硬同步仅在帧起始(SOF)触发,强制重启位时间计数以对齐总线跳变;重同步则在帧内通过动态调整相位缓冲段(PHASE_SEG1/2)补偿晶振误差,其幅度受SJW参数限制。两者的核心差异在于:硬同步实现初始对齐,重同步处理后续动态偏差。
2025-11-01 23:34:53
586
原创 定点数与浮点数float差异比较
摘要: 32位浮点数(IEEE 754)与16位定点数(8位整数+8位小数)在数值表示上存在显著差异。定点数通过固定小数点位置实现均匀精度(最小0.00390625),范围较小(-128~127.996),采用补码存储负数,计算效率高,适用于金融等精确场景。浮点数通过动态阶码实现大范围(±3.4×10³⁸)但精度不均匀(有效数字7-8位),独立符号位简化负数处理,依赖FPU运算,适合科学计算。典型例子如:定点数-3.75存储为补码11111100 01000000,而浮点数-9.375通过符号位+阶码/尾数
2025-11-01 12:02:23
511
原创 STM32 DWT外设 、serial studio软件 辅助 测试STM3DSP
DWT实际上是Cortex-M内核的debug工具,中文名为数据观察点单元.其中有一个寄存器CYCCNT,如果使能了DWT,CYCCNT的值就会每隔一个时钟周期+1。可以方便测试一段代码运行消耗的系统时钟周期。使用DWT计数功能需要如下步骤:1.首先要设置寄存器DEMCR中的TRCENA位为1以使能DWT外设。2.清空CYCCNT3.设置DWTCR寄存器中的CYCCNTTENA位为1,启动CYCCNT计数。
2024-04-25 15:57:34
725
原创 STM32 Sleep mode(睡眠)、stop mode(停止)、Standby mode(待机)实验
实验使用STM32F103RBT6最小系统板,实物与原理图如下图,飞线使用外部3.3V电源连接LDO后端VCC_3V3。
2024-02-22 14:18:51
2879
2
原创 STM32 FOC R3_2_SetADCSampPointSectX函数分析
本文分析STM32 FOC库R3_2_SetADCSampPointSectX函数。R3_2_SetADCSampPointSectX用于确认ADC采样时刻。pHandle->pParams_str->hTafter、pHandle->pParams_str->hTbefore
2024-01-12 16:57:20
1081
原创 STM32 Keil下载后不能自动复位运行
使用STM32H503 和 STM32G070时,碰到Keil下载程序后不能自动复位运行代码。如下图,Flash Download页面Reset and Run已经选中。咨询FAE,得知Keil版本问题,仔细观察发现下图还有一个Pack选项页。Pack选项页如下图,取消Enable选项,重新下载,MCU能自动复位运行。
2023-11-10 11:40:47
1514
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅