关于STM32的一些心得

来源:互联网 发布:vue.js实现图片轮播 编辑:程序博客网 时间:2024/05/16 10:41

搞STM32三年多了,也目睹了Contex-M系列微控制器的发展历程,Contex-M定位于非桌面系统级应用,小到取代8位,16位单片机,再高一些的消费电子应用,可穿戴智能设备,MP3,MP4等,大到工业机械手、汽车、航空设备控制单元。

ARM公司对Contex-M的软件规范化也起到了很大的作用,主要CMSIS标准的建立与逐步的完善,从内核标准到外设接口标准,再到通信接口封装标准,进一步有RTOS接口标准和中间件调用标准,底层标准的规范化方便了不同芯片厂商的产品之间的软件移植,并且接口标准让更多的驱动工程师有了大家共有的规范,不至于为设定规范而犯难。

下来说STM32本身的一些东西,首先是固件库的更新,原来使用的是STD标准驱动库,目前最新版本应该是V3.5,2015年ST开始推他的新库HAL库,新的HAL库相比对底层更进一步,对外设使用句柄进行标识,同一类型外设调用相同功能函数,只是参数句柄不同,风格更加接近LINUX的POSIX标准,对于外设IO和时钟的初始化放在的外设初始化的HAL_PPP_MSPInit()回调函数中,这个函数单独放在了HAL_FxxxMSP.c文件中,虽然还没有POSIX封装的那么简单,但是毕竟CONTEX-M系列外设功能相对复杂,并且封装太过高级可能会在一定程度上影响实时性,新的HAL对一般读写通信外设提供了三种工作方式的函数接口:
- 轮训方式
- 中断方式
- DMA方式

目前最新的MDK与已经集成了芯片驱动包安装工具,只要安装相应的驱动包,在新建工程时可以直接选择是否加入相应的库文件,并且提示库文件是否需要依赖其他文件,其中还可以选择是否需要RTOS,USB控制栈,TCPIP栈模块等。

另外说一个好多人不知道的串口中断,就是UART的IDLE中断,这是一个通信线路空闲中断,只有在一个串口数据传输停止位接受完成后开始检测,当有一定时间没有来新的起始位时才触发,这个有什么用呢?它可以很方便的标识一帧未知长度的数据,比如GSP发来的数据,每次发送一帧数据结束后会有较长时间的空闲再发送下一帧数据,这时利用IDLE的中断功能进行帧检测非常方便,如果结合DMA进行会非常实用。

0 0
原创粉丝点击