OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6489|回复: 10

SM5852微压传感器 ,IIC写器件地址时得不到应答是怎么回事呀?

[复制链接]

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-9-20
在线时间
1 小时
发表于 2015-11-10 16:33:30 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "SM5852.h" unsigned char test1; /***************************************************************************** //函 数: IICDelay //功 能: 本文件内的延时程序调用 *****************************************************************************/ void IICDelay(volatile unsigned char DelayCount) { while(DelayCount --) { ; //CLEARDOG; } } /***************************************************************************** //函 数: I2C_Start //功 能: IIC驱动程序之起始位 *****************************************************************************/ void I2C_Start(void) { Sensor_SDA_OUT; Sensor_SDA = 1; Sensor_SCL = 1; IICDelay(5); Sensor_SDA = 0; IICDelay(5); Sensor_SCL = 0; } /***************************************************************************** //函 数: I2C_Stop //功 能: IIC驱动程序之停止位 *****************************************************************************/ void I2C_Stop(void) { Sensor_SDA_OUT; Sensor_SCL = 0; Sensor_SDA = 0; IICDelay(5); Sensor_SCL = 1; IICDelay(5); Sensor_SDA = 1; IICDelay(5); } /***************************************************************************** //函 数: I2C_WaitACK //功 能: IIC驱动程序之等待ACK *****************************************************************************/ void I2C_WaitACK(void) { unsigned char errtime; errtime = 40; Sensor_SDA_OUT; Sensor_SDA = 1; IICDelay(10); //读ACK Sensor_SCL = 1; IICDelay(10); Sensor_SDA_IN; while(Sensor_SDA) { errtime --; if(!errtime) { I2C_Stop(); test1 = 4; break; } } Sensor_SCL = 0; Sensor_SDA_OUT; IICDelay(5); } /***************************************************************************** //函 数: I2C_SndAck //功 能: IIC驱动程序之主机发送应答 *****************************************************************************/ void I2C_SndAck(void) { Sensor_SDA_OUT; Sensor_SDA = 0; IICDelay(5); Sensor_SCL = 1; IICDelay(5); Sensor_SCL = 0; } /***************************************************************************** //函 数: I2C_SndNoAck //功 能: IIC驱动程序之主机发送非应答 *****************************************************************************/ void I2C_SndNoAck(void) { Sensor_SDA_OUT; Sensor_SDA=1; IICDelay(5); Sensor_SCL=1; IICDelay(5); Sensor_SCL=0; } /***************************************************************************** //函 数: I2C_WriteByte //功 能: IIC写字节 *****************************************************************************/ void I2C_WriteByte(unsigned char data) { unsigned char i; Sensor_SDA_OUT; for(i = 0; i < 8; i++)//以最高为传输数据 { if(data & 0x80) { Sensor_SDA = 1; } else { Sensor_SDA = 0; } data <<= 1; Sensor_SCL = 1; IICDelay(5); Sensor_SCL = 0; } I2C_WaitACK(); //如果通讯错误,将不能接收到ack } /***************************************************************************** //函 数: I2C_ReadByte //功 能: IIC读字节 *****************************************************************************/ unsigned char I2C_ReadByte(void) { unsigned char i,bytedata; Sensor_SDA_IN; for(i = 0; i < 8; i++)//以最高为传输数据 { Sensor_SCL = 1; bytedata <<= 1; bytedata |= Sensor_SDA; Sensor_SCL = 0; IICDelay(5); } Sensor_SDA_OUT; return(bytedata); } /***************************************************************************** //函 数: InitSensor //功 能: 初始化传感器 *****************************************************************************/ void InitSensor(void) { Sensor_SCL_OUT; //传感器时钟线 Sensor_SCL = 1; //传感器时钟线 Sensor_SDA_OUT; //传感器数据线 Sensor_SDA = 1; //传感器数据线 } /***************************************************************************** //函 数: Sensor_ReadOneByte //功 能: 从片内指定地址读一个字节数据 *****************************************************************************/ unsigned char Sensor_ReadOneByte(unsigned char RegAddr) { unsigned char mdata; I2C_Start(); I2C_WriteByte(ADDRESS_SM5852_WR); I2C_WriteByte(RegAddr); I2C_Start(); I2C_WriteByte(ADDRESS_SM5852_RE); mdata = I2C_ReadByte(); I2C_SndNoAck(); I2C_Stop(); //停止I2C IICDelay(100);//此处延时根据实际情况,如果不延时,可能会不正常 return(mdata); } /***************************************************************************** //函 数: Sensor_ReadMultiByte //功 能: 从片内指定地址读出多个字节的数据 *****************************************************************************/ void Sensor_ReadMultiByte(unsigned char ucStartAddress,volatile unsigned char *datebuffer,unsigned char ucByteCounter) { I2C_Start(); I2C_WriteByte(ADDRESS_SM5852_WR); I2C_WriteByte(ucStartAddress); I2C_Start(); I2C_WriteByte(ADDRESS_SM5852_RE); while(-- ucByteCounter) { *datebuffer ++= I2C_ReadByte(); I2C_SndAck(); } *datebuffer = I2C_ReadByte(); I2C_SndNoAck(); I2C_Stop(); IICDelay(200);//此处延时根据实际情况,如果不延时,可能会不正常 } [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-11-10 22:32:39 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-11-10 23:05:02 | 显示全部楼层
慢慢调试...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2013-6-5
在线时间
1 小时
发表于 2016-11-2 10:37:32 | 显示全部楼层
你写的地址是多少?
加油!
回复

使用道具 举报

8

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2014-7-4
在线时间
7 小时
发表于 2016-12-21 16:27:07 | 显示全部楼层
你好    你手里有SM5852的IIC手册吗  要是有我可以帮忙看看的
呵呵
回复

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-4-13
在线时间
12 小时
发表于 2017-6-30 14:56:09 | 显示全部楼层
qujian55 发表于 2016-11-2 10:37
你写的地址是多少?

你好,你的IIC从机地址找到了吗,是多少?求告知
回复

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-4-13
在线时间
12 小时
发表于 2017-6-30 14:58:24 | 显示全部楼层

你好,请问这个传感器挂在IIC上时,地址是多少?
回复

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-4-13
在线时间
12 小时
发表于 2017-7-4 11:30:14 | 显示全部楼层
我把0-255都试了一下,没一个能得到应答的。。。
回复

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-9-20
在线时间
1 小时
 楼主| 发表于 2017-7-20 14:20:08 | 显示全部楼层
调试OK,是配置的问题
回复

使用道具 举报

3

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-9-1
在线时间
53 小时
发表于 2018-2-5 10:30:04 | 显示全部楼层
地址95
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-1
在线时间
9 小时
发表于 2020-4-28 21:03:16 | 显示全部楼层
亲  你5852IIC有调试成功吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 08:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表