jicheng0622

【原创】FRDM-K22F基于Kinetis SDK1.1的I2C通信HAL层例程

0
阅读(3084) 评论(6)

    羊年伊始,假期结束,重新回到了工作岗位。回味过去的一整年,成长不少,收获良多,感恩身边的人。展望新的一年征程,充满未知和挑战,收拾心情,整装待发,奋斗ing…

    闲话不多说了,直接说正事吧。飞思卡尔去年终于推出了好多人都翘首以盼的底层驱动库Kinetis SDK,看名字就知道了,这个驱动库主要是针对飞思卡尔ARM家族Kinetis系列的了,目前已经更新到v1.1版本了。针对该驱动库的具体介绍在这篇文章里我就不赘述了,建议大家直接到飞思卡尔的官网去仔细查阅和下载,其官方链接为http://www.freescale.com/zh-Hans/webapp/sps/site/prod_summary.jsp?code=KINETIS_SDK&fsrch=1&sr=3&pageNum=1&uc=true&lang_cd=zh-Hans,当然,刚开始支持的芯片系列有限,不过随着版本的不多更新,会有越来越多的芯片被添加进来。

    本篇文章的主要目的是给出一个基于SDK HAL层的I2C通信例程供参考移植,毕竟用到I2C的地方还是比较多的,像外扩EEPROM,电源管理芯片等都需要与主MCU进行I2C通信。所以那怎样基于SDK编写HAL层的I2C驱动代码呢,虽然SDK里面自带Demo例程里已经有I2C的Driver层驱动了,但是Drvier层有其自身局限性(实现的形式和功能比较固定,一般作为演示用例还好),而HAL层则灵活的多(HAL层实际上就是对底层寄存器进行了封装,屏蔽了硬件的兼容问题),使用HAL层可以最大程度的利用外设模块。FRDM-K22板子上自带了一个飞思卡尔自家的6轴传感器E-Compass(3轴加速度+3轴地磁),通信接口为I2C和SPI接口可选,本篇博客既然以I2C为例介绍,所以就选择I2C接口,板子上已经将该传感器与MCU连好了,并且加了上拉电阻,所以硬件工作无需额外了,只需要在软件上下功夫就可以了,下面我简单介绍下开发平台和开发环境:

开发平台:FRDM-K22F,板载传感器的从机地址为0x1C,通信波特率为90kbps

开发环境:IAR 7.3

例程模板:KSDK_1.1.0\demos\hello_world\iar\frdmk22f

需要提一下的是,我写的代码是在SDK1.1中的Hello world例程的基础上修改的,修改后的代码我已上传到博客最后的附件中,将附件中.c文件的所有内容覆盖原来的在SDK1.1安装目录下hello_world例程的hello_world.c文件中的所有内容即可,然后编译并下载到板子上,运行PC端的串口调试助手或者超级终端(串口波特率为115200),复位MCU,此时会打印出"Hello World!”,然后向板子发送任意一个字符即可输出板载传感器6个轴向的数据,如下图:


好了,就说到这了,由于附件的代码里我已经都做了相应的注释,所以就不在博客里一一去剖析解释了(实在是有点麻烦,呵呵),我相信看完代码就都明白了,呵呵。

未完待续~

附件为源代码i2c_test.zip

  1. @qiqiyexue

    方便告诉,此文转载到哪里去了吗?

  2. @jicheng0622


    恩  谢谢  会附上出处及链接 还有 原作者

  3. @木易

    恩  会的   尊重原创

  4. @qiqiyexue
    嗯,注明出处和原作者吧~
  5. @qiqiyexue

    希望注明出处,加上原链接。
  6. Kinetis SDK, 可以转载博主的文章么? 会注明出处,原作者的。