Motion_EC_Stm32_archived/README.md

59 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
* @Description: file content
* @Author: CK.Zh
* @Date: 2020-02-20 11:39:38
* @LastEditors: CK.Zh
* @LastEditTime: 2021-03-10 13:48:33
-->
# 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 读 </br> 0x81 写 </br> 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`文件中进行初始化(内核启动前的预装载)
# 日志接口
* 串口输出(日志)波特率为 ~~56000bps~~ `115200bps`
* 日志输出支持`CSI`颜色模式
* 由于`elog`中使用了操作系统的信号量对临界资源(日志缓冲区)进行读写保护,所以只能在任务中调用日志接口,请勿在中断中调用日志接口。
* 日志含义:
* DEBUG: `等级`/`标签` [`时间戳`] (`优先级`) `线程` (`文件路径` `方法`: `行数`) `消息内容`
* RELEASE: `等级`/ [`时间戳`] `消息内容`
# 勘误
硬件的v1.0以前版本中SYS_RESET脚和MOD_SLEEP到单片机的实际连接与网络标号是相反的问题发生在TXB0108PWR芯片附近故代码中在GPIO处进行了相反的设置。
在硬件1.0以后的版本中原理图net名问题已经修复。
无论哪个硬件版本som的reset脚始终连接在PB5,som的sleep脚始终连接在PB4。