完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
安装程序:SDK 版本 2.0.0
硬件:ESP-12E 我已连接DS3231 RTC模块http://www.ebay.in/itm/252641600523使用 ESP-12E 如下所示 法典:全选 ESP-VCC -> DS3231-VCC ESP-GND -> DS3231-GND ESP-GPIO2 -> DS3231-SDA ESP-GPIO14 -> DS3231-SCL 我希望我的连接是正确的,因为 i2c_master.h 法典:全选 #define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U #define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U #define I2C_MASTER_SDA_GPIO 2 #define I2C_MASTER_SCL_GPIO 14 #define I2C_MASTER_SDA_FUNC FUNC_GPIO2 #define I2C_MASTER_SCL_FUNC FUNC_GPIO14C FUNC_GPIO14 我在 user_main.c 中有以下代码。 法典:全选 void user_rf_pre_init(void) { } uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(无效) { enum flash_size_map size_map = system_get_flash_size_map(); uint32 rf_cal_sec = 0; switch (size_map) { case FLASH_SIZE_4M_MAP_256_256: rf_cal_sec = 128 - 8; break; case FLASH_SIZE_8M_MAP_512_512: rf_cal_sec = 256 - 5; break; case FLASH_SIZE_16M_MAP_512_512: case FLASH_SIZE_16M_MAP_1024_1024: rf_cal_sec = 512 - 5; break; case FLASH_SIZE_32M_MAP_512_512: case FLASH_SIZE_32M_MAP_1024_1024: rf_cal_sec = 1024 - 5; break; default: rf_cal_sec = 0; break; } return rf_cal_sec; } /****************************************************************************** * FunctionName : user_init *******************************************************************************/ void user_init(void) { uart_reattach(); os_printf("rnrn============SDK version:%s============rn", system_get_sdk_version()); i2c_master_gpio_init(); i2c_master_init(); i2c_master_start(); // write address & direction i2c_master_writeByte((uint8)(0x68 << 1)); if (!i2c_master_checkAck()) { os_printf("在 i2C 上写入 DS3231 时出错rn"); i2c_master_stop(); return; } i2c_master_stop(); } 我正在打印 在 i2C 上写入 DS3231 时出错这意味着 i2c_master_checkAck() 是 returnnig false。 我可以请求专家告诉我为什么此代码不起作用。 |
|
相关推荐
1个回答
|
|
DS3231 RTC模块的I2C通信失败可能有以下几个原因:
1. 连接问题:请确保您的连接是正确的,根据您的描述,您的连接应该是正确的。但是,建议您再次检查线路和焊点,确保没有松动或短路。 2. 电源问题:确保DS3231模块和ESP-12E模块的电源电压匹配。DS3231通常使用3.3V电源,而ESP-12E可以使用3.3V或5V电源。如果电源电压不匹配,可能会导致通信失败。 3. 引脚配置问题:您提供的代码片段显示了I2C引脚的配置。请确保这些配置与您的硬件连接相匹配。如果引脚配置错误,可能会导致通信失败。 4. 软件问题:请检查您的代码是否正确初始化了I2C接口,并使用了正确的时钟频率。如果时钟频率设置不正确,可能会导致通信失败。 5. 模块故障:如果以上原因都排除了,可能是DS3231模块本身存在问题。您可以尝试更换一个模块进行测试。 解决方法: 1. 重新检查连接和焊点,确保没有松动或短路。 2. 确保电源电压匹配,如果需要,使用电压转换器。 3. 检查引脚配置代码,确保与硬件连接相匹配。 4. 检查I2C初始化代码,确保使用了正确的时钟频率。 5. 如果可能,请更换DS3231模块进行测试。 6. 您还可以尝试使用其他库(如RTClib)来简化I2C通信的实现。 7. 如果问题仍然存在,您可以尝试在论坛或社区寻求帮助,可能有其他用户遇到过类似的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
968 浏览 1 评论
553浏览 6评论
463浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
447浏览 5评论
448浏览 4评论
418浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 17:23 , Processed in 0.894198 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号