中级会员
- 积分
- 234
- 金钱
- 234
- 注册时间
- 2015-12-16
- 在线时间
- 32 小时
|
1金钱
型号:STM32F407ZE
硬件I2C1,使用STM32CubeMX生成代码,
发现I2C1故障,现象是SCL无波形,排除端口以及上拉问题
查看数据手册I2C1有两种端口算着:I2C_SCLB6或PB7; I2C_SDA:PB7或PB9
发现只要PB9不参与,就出现SCL端口没有波形(用示波器,常为高)
设置部分的代码,是用STM32CubeMX生成的,如下:
主函数代码:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
MX_I2C2_Init();
uint8_t TMP8[3]={0xAA,0XAA,0XAA};
while(1)
{
HAL_I2C_Master_Transmit(&hi2c1, 0x80,TMP8,3,100);
HAL_I2C_Master_Transmit(&hi2c2, 0x80,TMP8,3,100);
}
}
其中端口设置在文件:stm32f4xx_hal_msp.c中
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(hi2c->Instance==I2C1)
{
__HAL_RCC_GPIOB_CLK_ENABLE();
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
*/
//PB8 ------> I2C1_SCL
//PB9 ------> I2C1_SDA
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;//错误,SCLK无波形
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_9;//OK,SCLK有波形
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_7;//OK,SCLK有波形
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;//OK,SCLK有波形
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
__HAL_RCC_I2C1_CLK_ENABLE();
}
else if(hi2c->Instance==I2C2)
{
………………
请教,这是什么原因
这里不讨论软件模拟I2C,谢谢!
|
|