打印
[Kinetis]

【FRDM-KL02Z开发笔记】调试I2C接口

[复制链接]
1571|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lovecat2015|  楼主 | 2015-12-1 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发环境使用的依然是:CW10.6+PE+FRDM-KL02Z+MiniDock
实现功能是使用CW10.6对MiniDock上的AT24C02做简单的读写工作,来学习FRDM的I2C总线的在CW下的编程。


1、老规矩,先来分析一下电路:
通过下面的电路,我们可以清楚的看到AT24C02使用的引脚为PTB3和PTB4,I2C0模块!




2、建立工程的过程不说了,参见:CW10.6开发FRDM-KL02Z

相关帖子

沙发
lovecat2015|  楼主 | 2015-12-1 20:53 | 只看该作者
3、添加如下图的PE工程的I2C组件。


4、配置I2C模块信息如下图:


5、下面是对I2C的引脚和波特率等信息进行配置,时钟速度选择100K


6、开启初始化代码使能


7、点击生成代码按钮,生成工程代码



使用特权

评论回复
板凳
lovecat2015|  楼主 | 2015-12-1 20:54 | 只看该作者
8、在主函数部分定义变量:
uint8_t page0[9] = {0, 1, 2, 3, 4, 5, 6 ,7, 8};//测试数据,page[0]是写的地址,后面8个数据是写入的数据,因此测试第0页内容
uint8_t receive_Buffer[8] = {0};           接收缓冲区
uint8_t address = 0;                   读写地址变量
int16_t send_Number = 0, receive_Number = 0;           发送接收数据个数变量
uint8_t flag = 0;        是否完成标志


9、下面是向AT24C02写8个数据的程序
AT24C02_I2C0_SelectSlave(AT24C02_ADDR);      设置从机地址
  while (AT24C02_I2C0_CheckBus() == AT24C02_I2C0_BUSY);              判断总线是否繁忙
  AT24C02_I2C0_SendBlock(page0, 9, &send_Number);              发送数据块
  while (flag != 1);                 等待发送完成
  flag = 0;



使用特权

评论回复
地板
lovecat2015|  楼主 | 2015-12-1 20:55 | 只看该作者
10、下面是接收过程,与发送相似。


11、下面是当接收数据成功,置标志为2


12、当发送成功,置标志为1


13、编译调试,进入调试环境


14、在调试过程中想看看receive_Buffer这个全局变量,点击下图按钮添加观察全局变量。



使用特权

评论回复
5
lovecat2015|  楼主 | 2015-12-1 20:58 | 只看该作者
15、选择全局变量


16、开始时,可以看到接收数据全为0


17、运行后可以看到,接收数据正确!


18、下面是用逻辑分析仪抓的发送时序


19、下面是接收时序


20、通过上面的练习,可以看到I2C模块的基本使用方法,虽然比之前用KSDK库稍微麻烦些,但是具有更大的灵活性!

使用特权

评论回复
6
64xiaodian| | 2016-1-25 11:35 | 只看该作者
正在学习KL02,谢谢楼主分享

使用特权

评论回复
7
dentsgot| | 2016-1-25 20:49 | 只看该作者
我想请教一下,i2c这两个上拉电阻该怎么选择啊

使用特权

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

本版积分规则

80

主题

816

帖子

0

粉丝