[资料干货] PT32L007 与SC7A20H IIC通讯源代码分享

[复制链接]
 楼主| 磁编码器 发表于 2024-3-23 18:54 | 显示全部楼层 |阅读模式

#define   READ_ADDR    0x33
#define   DEVICE_ADDR  0x32

u8 arry_write[10]={0x37,0x01,0x40,0x88,0x01,0x2a,0x01,0x00};

void I2C_GPIO_Config(void)
{
        /* 配置I2C管脚的复用功能 */
        GPIO_DigitalRemapConfig(AFIOB, GPIO_Pin_5, AFIO_AF_0,ENABLE);        //PB5 I2C SDA
        GPIO_DigitalRemapConfig(AFIOB, GPIO_Pin_4, AFIO_AF_0,ENABLE);        //PB4 I2C SCL
}
void I2C_Driver(void)
{  
    I2C_InitTypeDef I2C_InitStruct;
    I2C_InitStruct.I2C_Acknowledge = I2C_Acknowledge_Disable;
    I2C_InitStruct.I2C_Broadcast = I2C_Broadcast_Disable;
    I2C_InitStruct.I2C_OwnAddress = 0x00;
    I2C_InitStruct.I2C_Prescaler = 640-1;
    I2C_Init(I2C,&I2C_InitStruct);   
}

/**
* @brief IIC写函数
* @param pBuffer:需要写入的数据
* @param WriteAddr:从机地址
* @param NumByteToWrite:需要写入的数据长度
* @retval 无
*/
void I2C_EE_Write(u8 pBuffer, unsigned int WriteAddr, u16 data_size)
{
//        int i;
/******************等待从机ready***************/               
        I2C_GenerateEvent(I2C,I2C_Event_Start,DISABLE);
        I2C->CCR |= I2C_CCR_SI | I2C_CCR_ACK;
        I2C_Cmd(I2C,DISABLE);
        I2C_Cmd(I2C,ENABLE);
       
        I2C_GenerateEvent(I2C,I2C_Event_Start,ENABLE);       
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_StartOk)!= SET);
       
        I2C_SendAddr(I2C, DEVICE_ADDR);//器件地址,写
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_MASGetAckW)!=SET);
       
        I2C_SendData(I2C,WriteAddr);//发送要写的字地址
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDSGetAck)!=SET);
//        for(i=0;i<data_size;i++)
//        {
//                I2C_SendData(I2C, *(pBuffer++));
//                while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDSGetAck) != SET);
//        }

        I2C_SendData(I2C, pBuffer);
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDSGetAck) != SET);

                /******************发送停止位***************/
        I2C_GenerateEvent(I2C,I2C_Event_Stop,ENABLE);       
}

//uint8_t I2C_EE_Read(u8* pBuffer,u16 ReadAddr, u16 DeviceAddr, u16 data_size)
uint8_t I2C_EE_Read(u16 ReadAddr)
{
//        int i;
        uint8_t date = 0 ;
/******************等待从机ready***************/               

        I2C_GenerateEvent(I2C,I2C_Event_Start,ENABLE);
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_StartOk)!= SET);
       
        I2C_SendAddr(I2C, DEVICE_ADDR);//器件地址,写
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_MASGetAckW)!=SET);
       
        I2C_SendData(I2C,ReadAddr);//发送要读的页地址
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDSGetAck)!=SET);
        //printf("-----%s  %d----\n", __func__, __LINE__) ;
        I2C_GenerateEvent(I2C,I2C_Event_Stop,ENABLE);
       
/******************接收数据***************/               
        I2C_GenerateEvent(I2C,I2C_Event_Start,ENABLE);
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_StartOk)!= SET);
       
        I2C_SendAddr(I2C, READ_ADDR);//器件地址,读
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_MASGetAckR)!=SET);

        I2C->CCR=I2C_CCR_ACK|I2C_CCR_SI;//主机发送NACK
        while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDGSendNack) != SET);
        date = I2C_ReceiveData(I2C);
       
        /******************发送停止位***************/
        I2C_GenerateEvent(I2C,I2C_Event_Stop,ENABLE);
       
        return date ;
}

init(void)
{
        I2C_EE_Write(arry_write[0], 0x20, 1);Software_Delay(100000) ;
        I2C_EE_Write(arry_write[1], 0x21, 1);Software_Delay(100000) ;
        I2C_EE_Write(arry_write[2], 0x22, 1);Software_Delay(100000) ;
        I2C_EE_Write(arry_write[3], 0x23, 1);Software_Delay(100000) ;
        I2C_EE_Write(arry_write[4], 0x1f, 3);Software_Delay(100000) ;
        I2C_EE_Write(arry_write[5], 0x30, 1);Software_Delay(100000) ;
        I2C_EE_Write(arry_write[6], 0x32, 1);Software_Delay(100000) ;
        I2C_EE_Write(arry_write[7], 0x32, 1);Software_Delay(100000) ;
}





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 磁编码器 发表于 2024-3-25 13:38 | 显示全部楼层
SC7A20H单击 的例程

寄存器地址, 设置值,
   
   0x20,0x47,
   0x23,0x88,    //+-2g
   0x21,0x31,
   0x22,0x40,    //AOI中断on int1
   0x25,0x00,
   0x24,0x00,
   0x30,0x2a,    //x,y,z高事件或检测
   0x32,0x05,    //检测门限: 1-127, 值越小, 灵敏度越高
   0x33,0x00,
 楼主| 磁编码器 发表于 2024-3-25 13:40 | 显示全部楼层
震动例程

adxl_i2c_write(0x20,0x37);
adxl_i2c_write(0x21,0x01);
adxl_i2c_write(0x22,0x40);
adxl_i2c_write(0x23,0x88);
adxl_i2c_write(0x1f,0x01);
adxl_i2c_write(0x30,0x2a);
adxl_i2c_write(0x32,0x05);
adxl_i2c_write(0x33,0x00);
 楼主| 磁编码器 发表于 2024-3-25 13:40 | 显示全部楼层
6D/4D 的检测例程 :






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 磁编码器 发表于 2024-3-25 13:44 | 显示全部楼层
SC7A20H软件滤波例程



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
地瓜patch 发表于 2024-3-25 21:36 来自手机 | 显示全部楼层
这是什么应用
aaasda 发表于 2024-6-11 16:48 | 显示全部楼层
楼主有SPI例程吗  1913754496@qq.com
 楼主| 磁编码器 发表于 2024-6-15 13:03 | 显示全部楼层
aaasda 发表于 2024-6-11 16:48
楼主有SPI例程吗  

没有写SPI例程,求分享...
abv1234 发表于 2024-9-1 22:18 | 显示全部楼层
谢谢分享,正好在找资料
因火生烟 发表于 2024-12-13 15:58 | 显示全部楼层
楼主试过没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

9

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部