把i2c的默认PB12,PB13映射到PB20,PB21,调用映射设置函数,具体初始化,如下:
GPIOPinRemap( ENABLE , RB_PIN_I2C );//映射到PB20/PB21
GPIOB_ModeCfg( GPIO_Pin_20 | GPIO_Pin_21, GPIO_ModeOut_PP_5mA); //GPIO_ModeIN_PU );主机
I2C_Init( I2C_Mode_I2C, 400000, I2C_DutyCycle_16_9, I2C_Ack_Enable, I2C_AckAddr_7bit, TxAddr );
测试映射不成功,求帮助
2022-5-17 10:56:38
看了设置驱动映射函数描述,没有I2C的输入描述,是否不支持此功能呀?驱动库的函数如下:
/*******************************************************************************
* Function Name : GPIOPinRemap
* Description : 外设功能引脚映射
* Input : s:
ENABLE - 引脚映射
DISABLE - 默认引脚
perph:
RB_PIN_SPI0 - SPI0: PA12/PA13/PA14/PA15 -> PB12/PB13/PB14/PB15
RB_PIN_UART1 - UART1: PA8/PA9 -> PB12/PB13
RB_PIN_UART0 - UART0: PB4/PB7 -> PA15/PA14
RB_PIN_TMR2 - TMR2: PA11 -> PB11
RB_PIN_TMR1 - TMR1: PA10 -> PB10
RB_PIN_TMR0 - TMR0: PA9 -> PB23
* Return : None
*******************************************************************************/
void GPIOPinRemap( FunctionalState s, UINT16 perph )
{
if( s ) R16_PIN_ALTERNATE |= perph;
else R16_PIN_ALTERNATE &= ~perph;
}
看了设置驱动映射函数描述,没有I2C的输入描述,是否不支持此功能呀?驱动库的函数如下:
/*******************************************************************************
* Function Name : GPIOPinRemap
* Description : 外设功能引脚映射
* Input : s:
ENABLE - 引脚映射
DISABLE - 默认引脚
perph:
RB_PIN_SPI0 - SPI0: PA12/PA13/PA14/PA15 -> PB12/PB13/PB14/PB15
RB_PIN_UART1 - UART1: PA8/PA9 -> PB12/PB13
RB_PIN_UART0 - UART0: PB4/PB7 -> PA15/PA14
RB_PIN_TMR2 - TMR2: PA11 -> PB11
RB_PIN_TMR1 - TMR1: PA10 -> PB10
RB_PIN_TMR0 - TMR0: PA9 -> PB23
* Return : None
*******************************************************************************/
void GPIOPinRemap( FunctionalState s, UINT16 perph )
{
if( s ) R16_PIN_ALTERNATE |= perph;
else R16_PIN_ALTERNATE &= ~perph;
}
举报
2022-5-17 10:56:56
非常感谢,测试完毕,i2c确实可以映射的;583的手册里说I2C需要选择正确时钟:2-36M,实际主频60M还是可以i2c的,不知道是手册未修正,还是高频时钟i2c会存在稳定性问题
非常感谢,测试完毕,i2c确实可以映射的;583的手册里说I2C需要选择正确时钟:2-36M,实际主频60M还是可以i2c的,不知道是手册未修正,还是高频时钟i2c会存在稳定性问题
举报
2022-5-17 10:57:04
CH582M的I2C调试分享,(费了一个礼拜时间排查):
现象:
①采用583的i2c实例对自己的CMOS摄像头的I2C进行测试,发现不好用;示波器测试没TCL和SDA信号输出;
②通过串口监视发现:
while( I2C_GetFlagStatus( I2C_FLAG_BUSY ) != RESET ); 这个语句执行不过去;
③通过读i2c寄存器I2C_STAR2,并进行串口监控,发现寄存器位--BUSY位一直为1,因此就出现上面那个语句无法执行下去;
CH582M的I2C调试分享,(费了一个礼拜时间排查):
现象:
①采用583的i2c实例对自己的CMOS摄像头的I2C进行测试,发现不好用;示波器测试没TCL和SDA信号输出;
②通过串口监视发现:while( I2C_GetFlagStatus( I2C_FLAG_BUSY ) != RESET ); 这个语句执行不过去;
③通过读i2c寄存器I2C_STAR2,并进行串口监控,发现寄存器位--BUSY位一直为1,因此就出现上面那个语句无法执行下去;
举报