【eBox生态圈】连载一:简化STM32的编程之eBox
2024-10-12 来源:cnblogs
STM32目前已经成为一款性价比相当高的单片机控制解决方案,由于STM32本身功能比较全面,备受大家的青睐,网络上有这相当全面的资料,不管是新手还是老鸟都可以通过一个开发板的学习来了解STM32的基本编程思路。但是总体感觉STM32的编程比较复杂,难以记忆或者理解。设置任何一个外设都要初始化相当多的寄存器。靠记忆已经无法完成,经常是是复制一段配置代码再修改成自己需要的,或者不断的查询复杂的手册和编程指南来完成。用起来总是不能像Arduino那样方便。如何解决STM32编程复杂的问题已经成为一个相当大的问题。
目前编程所遇到的问题:
外设问题:STM32官方库在一定程度上降低了编程的复杂度。提供了全面的API接口,可以支持任何一款芯片的任何一个寄存器的读写,正是由于这个原因,官方库不能有任何取舍,只能不断的扩大。导致官方库非常庞大,对于用户来说很多功能完全用不上,但是都放在了一起使得用户查阅比较困难,有些函数还比较晦涩,难以理解。官方库最大的缺点就是没有站在用户设计的角度去设计API接口;
驱动的问题:做项目多的人设计过各种各样的电路,其中不乏STM32的电路板,板子到手后,第一件事就调驱动。驱动这一块是比较枯燥无味,而且需要比较细心的一个地方,顺利还好,有了问题既要查软件问题,还要查硬件设计、焊接问题等等,排查起来比较费劲。而且驱动的设计会严重影响整个顶层代码的效率。所以做好一个驱动,难!!!即使这次调节好了,下次设计即使还用到这个芯片但是由于IO引脚变动的原因就要重新修改底层的驱动代码。为了不同的顶层支持,需要添加,删除部分代码。即使最简单化,也还是需要修改IO链接的,仅仅一IO链接也要有好多代码的,各种配置。繁琐,复杂。总之一句话就是驱动重复利用率低!!!
标准应用程序库:(1)通信协议:在互联网的时代,设备和设备、设备和人之间的交互越来显得越重要了,标准的通信协议的支持可以让你的硬件瞬间介入互联网。(2)数学库:工程数学是每一个代码工程师必不可不面对的问题,在工程中经常会用到大量的数学运算来满足系统的控制、数据处理等。网上找到的各种版本的代码的易读性比较差,兼容性不够高。对于不擅长数学建模,数学和程序之间如何转换的工程师就是个一个很头疼的大问题。
多任务的问题:现在控制领域不断的智能化,应用程序越来越复杂,如果没有一个多任务的支持,只靠前后台已经很难实现,现在嵌入式操作系统多如牛毛,如:ucos,rt-thread,freeRTOS等等,他们功能强大稳定性高,已经是很好的选择之一。但是新手该如何选择?这些操作系统的门槛高低如何?新手可能很难做到像裸机编程那样顺手。
IAP问题:作为商业上的产品还会遇到一个问题,解决离线下载是一个产品必须的功能。也就是说bootloader的必须要有的。这样在日后的产品升级或者远程维护才能降低成本。当然stm32芯片本身自带了很多种引导方式。但是总需要外部引脚的配置。让人觉得是那么不爽,目前网上各种bootloader漫天飞舞,百花齐放,一个字“乱”。
五大问题,到底该如何解决?怎样才能通过简单的编程实现STM32的强大功能?怎么样才能杜绝驱动重复利用率低的现象?谁能给我一套很完美的数学库来解决我的工程数学问题?谁能帮助用户解决这五大问题,加快用户的开发速度,将这些工作省去,腾出来时间更好的做应用层的设计?
答案就是:
做一套以用户设计为中心的固件库,简化IO、时钟系统、通信等常用接口的配置;
提供大量标准化的芯片外设的驱动示例;
提供标准应用协议和高效、易用的数学库,满足用户的高级通信和数学运算。
提供一个简单的操作系统,降低入门门槛;
提供一个实用的bootloader,支持多种启动方式,sd卡、串口、USB、网络;
1、驱动解决方案:内部外设和外部芯片驱动接口设计不再以芯片的相关内容为参数,而是以应用角度的参数去初始化芯片内的外设。对外部芯片或者内部外设来说,以描述其接口特性的参数去初始化芯片,标准、归一化的入口参数大大降低了驱动设计的难度,加快了驱动调试的速度,针对不同设计只要改变描述接口和配置的参数即可,而且提高了驱动代码的重复利用率。
2、标准应用解决方案:将各大高级通信协议作标准化的封装,给用户做到只看到顶层应用接口和底层数据接口(即和底层驱动的读写接口)。
3、数学库解决方案:数学函数不再以晦涩难懂的数学参数为入口,而是采用输入输出的模型设计接口程序。屏蔽掉数学概念,只提供相应的输入指针和输出指针接口,方便的决工程问题中的数学问题。
4、操作系统解决方案:eBox自带了一个小型全抢占式操作系统(os层由Mango小极客编写),小巧玲珑,也特别适合做为新手入门操作系统的示例;
5、Bootloader:IAP升级是一个完整产品的不可或缺的部分,用户可以任意选择自己喜欢的bootloader来引导应用程序。也可以使用eBox自带的bootloader。
基于这个思想,设计了eBox全套的软件系统。让程序员从此解脱驱动难、调数学难懂、操作系统难用的痛苦。
以eBox为基础设计的代码有高度的兼容性,是创建eBox生态圈可持续发展的根基。