stm 32 gpio 模拟 i2c 备忘

本文记录了在使用STM32通过GPIO模拟I2C时遇到的问题和调试经验,强调了时序的重要性,指出即使是微小的时序错误也可能导致程序无法正常工作。同时提到在尝试使用STM32的I2C固件库时遇到了困难。
摘要由CSDN通过智能技术生成

最近调试i2c遇到一些问题,在此备忘,总结一句话,还是要特别注意时序,哪怕一个高低点平的错误都可能导致程序工作不正常

另外对于stm32 提供的i2c固件例程一直没有调好,特别烦人

#include "SystemInit.h"

#include <stdint.h>
#include "stm32_eval_i2c_ee.h"





void IIC_Init(void);                  
void IIC_Start(void);    
void IIC_Stop(void);      
void IIC_Send_Byte(u8 txd);   
u8 IIC_Read_Byte(unsigned char ack);
u8 IIC_Wait_Ack(void);     


u8 IIC_Read_One_Byte(u8 daddr,u8 addr);  


__IO uint32_t  timeremain = 0;


void delay_us(__IO uint32_t arg)
{
volatile uint16_t   i = 0;
#if 0

    while(arg--)
    {
      for(i = 5; i > 0; i--);
    }
#else
   timeremain = arg;
    EnableTimer2();
    while(timeremain)
    {
    }
#endif
    
}




/*
#define SDA_IN()  {IIC_SDA_PORT->CRH&=0XFFFF0FFF;IIC_SDA_PORT->CRH|=8<<12;}
#define SDA_OUT() {IIC_SDA_PORT->CRH&=0XFFFF0FFF;IIC_SDA_PORT->CRH|=3<<12;}
*/

#define Set_IIC_SCL  {GPIO_SetBits(IIC_SCL_PORT,IIC_SCL_PIN);}
#define Clr_IIC_SCL  {GPIO_ResetBits(IIC_SCL_PORT,IIC_SCL_PIN);}

#define Set_IIC_SDA  {GPIO_SetBits(IIC_SDA_PORT,IIC_SDA_PIN);}
#define Clr_IIC_SDA  {GPIO_ResetBits(IIC_SDA_PORT,IIC_SDA_PIN);}
#define READ_SDA    (GPIO_ReadInputDataBit(IIC_SDA_PORT, IIC_SDA_PIN))



#define IIC_SCL_PORT              GPIOD
#define IIC_SCL_CLK               RCC_APB2Periph_GPIOD
#define IIC_SCL_PIN               GPIO_Pin_8
#define IIC_SDA_PORT              GPIOD
#define IIC_SDA_CLK               RCC_APB2Periph_GPIOD
#define IIC_SDA_PIN               GPIO_Pin_9


void SDA_IN()
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值