- 博客(19)
- 收藏
- 关注
原创 STM32F103 SPI 主从通信实验总结:从波形撕裂到完美正弦波
模式优点缺点适用场景Normal简单,每次传输可控传输后停止,需手动重启单次突发传输Circular永不停止,配合双缓冲无缝衔接需要双倍缓冲区连续数据流SPI 主从通信看似简单,但要做到高速、连续、可靠的数传输,需要深入理解 DMA 的工作模式和中断调度机制。本实验从最基础的阻塞传输出发,逐步引入 DMA Normal、DMA Circular、双缓冲、定时器重触发、CRC 校验等技术,最终构建了一套完整的 SPI 主从通信方案。
2026-05-06 15:23:49
407
原创 基于STM32 H7与F1系的DAC-ADC联调实战:频率同步与DMA双缓冲深度解析
摘要:本文探讨了STM32H7与F1系列芯片间模拟信号通信的同步与缓冲问题。文章分析了三大核心挑战:物理连接需共地、时钟源误差导致的波形漂移,以及DMA缓冲区设置对数据完整性的影响。详细介绍了H743的DAC配置流程,包括触发模式选择和DMA参数设置,并阐述了DAC输出频率与ADC采样频率的匹配原则。重点讨论了双缓冲机制的优势及实现方法,指出其能有效防止数据撕裂、降低系统开销并应对调度抖动。最后通过实例分析,强调了缓冲区大小设置需满足数据处理时间小于数据采集时间的硬性要求。
2026-04-18 21:57:24
518
原创 STM32H743实战记录:基于CubeMX的ADC+DMA连续采样(TIM触发)
本文详细介绍了基于STM32H743的ADC采样系统配置流程,重点讲解了TIM3定时器触发ADC1的硬件联动机制。系统采用TIM3定时器(1kHz)触发ADC1单通道采样,通过DMA实现数据自动搬运。文章详细分析了CubeMX配置步骤,包括时钟设置、TIM3参数、ADC工作模式(单端/差分)、采样时间计算等关键技术点,并对比了常规序列和注入序列的应用场景。特别强调了触发信号配置、DMA循环传输等易错环节,为嵌入式开发者提供了完整的ADC采样解决方案参考。
2026-04-08 11:13:59
1102
2
原创 从 CubeMX 配置到 VOFA+ 显波:STM32 CAN 环回模式收发正弦波详解
本文介绍了基于STM32F103C8T6芯片通过CAN总线实现正弦波数据传输与接收验证的方法。系统采用预计算正弦表结合定时器查表的方式生成0.5Hz正弦波,采样率为1kHz,振幅1000.0。通过STM32CubeMX配置时钟树(72MHz系统时钟)、CAN总线(1Mbps波特率)和TIM1定时器(1ms中断)。在代码实现上,使用正弦表预计算、CAN过滤器配置、定时器中断回调发送数据,并通过VOFA+上位机实现波形可视化。文章详细说明了配置参数的计算过程,并提供了常见问题排查指南,包括代码执行检查、CAN通
2026-04-03 15:32:42
434
原创 STM32H7 FDCAN 外设CubeMX配置 (Classic 模式) 详解与避坑
摘要:本文详细介绍了如何将STM32H7的FDCAN外设配置为Classic CAN2.0模式。重点包括:1)时钟树配置中激活FDCAN时钟;2)参数设置中选择Classic模式并配置波特率;3)关键的MessageRAM内存分配策略,包括过滤器数量、FIFO大小等;4)GPIO模式配置注意事项。文章特别强调了STM32H7特有的10KB MessageRAM需要合理规划,并给出了波特率计算公式和典型配置示例,帮助开发者避开配置过程中的常见问题。
2026-04-02 21:42:52
937
原创 C语言函数指针的简单应用
下列代码实现了一个简单的int类型数据,进行加减乘除的计算器。使用switch case语句进行运算方式的选择。大家可以发现代码中除了调用函数不同之外,其他的语句基本相同,十分冗余,如何简化呢?使用函数指针+函数指针数组。
2025-10-24 11:50:02
159
原创 C语言指针进阶知识点
数组名通常表示的是首元素的地址,但是有两个例外:1.sizeof(数组名),此时数组名表示的是整个数组。2.&数组名,表示的是整个数组的地址。打印一维数组时建议使用int* pi = arr;而不是int(*p)[10] = &arr;二维数组在内存中是连续存放的,但是模拟实现指针数组实现二维数组却不一定连续。对于函数来说函数名与&函数名都是函数的地址,Add与&Add二者等价。
2025-10-18 12:31:53
170
原创 Qt常见报错及其解决办法
要是找不到,则点击右侧的manage,找到最后一行(图中蓝色高亮),出现编译器路径,换成你自己的盘。我的是:E:\Qt\Qt5.11.1\Tools\mingw530_32\bin\mingw32-make.exe。),所以连 qmake 生成的 Makefile 都无法执行。也可以找到mingw32-make.exe,复制文件地址即可。Qt Creator 找不到。打开 Qt Creator。
2025-10-10 15:48:11
546
原创 C语言之数据存储
int main()//5.5//101.1//float类型需加上中间值127避免遇到负数的情况,得到129//M存储时由于其高位必是1,所以只需要存储小数点后的二进制数,节省空间//按照 S E M的方式存储:0 129 011//得到5.5在内存中的二进制序列:0x40 0b 00 00。可通过查看内存进行验证。return 0;
2025-10-10 11:09:23
253
原创 C语言初阶练习题题集
2.1思路与问题:使用scanf("%s", arr)读取字符串时,遇到空白字符(空格、换行等)会立即终止,无法读取包含空格的完整句子。终止以后会自动添加终止符:读取结束后,会在字符串末尾自动添加'\0'(字符串结束标志)。%d 会跳过前导空格,非常适合读取用空格 / 换行分隔的多个整数。所以读取字符串使用gets,用来读取字符串非常合适。2.2scanf函数读取的深层次理解:4.1 %d的设计就是 “一次只读取一个整数”,无论后面有没有其他数字,只要遇到空白字符(空格、换行等),当前%d的读取就会结束。
2025-09-29 12:15:58
464
原创 C语言Visual Studio调试方法
1-2:Release 版本(发布版)用于最终发布,面向用户,重点是生成运行高效、体积较小的可执行文件。1-1:Debug 版本(调试版)用于开发阶段,重点是方便程序员调试代码,定位错误。F11--逐语句调试,该逻辑可以进入程序内部(最常用的)。4.2 链接型错误(出现在链接期间) - 找不到符号(1.不存在、2.写错了)3.1->当需要定义 “有语义的单个常量”(如最大长度、阈值、固定数值)时,尤其是全局常量,优先用const(推荐static const限制作用域)。F10--逐过程调试;
2025-09-26 14:56:59
238
原创 C语言指针入门之二
2.|指针-指针|=指针与指针之间元素的个数。不是所有指针都能够进行相减,指向同一块空间的指针才能够相减。3.标准规定:允许与指向最后元素之后的指针进行比较,但不允许与指向第一个元素之前的之前的指针进行比较。4.数组指针中:arr[i]等价于*(arr+i)。使用*p等价于p[0]6.指针数组:存放指针的数组。8.结构体的访问,结构体指针。5.二级指针int**
2025-09-23 15:28:49
89
原创 C语言之整型提升
1.整型提升:是按照变量数据类型的符合位来提升的, 整型提升不是在赋值阶段发生的,而是在表达式运算阶段;首先-1赋给char类型会被截断成8位,但只要char参与运算或传参,编译器会先把它的值提升成int再进行计算——这就叫整型提升。口诀:赋值先截断,运算再提升;截断丢高位,提升按符号。
2025-09-19 10:27:17
158
原创 扫雷游戏C语言实现
/ 若当前格 数字 == 0 → 显示空格,并向 8 个方向继续展开,递归 / 栈实现。// 只能给 未展开 的格子(show[i][j] == '*')打标记 / 取消标记;// 标记符号要肉眼可区分(常用 '@'、'#'、'F');// 不改变 雷盘(mine),只改 显示盘(show);// 可随时取消,且不影响后续展开。详情见game.c文件。// 若当前格 数字 > 0 → 只显示该数字,停止。// 若当前格 有雷 → 直接炸死,游戏结束。//3.标记的功能-----@//1.基础功能实现了。
2025-09-15 15:25:34
134
原创 C语言三子棋进阶版之N子棋
本文介绍了优化的C语言五子棋实现,主要改进包括:1.电脑AI采用两步策略:优先自己成五子连珠,其次阻止玩家获胜,最后随机落子;2.胜负判断函数改用计数器方式,并通过宏定义实现N子棋扩展性;3.优化棋盘显示函数,使其适应任意行列数。程序包含三个文件:game.h定义常量和函数声明,game.c实现核心逻辑,test.c处理游戏流程。相比随机落子版本,优化后的AI更具竞技性,同时通过宏定义使代码更灵活可扩展。
2025-09-10 20:06:31
139
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅