汇顶模拟前端GH3220使用备忘录

驱动引脚的修改方式

SDK比较冗杂,如果不能获取原厂支持的话,建议还是使用KEIL开发驱动,.lib进行链接相对更友好一些。

优先讲解一下驱动管脚的修改位置:

①在gh_demo.c里面找到这个初始化函数入口int Gh3x2xDemoInit(void):

②往下翻找到这个hal层SPI注册函数;

③在gh_demo_user.c里面gh_spi_params这个结构体;

④跳转再跳转;

⑤找到这个配置IO的头文件

(middleware\gh3220\3-demo_code\demo_kernel_code\kernel\gh_demo_io_config.h)就快了;

⑥最后一跳;

⑦可以开始按照原理图连接修改了。

配置数组生成方法

①打开GHTool,点击load加载配置;

②推荐V420版本,使用最简单的一个HR_ADT_V4200配置;

③点击Wizard进入配置页面;

④从LED CONFIG开始配置,先把默认的删除,然后按照自己原理图的实际连接设置。

以我的这个为例,LED3控制可见红光,LED0控制IR,LED6和LED2控制可见绿光。

注意LEDx都是GH3220的Pin脚通道。

同一种颜色的灯一起勾选,然后点击ADD。

注意这是逻辑灯,不是物理灯,同一个颜色的灯只需要添加一次

⑤现在配置PD,我这里使用了两个PD,第一次把第一行的Rx0 Usage从false改为true,然后点击add;第二次把第一行的RX0 Usage改为false,然后把第二行的RX0 Usage(实则为RX1,上位机有UI错误)改为true然后添加。如果你想两个一起用,也可也同时打开TRUE。

⑥下面配置SLOT,前言:心率用绿灯,血氧用红灯和红外,佩戴检测和活体检测都是红外。

注意1个PD在1个SLOT当中只能用1次!

然后右击第一个·SLOT里面的LED方框,选择check config info,

把两个灯的AGC Type都选上。

⑦分配功能到不同的SLOT之上,然后点击CONFIG。

⑧注意先SAVE再LOAD新配置,然后在txt里面拉到最后面找到这两个数组。

⑨修改SDK里面的数组,第一处:

第二处:

驱动代码示例(主控芯片GR5525):

cpp 复制代码
#include "app_ble.h"
#include "app_flash.h"
#include "app_gsensor.h"
#include "app_log.h"
#include "app_spp.h"
#include "bsp_flash.h"
#include "bsp_icm42607p.h"
#include "bsp_led.h"
#include "bsp_log.h"
#include "bsp_nst117.h"
#include "bsp_rtc.h"
#include "gh_demo.h"
#include "gh_demo_config.h"
#include "gh_demo_inner.h"
#include "gh_drv.h"
STACK_HEAP_INIT(g_ble_heap_table);
static const uint8_t s_bd_addr[SYS_BD_ADDR_LEN] = {0x13, 0x00, 0xcf,
                                                   0x3e, 0xcb, 0xea};
extern GU8 g_uchGh3x2xIntCallBackIsCalled;
uint8_t spp_buf[247];
int main(void)
{
  int16_t temp;
  float accelx, accely, accelz;
  uint16_t len;
  SYS_SET_BD_ADDR(s_bd_addr);
  // BSP_LED_Init();
  BSP_Log_Init();
  BSP_RTC_Init();
  BSP_NST117_Init();
  BSP_ICM42607P_I2C_Init();
  BSP_Flash_Init();
  APP_GSENSOR_Init();
  ble_stack_init(APP_BLE_EvtHandler, &g_ble_heap_table);
  APP_BLE_SPP_Init();
  app_io_init_t io_init = {.mode = APP_IO_MODE_OUTPUT,
                           .mux = APP_IO_MUX_8,
                           .pin = APP_IO_PIN_0,
                           .pull = APP_IO_NOPULL};
  app_io_init(APP_IO_TYPE_AON, &io_init);
  app_io_write_pin(APP_IO_TYPE_AON, APP_IO_PIN_0, APP_IO_PIN_SET);
  int gh3220_ret = Gh3x2xDemoInit();
  if (gh3220_ret == GH3X2X_RET_OK)
  {
    Gh3x2xDemoStartSampling(GH3X2X_FUNCTION_HR);
  }
  else
  {
    APP_LOG_ERROR("GH3220 init failed: %d; sampling not started", gh3220_ret);
  }
  APP_LOG_INFO("Start Loop...");
  delay_ms(1000);
  while (1)
  {
    // temp = BSP_NST117_GetTempX100();
    // accelx = APP_GSENSOR_ReadAccelX();
    // accely = APP_GSENSOR_ReadAccelY();
    // accelz = APP_GSENSOR_ReadAccelZ();
    // sprintf(spp_buf, "T:%d  Accel: %.2f %.2f %.2f\r\n", temp, accelx, accely,
    //         accelz);
    // len = strlen(spp_buf);
    // APP_BLE_SPP_Send(spp_buf, len);
    // APP_LOG_INFO("%s", spp_buf);
    if (g_uchGh3x2xIntCallBackIsCalled == 1)
    {
      Gh3x2xDemoInterruptProcess();
    }

    // delay_ms(2000);
  }
}
相关推荐
G.E.M.小白1 小时前
单片机/嵌入式超全基础面试题(CPU/MCU/寄存器/三极管/数码管/位操作)
单片机·嵌入式硬件
jianqiang.xue2 小时前
ESP-IDF保姆级入门35|SDMMC高速SD卡全解:SDIO接口/4位高速模式/FATFS文件系统/热插拔检测/磨损均衡,掌握嵌入式大容量存储扩展
单片机·esp32
万物智能信息科技3 小时前
RGB并行屏输出—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
单片机·嵌入式硬件·华为·鸿蒙
新晨单片机设计3 小时前
S012A-基于STM32单片机光强检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件
盛世宏博智慧档案3 小时前
以太网温湿度传感器 TCP/IP、UDP、SNMP 协议怎么选?区别详细分析
单片机·tcp/ip·udp·以太网温湿度传感器
辰域电子4 小时前
STM32项目开源:电子秤计价系统(代码+原理图+仿真)
stm32·单片机·嵌入式硬件·开源·毕业设计·proteus
ysu_03144 小时前
基于 STM32 与 TinyML 的端侧手势识别系统
stm32·单片机·嵌入式硬件·mcu
Brilliantwxx4 小时前
【STM32 】把 printf 搬到串口上 —— C 标准 IO 函数重定向与多文件工程搭建(实战串口电灯)
c语言·开发语言·stm32·单片机·嵌入式硬件·架构·ecmascript
wuminyu4 小时前
Kafka利用sendfile与Page Cache实现高性能传输剖析
java·linux·c语言·jvm·c++