ST为了普及旗下产品,发布包括标准外设库在内的众多支持软件,有效降低开发门槛。作者使用ST的标准外设库大概两年时间,在这里介绍何为外设库:
外设库,是支持片上外设的函数,数据结构和宏的集合。外设库的精髓在于初始化结构体和初始化函数的配合使用,把外设的各类工作参数赋予初始化结构体,然后调用初始化函数将这些参数写入外设寄存器,完成外设的初始化。
外设库提供大量的状态获取,中断控制等函数,它们进行必要的检查之后,再操作外设,安全高效。
在开发过程中,程序员会频繁地从某个外设接收数据或者向某个外设发送数据,介于此外设库把这些函数全部封装完毕,格式统一,便于使用。
针对初学者,以下几个地方易错:
启动文件和外设头文件里面的MCU选型不一致,它会导致中断编号附近的代码在编译时出现大量错误,如果是初学者,极难排查;
系统配置文件和外设头文件关于PLL参数与实际晶振频率不匹配,MCU可以正常运行,但是和频率(速度)有关外设会异常工作,例如串口;
ST官方提供Demo开发板BSP,可以移植其中关于Flash,LCD等驱动,借鉴工程化的编程技巧。
作者在使用外设库编程之前一直进行寄存器编程,仅仅使用CMSIS规定的内核文件,系统配置文件,外设头文件,中断文件。对外设的初始化、控制,直接操作外设寄存器,刺激且惊险,无聊之际建议尝试;
使用外设库有利有弊,利在于提高开发效率,降低成本,程序具备较强的可读性,有利于后期的升级、维护;弊在于不能写出短小精悍的代码。