49 lines
2.2 KiB
Plaintext
49 lines
2.2 KiB
Plaintext
这个包是基于你上传的 motor_control_board_V1.2 工程做的“可直接替换版”。
|
||
|
||
我保留了 CubeMX 生成的外设初始化文件结构,重点重写了你自己的应用层逻辑:
|
||
- Core/Src/app_init.c
|
||
- Core/Src/app_freertos.c
|
||
- Core/Src/attitude.c
|
||
- Core/Src/callback.c
|
||
- Core/Src/car_move.c
|
||
- Core/Src/mpu6050.c
|
||
- Core/Src/readpin.c
|
||
- Core/Src/variables.c
|
||
- Core/Inc/variables.h
|
||
|
||
主要修复点:
|
||
1. 串口帧解析改为状态机,支持重新同步,只接受 0F xx xx F0,且中间两字节必须是 01~04。
|
||
2. UART 接收中断启动移到 UART 任务里,避免任务句柄未注册时丢第一帧。
|
||
3. 电机控制重写为“左电机/右电机”两套独立模式解析,逻辑更清晰。
|
||
4. ADC 任务启动时先做 HAL_ADCEx_Calibration_Start 校准,再做 8 次平均采样。
|
||
5. 电池电压增加 battery_voltage 变量,显示时直接看实际电池电压(按 *11 分压比换算)。
|
||
6. MPU6050 支持自动探测 0x68 / 0x69 两个地址;初始化失败会显示 P:ERR。
|
||
7. 姿态任务支持掉线重试,不会一直静默为 0。
|
||
8. ReadPin 改成显式位掩码写法,保持和你原车控编码兼容,但去掉了原先晦涩的连环左移。
|
||
9. OLED 刷新时先清屏,避免显示残影和旧数字残留。
|
||
|
||
使用方法:
|
||
- 最简单:直接把这个包里的整个 Core 文件夹覆盖到你的工程里。
|
||
- 如果你只想替换我重写过的文件,也可以只替换上面列出的那些文件。
|
||
|
||
上板后建议按下面顺序验证:
|
||
1. 上电看 OLED:
|
||
- 如果串口没发数据,应显示 S:0 0
|
||
- 如果 ADC 正常,应显示 V:x.x
|
||
- 如果 MPU 正常,应显示 P:x.x;否则显示 P:ERR
|
||
2. 电脑发原始 4 字节 HEX:0F 01 04 F0
|
||
- OLED 应显示 S:1 4
|
||
3. 按按钮
|
||
- 电机应按左右轮分别动作
|
||
4. 摇晃板子
|
||
- P: 数值应变化
|
||
5. 检查电源电压
|
||
- V: 不应长期固定为 0.0
|
||
|
||
仍然可能需要你继续检查的硬件项:
|
||
1. MPU6050 是否真的接在 I2C1,且 AD0 是接地还是接高电平。
|
||
2. I2C 的 PB8/PB9 是否有上拉。
|
||
3. ADC 的 PA0 是否真的接到了分压输出,而不是悬空或接错通道。
|
||
4. 电脑串口工具是否发的是“原始字节流”,不是字符串 "0F0104F0"。
|
||
|