DataSheet中 只說(shuō) 批號(hào)倒數(shù)第5位為0的 沒(méi)法使用,不知道怎么判斷批號(hào)
實(shí)驗(yàn)測(cè)試 remap成 GPIO_PartialRemap2_I2C1或者 GPIO_PartialRemap4_I2C1, 都是不好用的
幫忙明確 芯片的功能
如果 PC16 PC17 PC18 PC19 沒(méi)法remap I2C,那么這個(gè) 20腳封裝的芯片是不是就沒(méi)有可用的硬件I2C功能了?
DataSheet中 只說(shuō) 批號(hào)倒數(shù)第5位為0的 沒(méi)法使用,不知道怎么判斷批號(hào)
實(shí)驗(yàn)測(cè)試 remap成 GPIO_PartialRemap2_I2C1或者 GPIO_PartialRemap4_I2C1, 都是不好用的
幫忙明確 芯片的功能
如果 PC16 PC17 PC18 PC19 沒(méi)法remap I2C,那么這個(gè) 20腳封裝的芯片是不是就沒(méi)有可用的硬件I2C功能了?
批號(hào)是芯片封裝下面的那一行數(shù)字。如果不確定,可以用高清的攝像頭拍一下上傳看看。
另外,使用Remap是要開(kāi)啟AFIO的時(shí)鐘的。
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);
}
感覺(jué)初始化 是沒(méi)問(wèn)題的
用一塊 評(píng)估板測(cè)試, CH32x035c8t6 812612e10 。 remap到 PC16 pC17 ,不好用
這個(gè)板子使用 PA10 PA11 作I2C 是可以的,但是 PC16 PC17 沒(méi)反應(yīng)
沒(méi)有看見(jiàn)你設(shè)置復(fù)用。應(yīng)該是還需要再用一句:(根據(jù)你的需要選擇)
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);
抓到一條漏網(wǎng)之魚(yú)
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); 改成
?RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
就好用了,馬虎了
謝謝啦