打印
[MM32硬件]

【灵动微评测报告】IIC调试通过,读写24C02成功

[复制链接]
1079|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
     板子上有个24C02的EEPROM存储器,I2C接口,花了一些时间终于调试好了。参考下载的官方例子,需要注意的是写数据后要延时几个毫秒。

    I2C接口在PB6,PB7。



i2C代码:
/********************************************************************************************************
**函数信息 :I2CTXEmptyCheck(I2C_TypeDef *I2Cx)                 
**功能描述 :检查发送中断标志位
**输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2
**输出参数 :无
********************************************************************************************************/
void I2CTXEmptyCheck(I2C_TypeDef *I2Cx)
{
    while(1)
    {
        if(I2C_GetFlagStatus(I2Cx, I2C_FLAG_TX_EMPTY))
        {
            break;
        }
    }
}
/********************************************************************************************************
**函数信息 :I2CTXEmptyCheck(I2C_TypeDef *I2Cx)                 
**功能描述 :检查接收中断标志位
**输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2
**输出参数 :无
********************************************************************************************************/
void I2CRXFullCheck(I2C_TypeDef *I2Cx)
{   
    while(1)
    {
        if(I2C_GetFlagStatus(I2Cx, I2C_FLAG_RX_FULL))
        {
            break;
        }       
    }
}
/********************************************************************************************************
**函数信息 :I2CTXByte(I2C_TypeDef *I2Cx,unsigned short cmd,unsigned char temp)              
**功能描述 :I2C发送数据
**输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2;cmd;temp
**输出参数 :无
********************************************************************************************************/
void I2CTXByte(I2C_TypeDef *I2Cx,unsigned short cmd,unsigned char temp)
{
    I2C_SendData(I2Cx, temp);
    I2CTXEmptyCheck(I2Cx);
   
}
/********************************************************************************************************
**函数信息 :I2CRXByte(I2C_TypeDef *I2Cx)            
**功能描述 :I2C接收数据
**输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2
**输出参数 :temp
********************************************************************************************************/
unsigned char I2CRXByte(I2C_TypeDef *I2Cx)
{
    unsigned short temp;
   
    I2CRXFullCheck(I2Cx);   
    temp = I2C_ReceiveData(I2Cx);
    return (unsigned char)temp;
}


//============================================================================
//
//
//
//============================================================================
void I2C_WriteByte(unsigned char dev_addr, unsigned int addr,unsigned char Byte)
{
        I2C_PageWrite(dev_addr,addr,&Byte,1);
}

unsigned char I2C_ReadByte(unsigned char dev_addr, unsigned int addr)
{
        unsigned char Byte;
        I2C_PageRead(dev_addr,addr,&Byte,1);
    return Byte;
}

uint32_t I2C_PageWrite(unsigned char dev_addr,unsigned int addr,unsigned char *str,unsigned int num)
{
    unsigned short temp;
    unsigned short i;
    unsigned char *p;
       
    p = str;
   
    I2C_Cmd(I2C1, DISABLE);
    I2C_Send7bitAddress(I2C1, dev_addr<<1, I2C_Direction_Transmitter);
    I2C_Cmd(I2C1, ENABLE);
    temp = ((addr) & 0xff);
    I2CTXByte(I2C1,CMD_WRITE,temp);  //tx memory addr
   
    for(i=0;i<num;i++)
    {
        temp = *p;
        p++;
        if(i==(num-1))
            I2C1->IC_DATA_CMD =temp| 0x200; // //muaul set stop flag
        else
            I2CTXByte(I2C1,CMD_WRITE,temp); //tx data
    }       
        return     0;
}

uint32_t I2C_PageRead(unsigned char dev_addr,unsigned int addr,unsigned char *str,unsigned int num)
{
    unsigned char temp=0;
    unsigned short i;

    I2C_Cmd(I2C1, DISABLE);   
    I2C_Send7bitAddress(I2C1, dev_addr<<1, I2C_Direction_Transmitter);
    I2C_Cmd(I2C1, ENABLE);
    temp = ((addr) & 0xff);   
    I2CTXByte(I2C1,CMD_WRITE,temp);  //tx memory addr  
       
    I2C_Send7bitAddress(I2C1, dev_addr<<1, I2C_Direction_Receiver);
       
    for(i=0;i<num;i++)
    {
        str[i] = I2CRXByte(I2C1);
    }
       
        I2C1->IC_DATA_CMD = 0x200; // //set stop flag
       
    return 0;   
}


下面是串口数据输出:





使用特权

评论回复
沙发
coslight| | 2020-4-22 11:16 | 只看该作者
请问您这个com口的打印咋做出来的,我的mm32-link的扩展串口怎么也不输出,不知道咋回事

使用特权

评论回复
板凳
WoodData|  楼主 | 2020-4-22 11:18 | 只看该作者
coslight 发表于 2020-4-22 11:16
请问您这个com口的打印咋做出来的,我的mm32-link的扩展串口怎么也不输出,不知道咋回事 ...

我的也不输出的,都是外接USB转串口模块输出。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

119

主题

4583

帖子

27

粉丝