STM32的硬件I2C与AT24C16
刚学STM32的时候就听闻STM32的硬件I2C存在重大bug,会导致运行卡死在等待ACK的过程中,所以一直以来对其避而远之,转而以模拟I2C取代之。最近这段时间一直在用STM32 CubeMX,图形化设置界面屡试不爽,连USB这种复杂外设都能轻易完成初始化,想来I2C还算是比较简单的,而硬件I2C的时序又比较准,无论成败,还是值得一试的。为了简单起见,就先用AT24C64这种最基础的IIC设备进行测试。
CubeMX的配置
下面这些是我修改过的地方,只要注意I2C和系统时钟等基础配置即可,不想说太多,以图为言
AT24C64的自制库
AT24C64.c
#include "AT24C64.h"
#include "i2c.h"void AT24CXX_Write(u16 reg_address,u8 data)
{static HAL_StatusTypeDef i;i = HAL_I2C_Mem_Write(&hi2c1,AT24CXX_DEV_ADDRESS,reg_address,I2C_MEMADD_SIZE_16BIT,&data,1,100);AT24CXX_DELAY_MS(5); //AT24C64的最长写入时间是5ms
}u8 AT24CXX_Read(u16 reg_address)
{u8 data = 0;u8 temp[2];temp[0] = reg_address>>8;temp[1] = reg_address;//HAL_I2C_Master_Transmit(&hi2c1,AT24CXX,temp,2,100);//HAL_I2C_Master_Receive(&hi2c1,AT24CXX,&data,1,100);HAL_I2C_Mem_Read(&hi2c1,AT24CXX_DEV_ADDRESS,reg_address,I2C_MEMADD_SIZE_16BIT,&data,2,100);return data;
}
AT24C64.h
/* * File: AT24C64.h* Author: Administrator* AT24C64相关函数,需要制定IIC基本函数* Created on 2015年8月7日, 下午3:52*/#ifndef __AT24C64_H
#define __AT24C64_H#include "bsp.h"#define AT24CXX_DEV_ADDRESS 0xA0
#define AT24CXX_DELAY_MS osDelaytypedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;void AT24CXX_Write(u16 reg_address,u8 data);
u8 AT24CXX_Read(u16 reg_address);#endif /* __AT24C64_H */
值得注意的是AT24C64的地址是16位的,并且内部写EPPROM空间的时间最长为5ms,之前被这里坑了很久,差点以为I2C的库函数存在问题,所以上方的代码中尝试了多种读取参数的方式。
主循环代码
/* Infinite loop */for(;;){AT24CXX_Write(0x0001,0xA2);osDelay(4);i = AT24CXX_Read(0x0001);i = i+1;if(0 != i) usb_printf((const char*)&i);osDelay(100);}
USB转串口的数据输出如下
STM32的硬件I2C与AT24C16相关推荐
- STM32单片机硬件I2C读取AHT10温湿度传感器数据
STM32使用硬件IIC读取AHT10温湿度传感器的数据并显示在0.96寸OLED屏上. 我用的单片机是STM32F103C8T6,程序用的是ST标准库写的. STM32使用硬件I2C读取SHTC3温 ...
- STM32单片机硬件I2C驱动程序(查询方式)
本文章原始地址:http://feotech.com/?p=69 本程序主要用于驱动STM32单片机芯片的硬件I2C寄存器,实现通过使用芯片自带的I2C寄存器进行数据的发送与接收. 本例程中采用I2C ...
- 关于 STM32 的硬件I2C
首先转两个帖子 http://blog.csdn.net/mcu_hong/article/details/8149311 http://bbs.21ic.com/icview-184741-1-1. ...
- STM32单片机硬件I2C驱动程序(软件轮询方式)---摘自:FeoTech
感谢原作者:FeoTech 原文网址:http://feotech.com/?p=69 本程序主要用于驱动STM32单片机芯片的硬件I2C寄存器,实现通过使用芯片自带的I2C寄存器进行数据的发送与 ...
- STM32通信硬件 I2C
20.1关于 I2C STM32F103系列的I²C控制器,可作为通信主机或从机,因此有四种工作模式可选择:主机发送模式.主机接收模式.从机发送模式.从机接收模式. 传输速度上,支持标准模式(Stan ...
- 关于STM32使用硬件i2c读写AT24C256实验遇到的问题
硬件环境:XNUCLEO开发板(STM32F411RCT6芯片).MiniSTM32 V3.41开发板(STM32F103RCT6芯片) 软件环境:IAR for ARM 8.30.1.Keil5 现 ...
- STM32 HAL 硬件I2C HTU21D
主要用到stm32自带的库函数,因为库函数没有等待时间,所以不兼容,把程序拷贝出来重写,"I2C_RequestMemoryRead"函数的 "/* Generate R ...
- STM32硬件I2C的一点心得(AT24C32C和AT24C64C)
前言 网上有些人说STM32的硬件I2C使用起来有问题,我用起来一点问题都没有,下面大致说一下最近做这个的心得 CubeMX设置 软件采用最新的CubeMX和SDK生成,芯片型号STM32F107RC ...
- stm32硬件I2C测试例程,亲测可用
对于stm32的硬件I2C确实有不尽人意的地方.但是还是可以实现的,毕竟使用stm32的硬件I2C确实比使用IO口来模拟简单的多.下面的程序代码是使用stm32F03ZET6的I2C1(PB6,PB7 ...
最新文章
- 商汤提基于贪心超网络的One-Shot NAS,达到最新SOTA | CVPR 2020
- UA MATH565C 随机微分方程III Ito积分的构造
- java画个半径为1地圆_java - 绘制一个半径为圆的圆并围绕边缘指向 - 堆栈内存溢出...
- 使用ML.NET实现情感分析[新手篇]
- html首页 slider图片切换效果,jQuery插件Slider Revolution实现响应动画滑动图片切换效果...
- Java命令行界面(第30部分):观察
- python高手之路第三版_《Python高手之路(第3版)》——1.3 版本编号-阿里云开发者社区...
- 逻辑人渴望控制那些让他们感兴趣的东西
- android基础开发 书,Android 开发基础
- python字符串查找的四种方法_Python中的字符串查找操作方法总结
- Hibernate与MyBatis的区别
- 【sql server】“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行“ 解决方案
- python装饰器 廖雪峰_python装饰器的一个妙用
- PHP二维数组:统计某个键名的相同键值个数
- 卧槽!华为工程师总结的Java笔记,太优秀了!
- 2019icpc计算机程序设计大赛,关于开展西安理工大学2019年程序设计竞赛暨ACM-ICPC大赛选拔赛的通知...
- HTML css把图片变圆,HTML+CSS:圆形和圆角图片格式
- 一键激活windows系统与office(绿色无捆绑装机员激活工具)
- Window平台Git-Bash的主题配置
- 终端模拟器编译c语言,开源一个Flutter编写的完整终端模拟器