DataSheet中 只说 批号倒数第5位为0的 没法使用,不知道怎么判断批号
实验测试 remap成 GPIO_PartialRemap2_I2C1或者 GPIO_PartialRemap4_I2C1, 都是不好用的
帮忙明确 芯片的功能
如果 PC16 PC17 PC18 PC19 没法remap I2C,那么这个 20脚封装的芯片是不是就没有可用的硬件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 ,不好用
这个板子使用 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);
就好用了,马虎了
谢谢啦