STM32/STM8技术william hill官网
登录
直播中
倒骑扫把的巫师
12年用户
38经验值
擅长:基础元器件 数字及可编程逻辑
私信
关注
[问答]
求助一个I2C问题
开启该帖子的消息推送
我写了一个I2C读取的函数,用最简单的查询,首先我已经证明该函数是可以正常运行,然后给他改了一下,添加了一个变量I2C_TypeDef* I2Cx,想让他可以被任何I2C口读取。然后我把I2Cx赋值为I2C1(PS:此函数在I2C1下已经可以可以使用),就无法运行,好像I2Cx根本没有被替换成I2C1,求大神指教,代码如下
void I2C_Query_Read(I2C_TypeDef* I2Cx,u8 IMU_Address,u8 Address,u8 *IMU_Data,u8 NumByteToRead)
{
/*I2C_TypeDef* I2Cx;
#if USED_I2C1
I2Cx = I2C1;
#endif */
/********if I2C BUS busy,wait*********/
ti
me_Out = Time_limit;
while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY))
(Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/**********start I2C*********/
I2C_GenerateSTART(I2Cx, ENABLE);
/***********check the EV5********/
Time_Out = Time_limit;
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT ))
(Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/************send Address to I2C*******/
I2C_Send7bitAddress(I2Cx,IMU_Address, I2C_Direction_Transmitter);
/***********check EV6***********/
Time_Out = Time_limit;
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
(Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
I2C_Cmd(I2Cx, ENABLE);
/**********send IMU's register Address************/
I2C_SendData(I2Cx, Address);
/************clean EV8*****************************/
Time_Out = Time_limit;
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_BYTE_TRANSMITTED ))
(Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/***********Start I2C again*********/
I2C_GenerateSTART(I2Cx, ENABLE);
Time_Out = Time_limit;
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT ))
(Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
I2C_Send7bitAddress(I2Cx,IMU_Address, I2C_Direction_Receiver);
Time_Out = Time_limit;
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
(Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/* While there is data to be read */
while(NumByteToRead)
{
if(NumByteToRead == 1)
{
/* Disable Acknowledgement */
I2C_AcknowledgeConfig(I2Cx, DISABLE);
/* Send STOP Condition */
I2C_GenerateSTOP(I2Cx, ENABLE);
}
/* Test on EV7 and clear it */
if(I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED))
{
/* Read a byte from the MPU */
*IMU_Data = I2C_ReceiveData(I2Cx);
/* Point to the next location where the byte read will be saved */
IMU_Data++;
/* Decrement the read bytes counter */
NumByteToRead--;
}
}
/* Enable Acknowledgement to be ready for another reception */
I2C_AcknowledgeConfig(I2Cx, ENABLE);
}
回帖
(2)
超酷小子
2014-9-11 16:18:44
那要看看你的I2C_TypeDef这个里面是怎么写的
那要看看你的I2C_TypeDef这个里面是怎么写的
举报
taikong1
2014-9-12 18:09:29
是不是USED_I2C1这个没定义啊
是不是USED_I2C1这个没定义啊
举报
更多回帖
rotate(-90deg);
回复
相关问答
新手
求助
如何去实现
I2C
通信单个字节读取数据呢
2021-12-02
961
I2C
主组件可用吗?
2019-05-30
1335
I2C
2018-06-24
2798
i2c
不通的原因是什么
2021-03-02
7941
一
个
i2c
主设备fx
2
lp和fx
2
lp18可以驱动多少
个
i2c
从设备?
2018-10-26
1684
如何调试
I2C
和RTC
2019-03-18
2130
如何做
一个
简单的
I2C
驱动程序并对其进行测试
2019-07-19
3120
怎么使用GPIO引脚连接其他
I2C
端口?
2019-05-13
1448
怎么在同
一个
I2C
总线上连接3
个
LSM303AGR
2019-05-30
1855
问各位
一
个
i2c
时序问题
2020-04-09
2105
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分