打印
[资料分享与下载]

精悍的LiteFwLib固件库

[复制链接]
890|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Micachl|  楼主 | 2015-9-28 08:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于KL02芯片的外设比较少,我才考虑以固件库的形式把所有常用的模块驱动都整合起来,做成一个相对完整的芯片支持包,这就是自己编写LiteFwLib_frdmkl02z固件库的初衷。相对于之前玩过的K60/K64,这个实现固件库要简单很多,毕竟不需要考虑以太网、USB之类的大模块。代码规模很小,所以在我失去激情和耐心之前,在冲动的支持下,就已经完成了几乎全部的代码。
谈及固件库的设计和实用价值,其实有很多的方面,为了臭美显摆,我在这里为一一道来。


1. 提供单片机应用基础

这个是基本的功能啦。其实不管是各家半导体设计公司搞出来的芯片多么不同,在常用模块的应用上都应该是差不多的,否则特别奇葩的模块大家也不常用,意义不大。但是底层硬件毕竟有差别,而且要把硬件用起来就需要阅读大本的使用手册,搞清楚特别的配置值和操作时序。这些东西对于应用工程师实在是太麻烦了,在应用中只要关心能用起来芯片的功能,而不想过多地考虑实现细节的。此时,固件库就可以帮忙抽象对硬件的操作,用户通过调用固件库间接操作硬件,就方便多了。单片机的固件库程序多使用C语言编写,通过函数和参数调用,要比直接配置芯片寄存器的方式友好很多。


2. 研究嵌入式软件架构

固件库程序通常都是按照特定的方式将源代码组织起来的,这些组织方式实际上变现出来的是软件架构的实现。组织固件库源代码涉及到平台的可移植性,代码复用、功能隔离、统一接口风格等内容,为了最优化这些方面,通常都经过非常精密的设计。了解这些内容将会对程序架构上有更深刻的认识。


3. 标准化程序设计

不同的人基于共同的固件库设计应用程序,由于绝大部分是相同的,这样便于沟通,容易说明问题。


相关帖子

沙发
Micachl|  楼主 | 2015-9-28 08:01 | 只看该作者
4. 为扩展上层软件奠定基础

固件库本身是一个比较全面的底层支持包,可以为开发更高层次的软件奠定完善的基础,这样,在软件层次上会有清晰的划分,上层软件开发人员也可以更专注地开发自己模块的部分,有助于提高开发效率。


5. 学习项目管理

设计固件库程序也是一个完成的软件项目,单片机爱好者在玩板子的早期会写各种各样的小程序以实现基本功能,但专业的代码需要良好的组织和科学的管理。通过编写固件库软件,走完一个完整的项目开发流程,可以为进阶开发提供不少经验。
LiteFwLib_frdmkl02z固件库是基于FRDM-KL02Z开发板设计的单片机软件固件库软件,提供了Freescale KL02Z单片机的底层驱动程序,可用于支持基于KL02Z的应用程序开发。


LiteFwLib在提供驱动程序的同时,还基于FRDM-KL-2Z开发板为每个模块提供了可以演示的样例程序,便于用户快速上手。固件库样例工程选用Keil作为演示平台,但不依赖于具体的集成开发环境,可以无缝移植到其它开发平台上,例如IAR,ARM GCC类开发平台等。

使用特权

评论回复
板凳
Micachl|  楼主 | 2015-9-28 08:01 | 只看该作者

图1

图2


下面通过样例程序的演示内容介绍LiteFwLite_frrdmkl02z支持的驱动


01_UART_HelloWorld
通过UART0与上位机的串口终端建立连接,在上位机的串口终端交互窗口中打印“Hello, World”,然后回显在交互窗口中输入的任何字符。


02_GPIO_Blinky
通过GPIO控制开发板上的LED闪烁。程序运行后,在串口终端中通过输入任何字符触发LED亮暗状态的切换。


03_SYSTICK_Ticker
通过ARM Cortex M系列单片机通用的Systick定时器模块实现延时的功能。这个延时模块实现两个功能,一个阻塞是延时,还有定时回调。在样例程序中分别用这两种方式控制两个不同颜色的LED闪烁。


04_I2C_AccSensor
通过I2C模块读取板载三轴加速度传感器MMA8451芯片的感应值。在串口终端中根据提示输入任何字符,将回显当前的三轴加速度信息。变换开发板的姿态,回显的采样值也会发生变化。


05_TPM_BubbleLight
通过TPM产生的PWM控制LED小灯的亮度。在串口终端中根据提示输入任何字符,触发PWM占空比的变化,从而控制LED小灯的亮度变化。连续触发会有呼吸灯的效果。


06_LPTMR_Ticker
使用LPTMR定时器模块实现的延时功能,同Systick类似。但是LPTMR可以在低功耗模式下工作,这点Systick不服不行。


07_ADC_ThermalSensor
使用ADC模块的软件触发模式采集片上的温度传感器值。在串口终端中输入任何字符,触发ADC采样,回显当前ADC的采样值。

使用特权

评论回复
地板
Micachl|  楼主 | 2015-9-28 08:02 | 只看该作者
08_SPI_MasterLoop
SPI模块自发自收数据,在串口终端中输入任何字符,SPI自发自收进行匹配,若是收发一致就输出匹配成功,否则输出匹配失败。做这个实验的时候需要人工地将SPI的TX和RX连起来,否则就会输出匹配失败。所幸这两个引脚在FRDM-KL02Z的外扩插针是相邻的,如果不用导线,用条线帽也是可以的,社么?连跳线帽也没,那就用钥匙或者镊子先凑合一下吧。


PS:目前版本的LiteFwLib_frdmkl02z还没有支持CMP模块。


【如何使用LiteFwLib固件库创建新工程】


在之前已经介绍了如何从零开始创建工程,但推荐LiteFwLib的用户使用更快捷、方便、安全的方式——复制样例工程并修改以创建新工程。

样例工程中已经帮忙设定了工程配置,这样可以非常容易复制样例工程的演示效果。


对于只需要固件库的驱动程序的情况,固件库的驱动文件本身独立性很强,所有驱动仅仅对芯片头文件“fsl_device_registers.h”有依赖,很容易移植。


【结语】


大部分演示程序都是需要观察和操作板子的,例如观察小灯闪烁、变换开发板姿态及改变外扩引脚的连接情况,这些都需要读者自己操作体会。如果你手头上有一块FRDM-KL02Z开发板,那就赶快下载附件中的LiteFwLib_frdmkl02z固件库的代码来体验一下吧。同时也欢迎大家回帖提提建议。

使用特权

评论回复
5
Micachl|  楼主 | 2015-9-28 08:02 | 只看该作者
库的开发包

LiteFwLib_frdmkl02z_v0.9.zip

288.78 KB

使用特权

评论回复
6
axi_85| | 2016-4-7 09:41 | 只看该作者
谢谢分享~~~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

300

帖子

1

粉丝