嗨对话框,
一周已经消失了,但我不能在HRP_Sensor项目中添加I2C。
在开始时,我研究了PerInirewals_Demo并了解关于DG_Configusexxx和项目的文件系统。
然后我搬到了HRP_Sensor项目,因为它启用了BLE函数,即我的目标。
它不容易理解项目filipherals_demo,文件嵌套深,main.c - > periph_setup.c - > demo_i2c.c. ......
Project HRP_Sensor很简单,只有2个文件。
但是,困扰将I2C添加到HRP_Sensor中的简单工作。
这些是我跟随的步骤:
1.在custom_config_qspi.h中
#define dg_configuse_hw_i2c 1
#define dg_configi2c_adapter 1.
从platform_device.h迁移代码,如下所示:
// -------------------------------------------------------
#if dg_configi2c_adapter
I2C_BUS(I2C1)
i2c_slave_device(i2c1,“max30100”,0xae,hw_i2c_addressing_7b,hw_i2c_speed_standard);
I2C_BUS_END.
#endif / * dg_configi2c_adapter * /
// ---------------------------------------------------------
包括“ad_i2c.h”// ---这定义了i2c_bus()
2.在Main.c
注释出platform_device.h - 这是每个项目的一个通用文件,并定位:\ sdk \适配器\包含
//#包含“platform_devices.h”
#include“hw_i2c.h”
在Periph_init Fuction中添加I2C Init代码
// ----------------------------------------------------------------
// ---- i2c的hw in ---
/ *
*以标准通信速度(100 kB / s)和初始化主模式I2C控制器初始化I2C控制器
*以7位寻址模式传输。
* /
静态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());//
hw_i2c_disable(hw_i2c1);
hw_i2c_set_target_address(hw_i2c1,0x7e);// max30100.
hw_i2c_enable(hw_i2c1);
/ *
*在案例中设置地址意味着我们将使用新设备进行一些传输。为了这
*原因是重置中止源是良好的,以便在干净的状态下(以避免拥有
*中止源以先前传输到其他设备),否则我们需要记住
*在每次转移之前都在其次。
* /
hw_i2c_reset_abort_source(hw_i2c1);
// ------------------------------
构建此项目时,存在错误:找不到'ad_i2c.h'!- 但是在包括的包括,文件ad_i2c.h是:包括 - > hrp_sensor / sdk /适配器/包含
怎么了?
是否有用于通过步骤添加I2C围绕的指导/手册?
请您向我发送一个基于HRP_Sensor的项目,I2C扩展了吗?
谢谢
嗨jamesleo-konka,
1)在Custom_config_qspi.h文件中启用允许是正确的,因此您可以使用QSPI的HW和适配器。
2)关于platform_devices.h文件作为我的另一个帖子提到的,如果您有自定义,则将使用它而不是默认值。
3)支持站点上没有上传的文件,尽管如此,您不必调用在Periph_setup()函数中提到的函数。这
Periph_Init函数本质上是一个回调,其中存储Periph_setup()函数,如果函数未为null的指针,则会调用并调用。所以在这方面
Periph_setup()函数您必须为I2C功能配置为I2C功能配置,通常HW_GPIO_CONFIGURE()用于传递的GPIO_CONFIG数组
作为每个引脚的电缆的参数,使用HW_GPIO_PINCONFIG宏。I2C HW的初始化将由I2C适配器完成您
在外围设备遗失期间,不需要明确地执行此操作(如果您在Platform_Devices.h文件中正确定义了外部设备)
当HW_I2C_SET_TARGET_ADDRESS()调用时,并不意味着I2C事务开始,您只需设置I2C模块的目标寄存器,
使用API可用启动交易,模块将在开始事务时立即启动总线上的数据输出。例如,在Periph_setup()函数中设置引脚并在platform_devices中声明您的设备和违反您启用的I2C适配器和驱动程序,您开始事务,例如,从传感器中读取包含以下传感器的字节命令your_device's_handle = ad_i2c_open(your_device),然后是ad_i2c_transact(your_device's_handle,address_to_read,size,Out_buffer,size)。
关于编译器找不到它的文件,我无法复制,我一旦将其添加到hrp_sensor_task.c文件时,Eclipse就查找了AD_I2C.H文件,是SDK /适配器/包含的目录在包括路径中?
关于项目请求,我很抱歉,但没有基于I2C传感器的心率项目。
谢谢mt_dialog.
嗨mt_dialog,
感谢您的回复。
根据对话框的工程师的方法,我试图在custom_config_qspi.h中in init i2c适配器,但在'ad_i2c.h'失败。
它奇怪的是“ad_i2c.h”不能包含在custom_config_qspi.h中,但如果在main.c中使用,则可以!
所以我将代码移动到main.c中,它通过了建筑物。
在Project Peripherals_demo中,GPIO端口/引脚已在Periph_setup()中初始化,也是I2C:Demo_i2c_init()
// ----------------------------------
void demo_i2c_init(void)
{
/ *
*以标准通信速度(100 kB / s)和初始化主模式I2C控制器初始化I2C控制器
*以7位寻址模式传输。
* /
静态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());
}
// ------------------------------------
似乎没有需要初始化GPIO端口/引脚。
BTW,最后行的函数是什么:srand(os_get_tick_count());?
我将检查I2C的Adater代码,如AD_I2C_OPEN(I2C_DEVICE_ID DEV_ID),AD_I2C_TRANSACT,...
谢谢
嗨jamesleo-konka,
您不需要,这在外围设备演示中使用,因为它使用rand()函数来填充其写缓冲区中的随机数据(它将随机数据写入EEPROM)。
谢谢mt_dialog.