嗨,
我想使用带有I2C接口的传感器以及信标。我正在使用信标参考设计作为我的起点。虽然每当我尝试为I2C总线配置引脚时,烽火台因未知原因停止广告。我在信标参考设计中所做的唯一变更是在函数set_pad中的periph_setup.c中,其中分配外设引脚以用于信标参考设计。所做的更改是:
//代码片段开始
void set_pad_functions(void)//设置GPIO端口功能模式
{
#if(CFG\u HW\u CONFIG==HW\u CONFIG\u SMARTTAG)
gpio_configurepin(gpio_port_1,gpio_pin_4,input_pulldown,pid_gpio,false);
GPIO\ U配置引脚(GPIO\ U端口\ U 0,GPIO\ U引脚\ U 6,输出,PID\ GPIO,false);
gpio_configurepin(gpio_port_0,gpio_pin_5,输入,pid_gpio,false);
if(!sys_startup_flag)
GPIO_ConfigurePin(GPIO_PORT_1,GPIO_PIN_5,OUTPUT,PID_GPIO,false);//绿色LED熄灭以降低功耗
gpio_configurepin(gpio_port_0,gpio_pin_0,input_pullup,pid_gpio,false);
GPIO\u ConfigurePin(GPIO\u PORT\u 0,GPIO\u PIN\u 3,INPUT\u PULLUP,PID\u GPIO,false);
gpio_configurepin(gpio_port_0,gpio_pin_1,input_pullup,pid_gpio,false);
gpio_configurepin(gpio_port_0,gpio_pin_2,input_pullup,pid_gpio,false);
#elif(cfg_hw_config == hw_config_dk)
gpio_configurepin(gpio_port_1,gpio_pin_1,input_pullup,pid_gpio,false);// push_button.
#elif(CFG\u HW\u CONFIG==HW\u CONFIG\u PVCELL)
gpio_configurepin(gpio_port_0,gpio_pin_0,input_pulldown,pid_gpio,false);
GPIO\u ConfigurePin(GPIO\u PORT\u 0,GPIO\u PIN\u 3,INPUT\u PULLDOWN,PID\u GPIO,false);
#elif(cfg_hw_config == hw_config_smarttag2)
gpio_configurepin(gpio_port_0,gpio_pin_1,输出,pid_gpio,false);//蜂鸣器 -
GPIO_ConfigurePin(GPIO_PORT_1,GPIO_PIN_0,OUTPUT,PID_GPIO,false);//蜂鸣器+
gpio_configurepin(gpio_port_1,gpio_pin_1,input_pulldown,pid_gpio,false);// push_button.
GPIO_ConfigurePin(GPIO_PORT_0,GPIO_PIN_2,OUTPUT,PID_GPIO,false);//发光二极管
gpio_configurepin(spi_gpio_port,spi_cs_pin,输出,pid_spi_en,true);
gpio_configurepin(spi_gpio_port,spi_clk_pin,输出,pid_spi_clk,false);
gpio_configurepin(spi_gpio_port,spi_do_pin,输出,pid_spi_do,false);
GPIO\ U配置引脚(SPI\ U GPIO\ U端口,SPI\ U DI\ U引脚,输入,PID\ U SPI\ U DI,false);
gpio_configurepin(gpio_port_0,gpio_pin_7,输出,pid_gpio,false);// spi_pe.
#elif(CFG\u HW\u CONFIG==HW\u CONFIG\u BEACON\u REF)
#ifdef CFG\u SPI\u闪存
gpio_configurepin(spi_gpio_port,spi_cs_pin,输出,pid_spi_en,true);
gpio_configurepin(spi_gpio_port,spi_clk_pin,输出,pid_spi_clk,false);
gpio_configurepin(spi_gpio_port,spi_do_pin,输出,pid_spi_do,false);
GPIO\ U配置引脚(SPI\ U GPIO\ U端口,SPI\ U DI\ U引脚,输入,PID\ U SPI\ U DI,false);
#万一
gpio_configurepin(i2c_gpio_port,i2c_scl_pin,输入,pid_i2c_scl,false); /////这是我添加的新行
gpio_configurepin(i2c_gpio_port,i2c_sda_pin,输入,pid_i2c_sda,false); /////这是我添加的新行
#万一
}
//代码段结束
是的,我已将i2c_gpio_port定义为端口0,i2c_scl_pin为p0.6和i2c_sda_pin作为p0.7,因此为什么要添加这两条线时的信标停止广告?有没有办法使用带信标参考设计的I2C驱动程序?
感谢致敬,
嗨Krutarth,
请检查灯架参考设计的各种配置,也许在某处有一个有关的内容,这取决于您的硬件配置。并在使用之前保留了GPIO引脚吗?如果存在冲突,这将给出线索。
谢谢mt_dialog.
谢谢你的建议mt_dialog。我尝试保留GPIO PIN,我有点困惑。如果你可以澄清我的混乱,这将有助于很多。当我写这些线条来保留GPIO时
//代码片段开始
保留_GPIO(SPI_CLK,I2C_GPIO_PORT,I2C_SCL_PIN,PID_I2C_SCL);
保留_GPIO(SPI_DI,I2C_GPIO_PORT,I2C_SDA_PIN,PID_I2C_SDA);
//代码段结束
该代码正常工作,但如果我在下面显示的更改,它会停止工作,我不知道为什么。
//代码片段开始
预留GPIO(I2C\ U SCL、I2C\ U GPIO\端口、I2C\ U SCL\引脚、PID\ I2C\ U SCL);
预留GPIO(I2C\ U SDA、I2C\ U GPIO\端口、I2C\ U SDA\引脚、PID\ U I2C\ U SDA);
//代码片段结束
我也使用I2C总线使用定义的常量SPI_CLK和SPI_DI有所作为?请通过此引导我。
感谢致敬,
嗨Krutarth,
据我所知,这不应该有任何区别,保留_GPIO中的名称参数只是一个名称,并且在宏保留_gpio中没有任何函数。你提到的是听起来很奇怪。
谢谢mt_dialog.
对不起,还有另一部分代码创造了它的问题
//代码片段开始
wait_until_i2c_fifo_is_empty();
//代码片段结束
现在我正在使用Pan1740评估套件,并且在总线上没有I2C设备。所以,如果调用此宏,它将结束一个无端的等待循环?我可以在不使用此宏的情况下使用I2C吗?我计划在使用固件完成后连接设备。
感谢致敬,
嗨Krutarth,
是的,这个宏将以无休止的while循环结束。我们不能确定会发生什么,如果你只是删除它,你应该使用驱动程序,因为是和测试你的固件。
谢谢mt_dialog.
嗨对话框,
我一直在尝试使用SDK提供的驱动程序来使用I2C从传感器读取温度数据。温度数据为2个字节,并存储在单个地址0x00中,我难以读取第二个字节,因为您在发送地址后的驱动程序中读取单个字节的所有功能。温度传感器为单个地址发送2个字节的数据。你能告诉我一个解决方案来持续为单个地址读取两个字节的数据。
感谢致敬,
关闭此票证在另一个线程中已解决。
感谢致敬,