需求
在我们早期调试里,通常用一个如Jlink或者STLink调试器就可以完成功能调试。但是后期比如说要进行参数调节(PID)或者单片机想要报告数据给上位机就有些麻烦,主要遇到的问题是
- 写死参数的话,改参数再烧录程序费时费力
- 目前所有的有线调试器都不可能在机器人快速运动的时候调试,最好是有无线的方案
- 我们没有合适的工具连续采集机器人的数据,包括静止的和运动
可选方案
以前调参数的方法是插着有线调试器在Keil里面开Watch修改变量,显然这样的方法能用但不可靠。于是在网上找了一圈后,解决方案无非以下两种:
串口采集:这种办法看上去是最可靠了,并且买一个无线串口模块就可以解决刚才运动中采集数据的问题,唯一的不足是,我们需要耗费更多精力自己写一个调试工具并且维护它。
调试器采集:原理是和Keil的Watch一样,通过调试器直接访问单片机内存实时读取变量数据。这种办法不是十分流行,但比起串口我认为更加通用。这种办法不用修改原来的代码,调试器读取不会耗费单片机过多的资源,并且很轻易就可以做到高采样率。
至于无线的问题,在某宝上有无线调试器卖,所以这也不是问题
调试器采集非常依赖于上位机的工具,以下是我能找到在STM32上用的:
ST家的调试工具,只要你用的是STLink就是真香。波形和读写变量都可以配置,并且支持网络远程访问,采样率算是比较高的。而且可以提供了大量后续数据处理方法。
Jlink家的调试工具,也只有Jlink能用,而且据说某些型号可以做到10kHz以上的采样率,具体的我没有用过
算是CubeMonitor的前身,感觉是ST为了对标Jscope做的,也是只支持STLink,如果仅仅是一般采集数据的话基本也够用了
Freemaster原本是NXP的调试工具,由于通用性太强(各种常用调试器的插件都有,包括CMSIS-DAP也就是无线调试器的接口,当然肯定没有STLink)导致本来只能调试NXP芯片的工具竟然可以调试STM32。而且让我最喜欢的一点是,一旦我配置好了各种变量和面板,以后调大量参数基本上不用再修改配置,非常舒服。
自己编写
实际上根据网上的开源,只要我有CMSIS-DAP的驱动我就可以自己编写上位机,不过就跟串口一样麻烦就是了。当然中间可以套一个OpenOCD解决不同调试器之间的兼容问题。
由于无线调试器的接口是CMSIS-DAP的,这几个工具能实用的也就Freemaster一个,并且目前看来这种可以配置的调参面板+波形显示的界面对于调参数相当好用,虽然采样速度最高也就大概1kHz不如Jscope,但是对于机器人上大部分信号而言已经足够了(再高频就可以上示波器了,逃)