本次主要使用硬件I2C接口,通过读取加速度传感器ADXL345测试I2C的使用方法。
使用PB8和PB92个端口。
首先初始化I2C接口
void drv_i2c_gpio_init( void )
{
gpio_init_type gpio_initstructure;
/* i2c periph clock enable */
crm_periph_clock_enable(CRM_I2C1_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
/* configure i2c pins: SCL=PB8,SDA=PB9 */
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_pins = GPIO_PINS_8 | GPIO_PINS_9;
gpio_init(GPIOB, &gpio_initstructure);
/* gpio configuration */
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE8, GPIO_MUX_4);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE9, GPIO_MUX_4);
hi2cx.i2cx = I2C1;
i2c_reset(I2C1);
/* config i2c */
i2c_init(I2C1, 0x0F, I2Cx_CLKCTRL);
i2c_own_address1_set(I2C1, I2C_ADDRESS_MODE_7BIT, 0XB0);
i2c_enable(I2C1,TRUE);
}
I2C接口驱动,使用了SDK中的i2c_application.c和i2c_application.h。
uint8_t I2C_WriteByte(uint8_t index,uint8_t dev_addr, uint8_t addr,uint8_t Byte)
{
uint8_t reVal;
reVal = i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, dev_addr<<1, addr, &Byte, 1, 10000);
return reVal;
}
uint8_t I2C_ReadByte(uint8_t index,uint8_t dev_addr, uint8_t addr)
{
uint8_t reVal;
i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, dev_addr<<1, addr, &reVal, 1, 10000);
return reVal;
}
uint8_t I2C_PageWrite(uint8_t index,uint8_t dev_addr, uint8_t addr,uint8_t *str,uint32_t num)
{
uint8_t reVal;
reVal = i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, dev_addr<<1, addr, str, num, 10000);
return reVal;
}
uint8_t I2C_PageRead(uint8_t index,uint8_t dev_addr, uint8_t addr,uint8_t *str,uint32_t num)
{
uint8_t reVal;
reVal = i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, dev_addr<<1, addr, str, num, 10000);
return reVal;
}
下面是ADXL345的驱动
测试加速度读取数据。
在lcd屏幕上显示加速度数值。
代码如下:
|
此文章已获得独家原创/原创奖标签,著作权归21ic所有,未经允许禁止转载。
共1人点赞
|