亲爱的先生,
我只是想init OLED SSD1306司机,在外设使用i2c演示项目,但是它不工作,i2c频道只发送0 x00无论我怎么改变代码。请帮助。
代码:
空白demo_i2c_init(空白)
{
静态常量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 0 X % X”,错);
}
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;
}
静态int SSD1306_write_i (i2c_device dev uint8_t val)
{
uint8_t op [2] = {0 x12, val};
返回ad_i2c_write (dev, op, sizeof (op));
}
#如果CFG_DEMO_OLED_SSD1306
/ *结合湿度和压力传感器* /
I2C_SLAVE_DEVICE (I2C1 SSD1306 0 x78, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_STANDARD);
# endif
嗨,肯庄,
我不要看到什么毛病你已经粘贴的代码,你正确地打开适配器,然后你开始与i2c的交互,在resource_aquire ad_i2c_open以来()函数并不是必需的()函数调用resource_acquire()函数只要你有CONFIG_I2C_EXCLUSIVE_OPEN设置为1。我假设你有包括dg_configI2C_ADAPTER和dg_config_USE_HW_I2C custom_config_qspi。h文件,您还可以配置了相应的针的适当的i2c functionallity periph_setup()函数?为例。
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(时钟)和1 _2 (SDA) ?唯一的不同是我修改pxp_reporter项目添加下面的代码在c函数“periph_init”
#定义dg_configUSE_HW_I2C (1)
#定义dg_configI2C_ADAPTER (1)
#定义CFG_DEMO_HW_I2C (1)
#如果CFG_DEMO_HW_I2C | | CFG_AD_I2C_1
/ * 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
嗨,肯庄,
如果您使用的是QFN包有一个港口3你应该好了。因为你使用的是祝福项目尝试做以下,我假设使用ble_adv示例将更有效,因为这是一个简单的例子:
ad_i2c_write (dev addr 1);/ /执行一个字节写
ad_i2c_read (dev,及地址,1);/ /执行一个字节读
所以请试着上面没有I2C外围连接,并检查是否至少的68 x将地址总线上的设备。
由于MT_dialog
我使用de SSD1306
没有华丽的动画。
你能提供给我一个自由运行DA1468x移植吗?
会节省我的时间:)
关于
Peter de Nijs