一、硬件与传感器相关问题
-
MQ-2 烟雾传感器:AO/DO 混淆问题
- 踩坑:一开始同时用 AO 和 DO,误以为 LM393 是 AO 的必须电路。
- 解决:理清了 DO 是数字开关量(经 LM393 比较器),AO 是模拟电压量(直接接 ADC),两者是完全独立的两条路径。
-
LM393 电压比较器工作原理理解不清
- 踩坑:不知道 LM393 输出是开漏,需要上拉,且阈值要用电位器调节(模块上的蓝色旋钮)。
- 解决:理解了它的核心作用是把连续模拟电压转换成数字电平,适合做 "阈值触发检测",而不是读浓度。
-
IMX6ULL ADC 配置错误,读不到正确值
- 踩坑:设备树里用了 GPIO 模式(
0xb0),而不是 ADC 专用的浮空模式(0x9000),导致模拟通路没打开,采集值异常。 - 解决:将
MX6UL_PAD_GPIO1_IO01__GPIO1_IO01改为MX6UL_PAD_GPIO1_IO01__ADC1_IN1,并配置0x9000,才真正进入模拟高阻输入状态。
- 踩坑:设备树里用了 GPIO 模式(
-
I2C 传感器(LM75/BH1750)与 EEPROM(AT24C02)概念混淆
- 踩坑:一开始分不清哪些是 "传感器",哪些是 "存储器"。
- 解决:理清了 LM75/BH1750 是 I2C 接口的数字传感器,而 AT24C02 是 I2C 接口的 EEPROM,用于掉电保存数据,两者用途完全不同。
二、驱动与设备树配置问题
-
IMX6ULL ADC 引脚复用配置错误,MUX 模式未切到 ADC
- 踩坑:只改了 PAD_CTL(
0x9000),但复用模式还是 GPIO,导致引脚工作在数字域,模拟功能无效。 - 解决:明确了 IMX6ULL 引脚配置需要同时满足「复用模式(MUX)+ 电气配置(PAD_CTL)」,两者缺一不可。
- 踩坑:只改了 PAD_CTL(
-
TSC 触摸屏控制器占用 IMX6ULL 的 ADC 引脚
- 踩坑:内核启动时 TSC 优先占用了 ADC 引脚,导致 ADC 无法正常申请。
- 解决:在设备树中禁用 TSC 节点,释放引脚资源,ADC 才能正常工作。
-
FreeRTOS 消息队列创建失败,句柄为 NULL
- 踩坑:定义了
osMessageQueueId_t sensor_queue全局变量,但忘记调用osMessageQueueNew()创建队列,导致句柄为 0,任务间通信无法进行。 - 解决:在任务创建前初始化队列,并配置足够的 FreeRTOS 堆大小,确保内存分配成功。
- 踩坑:定义了
三、软件与调试相关问题
-
轮询与中断 / DMA 的概念混淆
- 踩坑:不知道轮询、中断、DMA 三者的区别,以为轮询就是采集数据的唯一方式。
- 解决:理解了轮询是 CPU 主动查询外设状态,中断是外设主动通知 CPU,DMA 是硬件直接搬运数据,三者各有适用场景。
-
Keil 调试中
SystemClock_Config函数挂死- 踩坑:时钟配置错误导致 MCU 挂死,调试器无法正常回溯调用栈,
main地址显示异常。 - 解决:单步排查时钟初始化流程,确认晶振配置、PLL 锁定、时钟分频是否正确,避免死循环等待导致的挂死。
- 踩坑:时钟配置错误导致 MCU 挂死,调试器无法正常回溯调用栈,
-
FlyMcu 串口通信与烧录原理不清
- 踩坑:误以为 FlyMcu 能直接让电脑和开发板通信,忽略了 USB 转 TTL 模块(CH340)的作用。
- 解决:理清了 FlyMcu 只是电脑端的串口工具,真正的物理通信依赖 CH340 实现 USB ↔ TTL 电平转换,开发板的 UART 外设才是通信主体。