|
这段时间一直在学习cube,研究了关于stmcu上的硬件I2C配置问题,分享一下给各位需要的朋友。 主要功能:实现将一个TX_buf[]存入AT24C64指定地址,然后读出你想读出的数据存入RX_buf[]。: Z0 U/ u/ c1 ^$ a6 [ 从用户手册可以查到硬件I2C有轮询、中断、DMA三种模式,本实验使用轮训方式。 主函数中配置完成后,加一个小小的HAL延时(一定要有!不加貌似会出现读出乱码),然后往下写。0 \! l/ b- N: Q; P6 ~ HAL_I2C_Mem_Write(DevAddress,MemAddress,MemAddSize,TX_buf,Size,Timeout),在主函数初始化后,调用此函数。, K$ @: x; h9 E' Y* | 部分参数说明:DevAddress是设备地址设为0xA0(4BIT器件码+3位(A2A1A0)片选地址码+1BIT读写); MemAddress是存储器内部写入的起始地址设置为0x00(也可设置为其他,范围为:0x0000---0x1fffh);; K0 m, L6 o$ V. k& h MemAddSize是存储器内部地址大小,这里设置为0XFF(<0x1fffh)。 然后加一个HAL延时(一定要有,貌似没有就没办法读取!)。 接着写HAL_I2C_Mem_read(DevAddress,MemAddress,MemAddSize,RX_buf,Size,Timeout)。 这样,一个简单的写入->读出过程就完成了! 关于cube的设置问题:由于硬件上,我的A2A1A0均接地,所以在salve feature->primary slave address中设置为0。4 r$ n. g8 i; h2 _1 d- \, w 1 [ I3 O9 Z# y" m# r4 L + _) A7 l% c, @8 K: s! U 2 J9 L) x/ l9 u ! K; x' Y2 t+ O8 H0 [! N' r3 y |
| 还在用标准库,毕竟比较熟悉。 |
| 学习了 感谢楼主 |
| 感谢楼主 |
| 持续观望中,感谢楼主 |
多谢分享心得,学习了
|
| 不错。。谢谢楼主分享!!! |
| 楼主,方便看看我的i2c在哪里出的问题么。https://www.stmcu.org.cn/module/forum/thread-612369-1-1.html |
微信公众号
手机版