尊敬的先生,
我只想用SSD1306驱动程序incored我的OLED,在外围设备中使用I2C演示,但它不起作用,无论我在代码中更改了什么,I2C通道都只发送0x00。请帮忙。
代码:
void demo_i2c_init(void)
{
静态const i2c_config cfg = {
.speed = hw_i2c_speed_standard,
.mode = hw_i2c_mode_master,
.ddr_mode = hw_i2c_addressing_7b,
};
hw_i2c_init(hw_i2c1,cfg);
srand(os_get_tick_count());
if(config_need){
呃;
i2c_device dev;
dev = ad_i2c_open(SSD1306);
err = ssd1306_power_on(dev);
如果(错误){
printf(换行符“错误ssd1306_power_on 0x%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,0xAE);
ssd1306_write_i(dev,0x00);
SSD1306_WRITE_I(DEV,0x10);
SSD1306_WRITE_I(DEV,0x40);
ssd1306_write_i(dev,0xb0);
SSD1306_WRITE_I(DEV,0x81);
SSD1306_WRITE_I(DEV,0xAF);
SSD1306_WRITE_I(DEV,0xA1);
SSD1306_WRITE_I(DEV,0xA6);
SSD1306_WRITE_I(DEV,0xA8);
ssd1306_write_i(dev,0x0f);
SSD1306_WRITE_I(DEV,0xC8);
SSD1306_WRITE_I(DEV,0xD3);
ssd1306_write_i(dev,0x00);
SSD1306_WRITE_I(DEV,0xD5);
SSD1306_WRITE_I(DEV,0x80);
SSD1306_WRITE_I(DEV,0xD9);
SSD1306_WRITE_I(DEV,0x22);
SSD1306_WRITE_I(DEV,0xDA);
SSD1306_WRITE_I(DEV,0x02);
SSD1306_WRITE_I(DEV,0xDB);
SSD1306_WRITE_I(DEV,0x40);
SSD1306_WRITE_I(DEV,0x8D);
SSD1306_WRITE_I(DEV,0x10);
SSD1306_WRITE_I(0xAF);
ad_i2c_device_release(dev);
// os_leave_critical_section();
返回真;
}
static int ssd1306_write_i(i2c_device dev,uint8_t val)
{
uint8_t op [2] = {0x12,val};
返回AD_I2C_WRITE(DEV,OP,SIZEOF(OP));
}
#if cfg_demo_oled_ssd1306.
/ *组合湿度和压力传感器* /
i2c_slave_device(i2c1,ssd1306,0x78,hw_i2c_addressing_7b,hw_i2c_speed_standard);
#万一
嗨肯冲,
我没有看到任何错误的代码,你粘贴的代码,你可以正确打开适配器,然后你开始与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,并且您还将相应的引脚配置为periph_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”中添加以下代码
#define dg_configuse_hw_i2c(1)
#define dg_configi2c_adapter(1)
#define cfg_demo_hw_i2c(1)
#if cfg_demo_hw_i2c ||cfg_ad_i2c_1.
/ * i2c1 * /
#define cfg_gpio_i2c1_scl_port(hw_gpio_port_3)
#define cfg_gpio_i2c1_scl_pin(hw_gpio_pin_5)
#define cfg_gpio_i2c1_sda_port(hw_gpio_port_1)
#define cfg_gpio_i2c1_sda_pin(hw_gpio_pin_2)
#万一
#if 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();
#万一
嗨肯冲,
如果您使用的是具有端口3的QFN包,则应确定。由于您使用的是BLE项目尝试执行以下操作,我想使用BLE_ADV【使用率更有效,因为这是一个更简单的示例:
ad_i2c_write(dev,&addr,1);//执行一个字节写入
ad_i2c_read(dev,地址,1);//执行一个字节读取
所以请尝试上面有和没有I2C外设连接的,并检查至少68x是否会在总线上推送设备的地址。
谢谢mt_dialog.
我正在使用de ssd1306
没有花哨的动画。
您可以为我提供一个针对DA1468x的运行lib吗?
会救我一些时间:)
带着敬意
Peter de Nijs.