CH32x035 QFN20封装 PC16 PC17 可以remap为 I2C使用吗?

DataSheet中 只说 批号倒数第5位为0的 没法使用,不知道怎么判断批号

实验测试 remap成 GPIO_PartialRemap2_I2C1或者 GPIO_PartialRemap4_I2C1, 都是不好用的

帮忙明确 芯片的功能

如果 PC16 PC17 PC18 PC19 没法remap I2C,那么这个 20脚封装的芯片是不是就没有可用的硬件I2C功能了?

批号是芯片封装下面的那一行数字。如果不确定,可以用高清的摄像头拍一下上传看看。

另外,使用Remap是要开启AFIO的时钟的。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);



void IIC_Init(u32 bound, u16 address) {
    GPIO_InitTypeDef GPIO_InitStructure = { 0 };
    I2C_InitTypeDef I2C_InitTSturcture = { 0 };
    NVIC_InitTypeDef NVIC_InitStructure = { 0 };

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_PartialRemap2_I2C1, ENABLE);
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE);



    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_16;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_17;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( GPIOC, &GPIO_InitStructure);

    I2C_InitTSturcture.I2C_ClockSpeed = bound;
    I2C_InitTSturcture.I2C_Mode = I2C_Mode_I2C;
    I2C_InitTSturcture.I2C_DutyCycle = I2C_DutyCycle_16_9;
    I2C_InitTSturcture.I2C_OwnAddress1 = address;
    I2C_InitTSturcture.I2C_Ack = I2C_Ack_Enable;
    I2C_InitTSturcture.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_Init( I2C1, &I2C_InitTSturcture);

    I2C_Cmd( I2C1, ENABLE);

#if (I2C_MODE == HOST_MODE)
    I2C_AcknowledgeConfig( I2C1, ENABLE );
#endif

    NVIC_InitStructure.NVIC_IRQChannel = I2C1_EV_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = I2C1_ER_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    I2C_ITConfig( I2C1, I2C_IT_BUF, ENABLE);
    I2C_ITConfig( I2C1, I2C_IT_EVT, ENABLE);
    I2C_ITConfig( I2C1, I2C_IT_ERR, ENABLE);

}

感觉初始化 是没问题的


用一块 评估板测试, CH32x035c8t6 812612e10 。 remap到 PC16 pC17 ,不好用


微信图片_20240812132206.jpg

这个板子使用 PA10 PA11 作I2C 是可以的,但是 PC16 PC17 没反应


没有看见你设置复用。应该是还需要再用一句:(根据你的需要选择)

GPIO_PinRemapConfig(GPIO_PartialRemap2_I2C1, ENABLE); // SDA PC17 SCL PC16
GPIO_PinRemapConfig(GPIO_PartialRemap4_I2C1, ENABLE); // SDA PC16 SCL PC17



    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);


抓到一条漏网之鱼


RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); 改成

 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);

就好用了,马虎了


谢谢啦


只有登录才能回复,可以选择微信账号登录