在线时间954 小时
UID336767
注册时间2011-12-29
NXP金币518
TA的每日心情 | 开心 2018-7-23 21:04 |
---|
签到天数: 103 天 [LV.6]常住居民II
金牌会员
- 积分
- 15250
- 最后登录
- 1970-1-1
|
接着之前的继续学习,今天分享一下I2C的基础内容。
开发环境使用的依然是:CW10.6+PE+FRDM-KL02Z+MiniDock
实现功能是使用CW10.6对MiniDock上的AT24C02做简单的读写工作,来学习FRDM的I2C总线的在CW下的编程。
1、老规矩,先来分析一下电路:
通过下面的电路,我们可以清楚的看到AT24C02使用的引脚为PTB3和PTB4,I2C0模块!
2、建立工程的过程不说了,参见:CW10.6开发FRDM-KL02Z
3、添加如下图的PE工程的I2C组件。
4、配置I2C模块信息如下图:
5、下面是对I2C的引脚和波特率等信息进行配置,时钟速度选择100K
6、开启初始化代码使能
7、点击生成代码按钮,生成工程代码
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;
10、下面是接收过程,与发送相似。
11、下面是当接收数据成功,置标志为2
12、当发送成功,置标志为1
13、编译调试,进入调试环境
14、在调试过程中想看看receive_Buffer这个全局变量,点击下图按钮添加观察全局变量。
15、选择全局变量
16、开始时,可以看到接收数据全为0
17、运行后可以看到,接收数据正确!
18、下面是用逻辑分析仪抓的发送时序
19、下面是接收时序
20、通过上面的练习,可以看到I2C模块的基本使用方法,虽然比之前用KSDK库稍微麻烦些,但是具有更大的灵活性!
上面是I2C的基础开发笔记,欢迎大家交流!
|
评分
-
查看全部评分
|