stm32 i2c eeprom 24C02 客官°小女子只卖身不卖艺 2022-06-10 09:51 123阅读 0赞 **电路图** ![1][] ![2][] `相关文章:`[http://blog.csdn.net/zhangxuechao\_/article/details/74936798][http_blog.csdn.net_zhangxuechao_article_details_74936798] ![2][2 1] **举例** #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]: /images/20220610/11ae4169d14341838e1592bb0c83aa45.png [2]: /images/20220610/996b956956eb4f4e822810dba13ad31e.png [http_blog.csdn.net_zhangxuechao_article_details_74936798]: http://blog.csdn.net/zhangxuechao_/article/details/74936798 [2 1]: /images/20220610/7320b438e2c64895ad3fcd6becc53572.png
还没有评论,来说两句吧...