汇顶模拟前端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);
  }
}
相关推荐
沐晓时光11 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
Zwawa15 小时前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
c语言·单片机·嵌入式
David猪大卫17 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger17 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
安妮细水长流21 小时前
ad7124
c语言·单片机
en.en..1 天前
STM32 HAL 库 | 核心知识点整理
单片机·嵌入式硬件
无敌贵点大王1 天前
从寄存器层面重学STM32(9)——DMA理论
stm32·单片机·嵌入式硬件
希和20271 天前
51 单片机入门笔记:江科大课程代码逐行讲解(按键控制 LED 流水灯)
笔记·单片机·mongodb
希和20271 天前
51 单片机按键控制 LED:江科大课程代码小白笔记
笔记·单片机·嵌入式硬件
希和20271 天前
51 单片机 LED 流水灯:从直接法到循环法(江科大课程笔记)
笔记·单片机·mongodb