我在用AT32F413的IIC时,发现在启动时SCL会掉坑,如附图。
源码:
定义:
//------------------------------------------------------------------------------------------------------
#define I2C_TIMEOUT 0x100000
#define I2Cx_SPEED 50000 // 50000 // 100000
#define I2Cx_ADDRESS 0x34 // 0x1A //
#define I2Cx_PORT I2C2
#define I2Cx_CLK CRM_I2C2_PERIPH_CLOCK // CRM_I2C1_PERIPH_CLOCK
#define I2Cx_SCL_PIN GPIO_PINS_10
#define I2Cx_SCL_GPIO_PORT GPIOB
#define I2Cx_SCL_GPIO_CLK CRM_GPIOB_PERIPH_CLOCK
#define I2Cx_SDA_PIN GPIO_PINS_11
#define I2Cx_SDA_GPIO_PORT GPIOB
#define I2Cx_SDA_GPIO_CLK CRM_GPIOB_PERIPH_CLOCK
//---------------------------------------------------------------------------------------------------------------
初始化:
// ----------------------------------------------------------------------------------
// 函数名称: App_IIC_HardInit
// 函数功能: IIC硬件 初始化
// 入口参数: 无
// 出口参数: 无
// PB10 SCL0时钟线 2.9-3.3V 0-0.4V H
// PB11 SDA0数据线 2.9-3.3V 0-0.4V H
// ----------------------------------------------------------------------------------
void App_IIC_HardInit(void)
{
// -----------------------------------------------
HIICx.i2cx = I2Cx_PORT;
i2c_config(&HIICx);
App_IIC_DataInit();
}
// ----------------------------------------------------------------------------------
// 函数名称: i2c_lowlevel_init
// 函数功能: IIC硬件初始化
// 入口参数: 无
// 出口参数: 无
// PB10 SCL0时钟线 2.9-3.3V 0-0.4V H
// PB11 SDA0数据线 2.9-3.3V 0-0.4V H
// ----------------------------------------------------------------------------------
void i2c_lowlevel_init(i2c_handle_type* hi2c)
{
gpio_init_type gpio_initstructure;
if(hi2c->i2cx == I2Cx_PORT)
{
// i2c periph clock enable //
crm_periph_clock_enable(I2Cx_CLK, TRUE);
crm_periph_clock_enable(I2Cx_SCL_GPIO_CLK, TRUE);
crm_periph_clock_enable(I2Cx_SDA_GPIO_CLK, TRUE);
// gpio configuration //
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
// configure i2c pins: scl //
gpio_initstructure.gpio_pins = I2Cx_SCL_PIN;
gpio_init(I2Cx_SCL_GPIO_PORT, &gpio_initstructure);
// configure i2c pins: sda //
gpio_initstructure.gpio_pins = I2Cx_SDA_PIN;
gpio_init(I2Cx_SDA_GPIO_PORT, &gpio_initstructure);
i2c_init(hi2c->i2cx, I2C_FSMODE_DUTY_2_1, I2Cx_SPEED);
i2c_own_address1_set(hi2c->i2cx, I2C_ADDRESS_MODE_7BIT, I2Cx_ADDRESS);
}
}
// ------------------------------------------------------------------------------------------------
请教一下,如何消除掉坑现象?
|