- 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屏幕上显示加速度数值。
代码如下: