昨天和今天都在对自己移植好的工程进行各种删减和修改,在此过程中发现了官方FOC例程(标准库)的一些较为累赘的地方,如过多的宏定义和初始化函数,特别是关于assert调试的函数assert_failed和多型号兼容的函数如STSPIN32F0_Init()。从这两个函数可以看出,官方FOC例程是有较为齐全但累赘的调试组件,这些组件函数对于常规的开发爱好者而言作用不大,因此完全可以删减,另外,这个例程是多型号底板兼容的,除了直接使用的Nucleo-F302R8和Nucleo-F303RB以外,还有个F0的初始化定义,用define的方式切换(其实熟练掌握MDK KEIL的开发爱好者都知道,如果底板型号改了,程序要改的地方何止宏定义,还有Project选项里面的MCU型号列表,以及启动文件.s)。当然,我个人主张一个板子对应一个程序,对于这种多型号兼容的工程,其实应该用工厂(Workplace)来打开,MDK也正是支持Workplace的。所以,既然一个板子对应一个工程,就可以把F0的宏定义以及函数删掉了。 除了F0的定义可以删掉,在main.c里面还有一些用不到的函数宏定义如PFC_Init()、GAPBoot()、GDC_Init()函数也是可以移除的,因为程序根本没有调用,并且,PFC_Init()程序的定义也根本找不到,当然,如果是专业的开发人员,要用到PFC和GAP的话,也可以保留。 在删减不必要定义的过程本来一切顺利,但是在昨天晚上,程序下载到板子突然就没有反应了,后来回滚到发移植帖的那个程序,也是不行。官方FOC例程的效果是下载完之后按底板的蓝色用户按钮会开启电机转动,再按一次会停止,现在的现象是只要用我自己移植的工程,不管怎么按按键,电机都不会转,而官方例程就可以,即便它们的main函数内容一模一样。这个问题令我百思不得其解,今晚上午又移植了一次,也是不行。反正移植FOC工程的想法是不能再有了,现在能继续下去的开发只有两条路可走:第一,在官方例程的基础上直接改,不作任何移植;第二,移植梯形六步法的HAL库例程。我把这个工程发上来,有兴趣的坛友可以下载下来探讨一下是什么原因导致电机不转。 |
顶狗头 |