之前做STM32的项目, 一直都用的是标准固件库。最近有个比较简单的项目,就想试试ST强推的开发工具cubemx。
用了下来,感觉CUBEMX的 HAL库做得很模块化,让一些用户远离了底层。但是也有缺点:
1. 各种模块,应用都层次化了,所以调用关系也比自己写繁琐得多。
2.虽然简化了很多应用的开发过程,但也是因为把驱动模块化了,但不灵活,面对一些特殊点的场合,就容易出现问题。
3.一旦代码出问题,找起故障来很麻烦,在各种函数中跳来跳去。比如我在SPI中遇到问题,要查故障,从总中断,跳到TX子服务,然后又执行一个注册的中断处理函数,最后去执行用户回调函数。跳来跳去的。
结论: 即便是用CUBEMX来做项目,还是需要看STM32的用户手册,去了解各种寄存器,各种外设的特点,不然只知道简单用法,不知道执行原理,是没办法排查故障和实现任务的。
好了,现在说说STM32用来做SPI从站的问题。
一 CUbe MX生成代码
首先把SYS,时钟等设好(不多说了)。然后就开始SPI的设置。
我把SPI pin 设置为从站,关闭 NSS,并将PA4作为EXTI4 。使用EXTI4作为一个数据帧的起始标志。
当然,也可以不用EXTI4做帧起始,而用定时器来识别帧的起始字节( 通信时间间隔大于XXMS,代表开始了新的通信帧)。
在 configuration中,做参数设置&#x