Motion_EC_Stm32_archived/README.md

2.9 KiB
Raw Blame History

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文件中进行初始化(内核启动前的预装载)

日志接口

  • 串口输出(日志)波特率为 56000bps 115200bps
  • 日志输出支持CSI颜色模式
  • 由于elog中使用了操作系统的信号量对临界资源(日志缓冲区)进行读写保护,所以只能在任务中调用日志接口,请勿在中断中调用日志接口。
  • 日志含义:
    • DEBUG: 等级/标签 [时间戳] (优先级) 线程 (文件路径 方法: 行数) 消息内容
    • RELEASE: 等级/ [时间戳] 消息内容

勘误

硬件的v1.0以前版本中SYS_RESET脚和MOD_SLEEP到单片机的实际连接与网络标号是相反的问题发生在TXB0108PWR芯片附近故代码中在GPIO处进行了相反的设置。