赞
踩
通过BSRR寄存器和BSR寄存器对端口输出数据寄存器ODR寄存器的某一个位独立设置或清楚,BSRR对应着库函数中的GPIO_SetBits函数而,BSR对应着库函数中的GPIO_ResetBits函数。
通过GPIOB->BSRR=GPIO_Pin_6即可将引脚PB6设置为1的逻辑状态。通过宏定义表示IO口的高低低电平。
I2C总线延迟
static void i2c_Delay(void)
{
uint8_t i;
for (i = 0; i < 10; i++);//通过具体的工作频率确定具体的时钟周期
}
void i2c_Start(void)
{
EEPROM_I2C_SDA_1();//SDA为高
EEPROM_I2C_SCL_1();//SCL为高
i2c_Delay();
EEPROM_I2C_SDA_0();//当SCL为高电平,SDA由高到低转换表示起始信号。
i2c_Delay();
EEPROM_I2C_SCL_0();
i2c_Delay();
}
void i2c_Stop(void)
{
EEPROM_I2C_SDA_0();//SDA为低
EEPROM_I2C_SCL_1();//SCL为高
i2c_Delay();
EEPROM_I2C_SDA_1();//SDA由低向高转换,SCL为高,表示结束信号
}
void i2c_SendByte(uint8_t _ucByte) { uint8_t i; for (i = 0; i < 8; i++)//0X80代表1000 0000 ,通过下面代码的左移和位与通过SDA总线将数据发送出去 //数据每次与操作,1000 0000 中只有1的与操作有效,通过循环移位将每次与的结果发送 { if (_ucByte & 0x80) { EEPROM_I2C_SDA_1(); } else { EEPROM_I2C_SDA_0(); } i2c_Delay(); EEPROM_I2C_SCL_1(); i2c_Delay(); EEPROM_I2C_SCL_0();//SCL由1到0,表示SDA数据线状态可能发生改变 if (i == 7) { EEPROM_I2C_SDA_1(); // 释放总线 } _ucByte <<= 1; /* 左移一个bit */ i2c_Delay(); } }
uint8_t i2c_ReadByte(void) { uint8_t i; uint8_t value; /* 读到的第一个bit为数据的bit7 */ value = 0; for (i = 0; i < 8; i++)//通过循环对SDA总线的状态进行判断,为1值++;为0移位补0,直到成为一个八位数据 //二进制中100+1为110,++实现8位数据中1的增加 { value <<= 1; EEPROM_I2C_SCL_1(); i2c_Delay(); if (EEPROM_I2C_SDA_READ()) { value++; } EEPROM_I2C_SCL_0(); i2c_Delay(); } return value; }
uint8_t i2c_WaitAck(void) { uint8_t re; EEPROM_I2C_SDA_1(); // CPU释放SDA总线,操作BSRR寄存器不仅可以设置IO状态,还可以将其某一位设置为可写入 i2c_Delay(); EEPROM_I2C_SCL_1(); /* CPU驱动SCL = 1, 此时器件会返回ACK应答 */ i2c_Delay(); if (EEPROM_I2C_SDA_READ()) /* CPU读取SDA口线状态,此时的SDA总线可受外部设备控制 */ { re = 1;//1为有应答 } else { re = 0; } EEPROM_I2C_SCL_0(); i2c_Delay(); return re; }
void i2c_Ack(void)
{
EEPROM_I2C_SDA_0(); /* CPU驱动SDA = 0 */
i2c_Delay();
EEPROM_I2C_SCL_1(); /* CPU产生1个时钟 */
i2c_Delay();
EEPROM_I2C_SCL_0();
i2c_Delay();
EEPROM_I2C_SDA_1(); /* CPU释放SDA总线 */
}
void i2c_NAck(void)
{
EEPROM_I2C_SDA_1(); /* CPU驱动SDA = 1 */
i2c_Delay();
EEPROM_I2C_SCL_1(); /* CPU产生1个时钟 */
i2c_Delay();
EEPROM_I2C_SCL_0();
i2c_Delay();
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。