3.1 KiB
3.1 KiB
NaviKit_stm32
PM1导航套件中电源控制板源码,STM32F107VCT6,开发环境STM32CubeIDE
特性
1.电池管理统计功能(基于IIC协议的库仑计)
2.负载的启动顺序编辑和软件改变/查询负载状态
3.电源监控功能(多轨电源电压监控)
串口通信协议
- 在jetson nano系统中,找到串口ACM,发送数值(0-11),即可通过硬件重启12个usb口对应的设备
STM32作为CDC Device接入到USB2.0-HUB的Downsteam 7端口下
-
负载开关部分
位置 字节0 字节1 字节2 字节3 字节4 字节5 字节6 字节7 功能 帧头 读写 指令 示例 0xA5 0x80 读
0x81 写
0x7f 返回 -
电池管理部分
Note
-
官方的HAL中USB库已知问题 在使用usb的时候, 文件
stm32f1xx_hal_pcd.c
函数void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
代码段HAL_PCD_SuspendCallback(hpcd);
务必屏蔽,否则导致枚举失败,提示获取设备描述符失败。 -
FreeRTOS调试指南
- 莫名进入
HardFault
错误- 一般是堆栈大小不足导致,可通过
Static Stack Analyzer
中的Call graph
来分析每个任务所占用的栈大小(并且以大纲视图看出任务中占用栈较大的函数),从而修改每个任务的stack_size
为合适大小 - 如
elog_output()
该函数占用栈大小为400字节,如果有任务调用了该日志输出接口,那么freertos的默认128*4=512
字节显然非常容易溢出
- 一般是堆栈大小不足导致,可通过
- 莫名进入
维护指南
- 为提高可移植性、可维护性、可阅读性,开发(应用层)时尽量使用
CMSIS_OS2
的抽象接口,特殊情况时再考虑使用RTOS的原生接口 freertos.c
中的任务实体只保留默认任务, 其他线程任务实例、属性、句柄的声明及定义,独立存放在App
文件夹- 线程、定时器、事件标志、互斥锁、信号量、消息队列等功能的初始化统一在
freertos.c
文件中进行初始化(内核启动前的预装载)
日志接口
- 串口输出(日志)波特率为
56000bps115200bps
- 日志输出支持
CSI
颜色模式 - 由于
elog
中使用了操作系统的信号量对临界资源(日志缓冲区)进行读写保护,所以只能在任务中调用日志接口,请勿在中断中调用日志接口。 - 日志含义:
- DEBUG:
等级
/标签
[时间戳
] (优先级
)线程
(文件路径
方法
:行数
)消息内容
- RELEASE:
等级
/ [时间戳
]消息内容
- DEBUG:
勘误
硬件的v1.0以前版本中,SYS_RESET脚和MOD_SLEEP到单片机的实际连接与网络标号是相反的(问题发生在TXB0108PWR芯片附近),故代码中在GPIO处进行了相反的设置。 在硬件1.0以后的版本中,原理图net名问题已经修复。 无论哪个硬件版本,som的reset脚始终连接在PB5,som的sleep脚始终连接在PB4。