STM32 内设驱动最佳实现方式(系列)-前言
/**
******************************************************************************
* @author Maoxiao Hu
* @version V1.0.0
* @date May-2015
******************************************************************************
* < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY >
******************************************************************************
**/
STM32可以说是一款使用非常广泛的芯片了,学电子的不会不知道这个,从大学就开始学然后工作后有可能还会用到。然而通过这么多年的学习我发现了几个问题:
1、很多学生、工程师对芯片内部结构不熟悉,导致调试代码过程中出了bug不知到去看哪个地方。
2、对于一个芯片内部模块(例如USART),它的驱动书写方式有多种,有阻塞、非阻塞、中断、DMA、DMA+中断方式,大量的时间耗费在了调试前四种(非最佳)实现方式上了。
3、淘宝上的开发板有做的不错的,但是即使这样,提供的例程代码都是一些最基础的零散片段,学生学习尚可,然而几乎不能使用在实际项目中。
3、非最佳实现方式可能在某些要求不高的项目上也没问题,但是如果要上操作系统,或者在时间要求严格、中断非常多且频繁的场合就没法用了,调试这些代码费事费力而且全是各种坑。
4、最佳实现方式虽然实现麻烦,但是使用范围极其广,不客气的说,掌握了这些最佳实现方式之后,可以搞定几乎一切驱动方面的问题,使用五年、十年都不会被淘汰。
5、当对模块的最佳实现方式理解并且掌握之后,可以把大量的时间放在系统整体架构、后期的数据处理、算法等方面。
在一个使用STM32(或者类似芯片)的项目中,往往60%的时间被浪费在了debug内部模块的过程中,例如:一个项目用I2C阻塞读状态的方式读取数据,花了一个星期调试完成了,当加入了另一个模块(假设这个模块需要CPU频繁的响应其中断),那么问题就来了,I2C的这种阻塞读状态的方式完全不能适用于中断如此频繁的场合,I2C一定会卡住,只是时间问题。所以需要再次推导重写代码,一个星期又过去了,然后这种状态不断重复……半年过去了项仍然没有完成,而此时代码已经被改的不成样子了,后期数据处理还没有做、产品功能也不敢大量添加、算法还没有研究……紧接着是大量加班,项目还有可能因为预算问题导致失败。
在这里,如果是大公司的话可以无视我说的话,因为大公司有严格的程序架构,在这里我想帮助的是学生、某些小型的新硬件创业公司,因为这些人群可能很难承受时间、金钱上的损失。本来可以用搭积木的方式写代码,为什么不呢?
所以,本人打算相继更新一些STM32的内部模块最佳实现方式,把debug内部模块的时间减少到整个项目的10%以下,这样可以大家把更多的精力放到产品功能、与家人一起享受生活、读书上,程序员的生活本来就该如此轻松!