STM32F407 Discovery + MPU6050 I2C 不工作
本帖最后由 yygk 于 2015-10-20 15:41 编辑各位大侠,
最近接触STM32,想着把MPU6050这种小板接上来小练习一下,但是I2C一直调不通,不知为何,老是AF错误。
Transmit一开始就fail了,老是报AF错误HAL_I2C_ERROR_AF。有玩过的不?
上来读一下deviceID =MPU6050_Read_1BYTE((0x68<<1), 0x75);
unsigned char MPU6050_Read_1BYTE(unsigned char SlaveAddress,unsigned char REG_Address) {
HAL_StatusTypeDef status;
uint8_t data;
status = HAL_I2C_Master_Transmit(&hi2c1, SlaveAddress, ®_Address, 1, 1000);
if(status != HAL_OK) {
printf("I2C transmit error\n\r");
}
status = HAL_I2C_Master_Receive(&hi2c1, SlaveAddress, (uint8_t*)&data, 1, 1000);
if(status != HAL_OK) {
printf("I2C read 1 byte error\n\r");
}
return (unsigned char)data;
}
这个是I2C配置:
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED;
HAL_I2C_Init(&hi2c1);
}
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(hi2c->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
*/
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Peripheral clock enable */
__I2C1_CLK_ENABLE();
/* USER CODE BEGIN I2C1_MspInit 1 */
/* USER CODE END I2C1_MspInit 1 */
}
}
小板子图片就不上了,用的比较常见的淘宝小板,接口如下:
VCC 3.3v
GND 接地
SCL I2C 的时钟
SDA I2C 数据
XDA 可不接
XCL 可不接
AD0 mpu6050 地址选择(这里接地了)
:):):):):):):):):):) 没有过F4的,F030的I2C刚调试过,感觉还行! 用模拟I2C吧 wambob 发表于 2015-10-20 21:07
用模拟I2C吧
这个板子的I2C我用过,同样的配置,接口;接的是一个别的设备,都工作的好好的。。。
页:
[1]