亲爱的先生,
我只是想用SSD1306驱动初始化我的OLED,使用外设项目中的i2c演示,然而它不工作,i2c通道只发送0x00无论我在代码中改变什么。请帮助。
代码:
空白demo_i2c_init(空白)
{
Static const i2c_config CFG = {
。speed = HW_I2C_SPEED_STANDARD,
.mode = HW_I2C_MODE_MASTER,
.addr_mode = HW_I2C_ADDRESSING_7B,
};
hw_i2c_init (HW_I2C1 cfg);
将srand (OS_GET_TICK_COUNT ());
如果(config_need) {
int犯错;
i2c_device开发;
dev = ad_i2c_open (SSD1306);
呃= SSD1306_power_on (dev);
如果(err) {
printf(换行符"错误SSD1306_power_on 0x%X", err);
}
ad_i2c_close (dev);
config_need = false;
}
}
int SSD1306_power_on (i2c_device dev)
{
/ / OS_ENTER_CRITICAL_SECTION ();
ad_i2c_device_acquire (dev);
SSD1306_write_i (dev, 0机加区);
0 x00 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 x10);
0 x40 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xb0);
SSD1306_write_i (dev, 0 x81);
SSD1306_write_i (dev, 0 xaf);
SSD1306_write_i (dev, 0 xa1);
SSD1306_write_i (dev, 0 xa6);
SSD1306_write_i (dev, 0 xa8);
0 x0f SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xc8);
SSD1306_write_i (dev, 0 xd3);
0 x00 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xd5);
SSD1306_write_i (dev, 0 x80);
SSD1306_write_i (dev, 0 xd9);
0将SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xda);
0 x02 SSD1306_write_i (dev);
0 xdb SSD1306_write_i (dev);
0 x40 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 x8d);
SSD1306_write_i (dev, 0 x10);
SSD1306_write_i (0 xaf);
ad_i2c_device_release (dev);
/ / OS_LEAVE_CRITICAL_SECTION ();
返回true;
}
static int SSD1306_write_i(i2c_device dev,uint8_t val)
{
Uint8_t op[2] = {0x12,val};
返回ad_i2c_write(dev, op, sizeof(op));
}
#如果CFG_DEMO_OLED_SSD1306
/*湿度和压力组合传感器*/
I2C_SLAVE_DEVICE(I2C1, SSD1306, 0x78, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_STANDARD);
# endif
嗨,肯庄,
我不要看到什么毛病你已经粘贴的代码,你正确地打开适配器,然后你开始与i2c的交互,在resource_aquire ad_i2c_open以来()函数并不是必需的()函数调用resource_acquire()函数只要你有CONFIG_I2C_EXCLUSIVE_OPEN设置为1。我想您已经在custom_config_qspi.h文件中包含了dg_configI2C_ADAPTER和dg_config_USE_HW_I2C,并且您还在pher_setup()函数中为适当的i2c功能配置了相应的管脚?为例。
hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_6, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_I2C_SCL);
hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_7, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_I2C_SDA);
我也没有得到任何线索从捕获,你已经附加,我没有看到任何东西,这将表明一个i2c事务已经开始,我没有看到地址,你已经设置到设备或任何东西,这将表明一个交互已经开始。
由于MT_dialog
当然我们有如下设置,如果我修改引脚到端口3_5(CLK)和1_2(SDA)会有什么问题吗?唯一不同的是,我修改了pxp_reporter项目,在main.c上的函数“periph_init”中添加以下代码
#定义dg_configUSE_HW_I2C (1)
#定义dg_configI2C_ADAPTER (1)
#定义CFG_DEMO_HW_I2C (1)
#if CFG_DEMO_HW_I2C || CFG_AD_I2C_1 . #if CFG_DEMO_HW_I2C ||
/ * I2C1 * /
#定义CFG_GPIO_I2C1_SCL_PORT (HW_GPIO_PORT_3)
#定义CFG_GPIO_I2C1_SCL_PIN (HW_GPIO_PIN_5)
#定义CFG_GPIO_I2C1_SDA_PORT (HW_GPIO_PORT_1)
#定义CFG_GPIO_I2C1_SDA_PIN (HW_GPIO_PIN_2)
# endif
#如果CFG_DEMO_HW_I2C
/ * I2C * /
hw_gpio_set_pin_function (CFG_GPIO_I2C1_SCL_PORT CFG_GPIO_I2C1_SCL_PIN、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_I2C_SCL);
hw_gpio_set_pin_function (CFG_GPIO_I2C1_SDA_PORT CFG_GPIO_I2C1_SDA_PIN、HW_GPIO_MODE_INPUT HW_GPIO_FUNC_I2C_SDA);
hw_gpio_configure_pin (CFG_GPIO_TFT_RES_PORT CFG_GPIO_TFT_RES_PIN、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_GPIO, 1);
hw_gpio_configure_pin (CFG_GPIO_TQ_PORT CFG_GPIO_TQ_PIN、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_GPIO, 1);
demo_i2c_init ();
# endif
嗨,肯庄,
如果你使用的是带有端口3的QFN包,你应该没问题。既然你正在使用BLE项目,试着做以下事情,我认为使用ble_adv的例子会更有效,因为这是一个更简单的例子:
ad_i2c_write (dev addr 1);//执行一个字节的写入
ad_i2c_read (dev,及地址,1);//执行一个字节的读取
因此,请尝试以上与I2C外设连接或不连接,并检查是否至少68x推动总线上的设备地址。
由于MT_dialog
我用的是SSD1306
没有华丽的动画。
你能给我提供DA1468x的运行库吗?
会节省我一些时间:)
关于
Peter de Nijs