18、基于 STM32 的 I2C 时序 - GPIO 模拟方式


        STM32 的硬件 I2C 一直存在着一些问题,在使用的过程中容易出现死锁的现象。因此在大多数场合下,我们都会抛弃硬件 I2C,改用 GPIO 模拟的方式去实现。这里通过模拟 I2C 的时序去读写 AT24C02, 从而也能更为深刻的了解 I2C 的时序。 I2C 的时序产生代码如下 :

/* SCL 设置为高电平 */
void SetSCLHigh(void) 
{
    GPIO_SetBits(GPIO_I2C, I2C_SCL);   
}

/* SCL 设置为低电平 */
void SetSCLLow(void) 
{
    GPIO_ResetBits(GPIO_I2C, I2C_SCL); 
}

/* SDA 设置为高电平 */
void SetSDAHigh(void) 
{
    GPIO_SetBits(GPIO_I2C, I2C_SDA);   
}

/* SDA 设置为低电平 */
void SetSDALow(void)
{
    GPIO_ResetBits(GPIO_I2C, I2C_SDA); 
}

/* 设置 SDA 为输出模式 */
void SetSDAOut(void)
{
    /* 定义 GPIO 结构体 */
    GPIO_InitTypeDef GPIO_InitStruct; 

    /* ----------------- I2C 管脚配置 ------------------ */
    GPIO_InitStruct.GPIO_Pin   = I2C_SDA;       
    GPIO_InitStruct.GPIO_Spe
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值