STM32F042XX模拟I2C总线与AT24C512通信程序直接使用

#ifndef __DIRVER_I2C_H
#define __DIRVER_I2C_H
#include "stdint.h"
#include "stm32f0xx.h"
/************************* I2C 硬件相关定义 *************************/
#define  I2C_SCL_H         GPIOA->BSRR = GPIO_Pin_0 
#define  I2C_SCL_L         GPIOA->BRR  = GPIO_Pin_0

#define  I2C_SDA_H         GPIOA->BSRR = GPIO_Pin_1
#define  I2C_SDA_L         GPIOA->BRR  = GPIO_Pin_1

#define I2C_SDA_read        (GPIOA->IDR  & GPIO_Pin_1)
#define ACK (0)
#define NACK (1)

#define EEPROM_DEV_ADDR     0xA0
#define EEPROM_WR           0x00
#define EEPROM_RD                     0x01
#define EEPROM_WORD_ADDR_SIZE  0x10
extern void EEPROM_WriteByte(uint16_t addr, uint8_t data);
extern void EEPROM_ReadByte(uint16_t addr, uint8_t *pdata);
extern void EEPROM_Write_NBytes(uint16_t addr, uint8_t *pdata, uint16_t sz);
extern void EEPROM_Read_NBytes(uint16_t addr, uint8_t *pdata, uint16_t sz);
extern void AT24C04_I2C_Init(void);
#endif

//dirver_i2c.c

#include "stm32f0xx.h"
#include "dirver_i2c.h"
#include "delay.h"
void I2C_Delay(void )
{
    delay_us(5);
}
/*
* 函数名:void I2C_Init(void)
* 输入参数:
* 输出参数:无
* 返回值:无
* 函数作用:初始化模拟 I2C 的引脚为输出状态且 SCL/SDA 都初始为高电平
*/
void AT24C04_I2C_Init(void) {
GPIO_InitTypeDef  GPIO_InitStructure; 

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    
  /* Configure I2C1 pins: SCL and SDA */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//置为开漏,外部上拉。设置为推挽可能会有问题
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值