stm32 i2c eeprom 24C02
来源:互联网 发布:破解路由器限速软件 编辑:程序博客网 时间:2024/04/29 11:51
电路图
相关文章:
http://blog.csdn.net/zhangxuechao_/article/details/74936798
举例
#define i2c_scl PBout(10)#define i2c_sda PBout(11)#define i2c_ack PBin(11)void I2C_init(){ GPIO_InitTypeDef gpio10 = { GPIO_Pin_10, GPIO_Speed_50MHz, GPIO_Mode_Out_PP }; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //时钟使能 GPIO_Init(GPIOB, &gpio10);}void I2C_in(){ GPIO_InitTypeDef gpio11 = { GPIO_Pin_11, GPIO_Speed_50MHz, GPIO_Mode_IPD }; GPIO_Init(GPIOB, &gpio11);}void I2C_out(){ GPIO_InitTypeDef gpio11 = { GPIO_Pin_11, GPIO_Speed_50MHz, GPIO_Mode_Out_PP }; GPIO_Init(GPIOB, &gpio11);}void I2C_start(){ I2C_out(); i2c_sda = 1; i2c_scl = 1; delay_us(5); i2c_sda = 0; delay_us(5); i2c_scl = 0;}void I2C_stop(){ I2C_out(); i2c_sda = 0; i2c_scl = 1; delay_us(5); i2c_sda = 1; delay_us(5); i2c_scl = 0;}void I2C_ack(u8 ack){ i2c_scl = 0; //必须的 I2C_out(); i2c_sda = ack; delay_us(2); i2c_scl = 1; delay_us(5); i2c_scl = 0;}u8 I2C_wait_ack(){ u8 flag = 0; I2C_in(); i2c_scl = 1; delay_us(2); while(i2c_ack == 1) { flag++; if(flag > 250) { return 1; } } i2c_scl = 0; return 0;}void I2C_send_byte(u8 data){ u8 i = 0; I2C_out(); i2c_scl = 0; for(i = 0; i < 8; i++) { if((data & 0x80) > 0) i2c_sda = 1; else i2c_sda = 0; data <<= 1; delay_us(2); i2c_scl = 1; delay_us(2); i2c_scl = 0; delay_us(2); }}u8 I2C_recv_byte(){ u8 i = 0; u8 data; I2C_in(); for(i = 0; i < 8; i++) { i2c_scl = 0; delay_us(2); i2c_scl = 1; delay_us(2); data <<= 1; data |= i2c_ack; delay_us(2); } I2C_ack(0); return data;}void at24c02Write(u8 addr, u8 d){ I2C_start(); I2C_send_byte(0xa0); I2C_wait_ack(); I2C_send_byte(addr); I2C_wait_ack(); I2C_send_byte(d); I2C_wait_ack(); I2C_stop(); delay_ms(10);}u8 at24c02Read(u8 addr){ u8 d = 0; I2C_start(); I2C_send_byte(0xa0); I2C_wait_ack(); I2C_send_byte(addr); I2C_wait_ack(); I2C_start(); I2C_send_byte(0xa1); I2C_wait_ack(); d = I2C_recv_byte(); I2C_stop(); return d; }void at24c02Read_buf(u8 *buf, u8 addr, u16 num){ u8 i = 0; for(i = 0; i < num; i++) { buf[i] = at24c02Read(addr + i); }}void at24c02Write_buf(u8 *buf, u8 addr, u16 num){ u8 i = 0; for(i = 0; i < num; i++) { at24c02Write(addr + i, buf[i]); }}
阅读全文
1 0
- stm32 i2c eeprom 24C02
- STM32作为主机I2C,读写24C02 EEPROM
- STM32作为主机I2C,读写24C02 EEPROM
- STM32 24C02函数 I2C例程 非STM32库方式
- STM32 24C02函数 I2C例程 非STM32库方式
- STM32?I2C-EEPROM
- STM32的I2C-EEPROM
- 单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
- EEPROM实验(24C02)
- I2C之24c02
- 【连载】【STM32神舟III号实验例程】EEPROM 24C02工程实验(实验九)
- STM32 硬件I2C EEPROM命令解析
- R6 STM32 I2C—读写EEPROM
- R6 STM32 I2C—读写EEPROM
- stm32F103模拟I2C读写24c02
- stm32F103模拟I2C读写24c02
- stm32F103模拟I2C读写24c02
- STM32读写24C02遇到的问题
- C++多态的实现原理
- Python环境变量设置
- 用文件输入输出提交
- php利用mkdir创建多级目录
- aOFFICER: Adaptive OpenFlow Rules Placement
- stm32 i2c eeprom 24C02
- android系统声音调节
- 【jzoj5285】【NOIP提高组模拟赛A组8.16】【排序】
- Android开发 Apk打包之后百度地图不显示的原因以及解决方法
- 设置wlan 和以太网 ip 的bat 脚本
- android 数字签名
- Network POJ
- Mybatis简单操作
- C# 调用 C dll char* callback 设置回调函数不定参数