有關(guān)CH32v203 I2C問題


CH32V203 I2C1?讀寫24C02 EEPROM


void IIC_Init(u32 bound, u16 address)

{


GPIO_InitTypeDef GPIO_InitStructure={0};

I2C_InitTypeDef I2C_InitTSturcture={0};

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );

RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE );


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init( GPIOB, &GPIO_InitStructure );


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init( GPIOB, &GPIO_InitStructure );


I2C_InitTSturcture.I2C_ClockSpeed = bound;

I2C_InitTSturcture.I2C_Mode = I2C_Mode_I2C;

I2C_InitTSturcture.I2C_DutyCycle = I2C_DutyCycle_2;

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 );


I2C_AcknowledgeConfig( I2C1, ENABLE );


}


用這段初始化,pb6,pb7接24C02 都正常

===============================================

void IIC_Init(u32 bound, u16 address)

{


GPIO_InitTypeDef GPIO_InitStructure={0};

I2C_InitTypeDef I2C_InitTSturcture={0};

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );

GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);

RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE );


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init( GPIOB, &GPIO_InitStructure );


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init( GPIOB, &GPIO_InitStructure );


I2C_InitTSturcture.I2C_ClockSpeed = bound;

I2C_InitTSturcture.I2C_Mode = I2C_Mode_I2C;

I2C_InitTSturcture.I2C_DutyCycle = I2C_DutyCycle_2;

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 );


I2C_AcknowledgeConfig( I2C1, ENABLE );


}


用這段初始化,PB8,PB9接24C02 就不正常

卡死在下面這段

FlagStatus I2C_GetFlagStatus(I2C_TypeDef *I2Cx, uint32_t I2C_FLAG)

{

? ? FlagStatus? ? bitstatus = RESET;

? ? __IO uint32_t i2creg = 0, i2cxbase = 0;


? ? i2cxbase = (uint32_t)I2Cx;

? ? i2creg = I2C_FLAG >> 28;

? ? I2C_FLAG &= FLAG_Mask;


? ? if(i2creg != 0)

? ? {

? ? ? ? i2cxbase += 0x14;

? ? }

? ? else

? ? {

? ? ? ? I2C_FLAG = (uint32_t)(I2C_FLAG >> 16);

? ? ? ? i2cxbase += 0x18;

? ? }


? ? if(((*(__IO uint32_t *)i2cxbase) & I2C_FLAG) != (uint32_t)RESET)

? ? {

? ? ? ? bitstatus = SET;

? ? }

? ? else

? ? {

? ? ? ? bitstatus = RESET;

? ? }


? ? return bitstatus;

}


痲煩工程師們給看一下,問題在那里


你好,需要打開復(fù)用IO時鐘

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE );

引腳復(fù)用相關(guān)詳細內(nèi)容參考https://www.cnblogs.com/wchmcu/p/17278478.html


可以了,謝謝


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频