IIC启动时SCL掉坑
我在用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.4VH
// PB11 SDA0数据线2.9-3.3V 0-0.4VH
// ----------------------------------------------------------------------------------
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.4VH
// PB11 SDA0数据线2.9-3.3V 0-0.4VH
// ----------------------------------------------------------------------------------
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);
}
}
// ------------------------------------------------------------------------------------------------
请教一下,如何消除掉坑现象?
先检查一下示波器测试环境,示波器的地线和信号线尽量短,再测试一下 我已经测试了很多回了,这种现象确实存在。就是不确定是不是我设置不当引起的,还是其它原因。
检查一下示波器的地线和信号线 我已经换了3个示波器(带探头一起换),换了4组人测了,应该排除人员与设备问题了。
页:
[1]