完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用stm8s105k4的IO模拟i2c协议,与MS9282通信。stm8是主机,MS9282是从机。
主机对从机读,能够从MS9282的寄存器读到数据,但是却不能对MS9282写数据,求大神指点。 另附代码: void Write_16(ui addr,ui reg,ui data) { uc reg_h,reg_l,data_h,data_l; I2C_Start(); I2C_Write(addr); if(I2C_GetAck()) { I2C_Stop(); } reg_l=reg 0xff; I2C_Write(reg_l); if(I2C_GetAck()) { I2C_Stop(); } reg_h=reg>>8; I2C_Write(reg_h); if(I2C_GetAck()) { I2C_Stop(); } I2C_Start(); I2C_Write(addr); if(I2C_GetAck()) { I2C_Stop(); } data_l=data 0xff; I2C_Write(data_l); if(I2C_GetAck()) { I2C_Stop(); } data_h=data>>8; I2C_Write(data_h); if(I2C_GetAck()) { I2C_Stop(); } I2C_Stop(); } ui Read_16(ui addr,ui reg) { ui dat; uc reg_h,reg_l,data_h,data_l; I2C_Start(); I2C_Write(addr); if(I2C_GetAck()) { I2C_Stop(); } reg_l=reg 0xff; I2C_Write(reg_l); if(I2C_GetAck()) { I2C_Stop(); } reg_h=reg>>8; I2C_Write(reg_h); if(I2C_GetAck()) { I2C_Stop(); } I2C_Start(); I2C_Write(addr |=0x01); if(I2C_GetAck()) { I2C_Stop(); } data_l=I2C_Read(); I2C_PutAck(0); data_h=I2C_Read(); I2C_PutAck(1); I2C_Stop(); dat=(data_h<<8)|data_l; return dat; } |
|
相关推荐
1个回答
|
|
从您提供的代码片段来看,您正在尝试使用STM8S105K4的IO模拟I2C协议与MS9282通信。您提到可以读取MS9282的寄存器数据,但是无法向MS9282写入数据。为了解决这个问题,我们需要检查以下几个方面:
1. 确保I2C协议实现正确:首先,我们需要确保您模拟的I2C协议是正确的。这包括正确的起始条件、地址传输、写入数据、应答位和停止条件。请检查您的I2C_Start()、I2C_Write()和I2C_Stop()函数是否正确实现了I2C协议。 2. 检查MS9282的地址和寄存器:确保您使用的MS9282设备地址和寄存器地址是正确的。通常,I2C设备的地址和寄存器地址可以在其数据手册中找到。 3. 检查数据格式:确保您写入的数据格式符合MS9282的要求。例如,某些设备可能需要特定的数据格式,如高位字节在前或低位字节在前。 4. 检查时序问题:I2C通信对时序有严格的要求。请确保您的STM8S105K4在发送和接收数据时满足I2C协议的时序要求。 5. 检查硬件连接:确保您的STM8S105K4与MS9282之间的硬件连接正确。检查I2C数据线(SDA和SCL)是否正确连接,并且没有短路或断路。 6. 检查STM8S105K4的IO配置:确保您的STM8S105K4的IO引脚已正确配置为I2C模式。这可能需要设置引脚的输入/输出方向、上拉/下拉电阻等。 7. 检查MS9282的配置:确保MS9282已正确配置为从机模式,并且其I2C通信已启用。 8. 使用调试工具:如果可能的话,使用逻辑分析仪或其他调试工具来监视I2C通信。这可以帮助您更准确地找出问题所在。 9. 检查代码逻辑:仔细检查您的Write_16()函数的逻辑,确保在写入数据时没有逻辑错误。 10. 参考示例代码:查找MS9282或STM8S105K4的示例代码,以确保您的实现与官方推荐的实现一致。 通过检查以上几个方面,您应该能够找到导致无法向MS9282写入数据的原因,并采取相应的措施进行修复。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:29 , Processed in 0.886114 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号