一、说明
实现一个LED闪烁的Demo,Grove Vision AI V2开发板上有一个USER_LED,由GPIO SEN_D2驱动,SEN_D2为高电平是USER_LED亮,SEN_D2为低电平时USER_LED灭。
USER_LED部分电路如下:


二、创建例程
1、创建文件
在Seeed_Grove_Vision_AI_Module_V2/EPII_CM55M_APP_S/app/scenario_app/目录下创建gpio目录。将Seeed_Grove_Vision_AI_Module_V2/EPII_CM55M_APP_S/app/scenario_app/imu_read/下的drv_user_defined.mk
imu_read_app.c
imu_read_app.h
imu_read_app.ld
imu_read_app.mk
imu_read_app.sct
六个文件复制到gpio目录下,然后修改文件名字:

2、增加一个APP类型
打开gpio_app.mk文件,修改内容:
APPL_DEFINES += -DIMU_READ_APP
改为
APPL_DEFINES += -DGPIO_APP
override LINKER_SCRIPT_FILE := $(SCENARIO_APP_ROOT)/$(APP_TYPE)/imu_read_app.sct
改为
override LINKER_SCRIPT_FILE := $(SCENARIO_APP_ROOT)/$(APP_TYPE)/gpio_app.sct
override LINKER_SCRIPT_FILE := $(SCENARIO_APP_ROOT)/$(APP_TYPE)/imu_read_app.ld
改为
override LINKER_SCRIPT_FILE := $(SCENARIO_APP_ROOT)/$(APP_TYPE)/gpio_app.ld 
打开Seeed_Grove_Vision_AI_Module_V2/EPII_CM55M_APP_S/app/main.c,增加内内容:
#ifdef GPIO_APP
#include "gpio_app.h"
/* main entry */
int main(void)
{
	board_init();
	app_main();
	return 0;
}
#endif 
3、编写代码
将gpio_app.h文件改为如下内容:
/*
 * gpio_app.h
 *
 *  Created on: Aug 22, 2024
 *      Author: huochaigun
 */
#ifndef APP_SCENARIO_GPIO_APP_
#define APP_SCENARIO_GPIO_APP_
#define APP_BLOCK_FUNC() do{ \
	__asm volatile("b    .");\
	}while(0)
int app_main(void);
#endif /* APP_SCENARIO_GPIO_APP_ */
 
将gpio_app.c文件改为如下内容:
#include <stdio.h>
#include <assert.h>
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#ifdef TRUSTZONE_SEC
#ifdef FREERTOS
/* Trustzone config. */
//
/* FreeRTOS includes. */
//#include "secure_port_macros.h"
#else
#if (__ARM_FEATURE_CMSE & 1) == 0
#error "Need ARMv8-M security extensions"
#elif (__ARM_FEATURE_CMSE & 2) == 0
#error "Compile with --cmse"
#endif
#include "arm_cmse.h"
//#include "veneer_table.h"
//
#endif
#endif
#include "xprintf.h"
#include "timer_interface.h"
#include "hx_drv_scu.h"
#include "hx_drv_gpio.h"
#include "gpio_app.h"
/*!
 * @brief Main function
 */
int app_main(void) {
	xprintf("Start gpio App\n");
  hx_drv_gpio_init(GPIO_GROUP_2, HX_GPIO_GROUP_2_BASE);
	while ( 1 )
	{
    hx_drv_gpio_set_out_value(GPIO20, GPIO_OUT_HIGH);          //LED ON.
		hx_drv_timer_cm55x_delay_ms(500, TIMER_STATE_DC);
   
    hx_drv_gpio_set_out_value(GPIO20, GPIO_OUT_LOW);          //LED OFF.
		hx_drv_timer_cm55x_delay_ms(500, TIMER_STATE_DC);
	}
	return 0;
} 
三、编译
1、指定APP_TYPE
将Seeed_Grove_Vision_AI_Module_V2/EPII_CM55M_APP_S/makefile中的APP_TYPE赋值为gpio:
APP_TYPE = gpio 
2、导入编译工具的环境变量
export PATH="$HOME/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/:$PATH" 
3、编译
cd到EPII_CM55M_APP_S目录,然后执行make clean,再执行make:
cd EPII_CM55M_APP_S
make clean
make 
如果之前编译过其它应用,必须执行make clean,不然编译会失败。
编译成功之后生成如下文件:
Memory region         Used Size  Region Size  %age Used
 CM55M_S_APP_ROM:       60596 B       256 KB     23.12%
CM55M_S_APP_DATA:       12452 B       256 KB      4.75%
    CM55M_S_SRAM:          0 GB      1924 KB      0.00%
arm-none-eabi-size obj_epii_evb_icv30_bdv10/gnu_epii_evb_WLCSP65/EPII_CM55M_gnu_epii_evb_WLCSP65_s.elf
   text    data     bss     dec     hex filename
  62492     440   10108   73040   11d50 obj_epii_evb_icv30_bdv10/gnu_epii_evb_WLCSP65/EPII_CM55M_gnu_epii_evb_WLCSP65_s.elf 
四、生成镜像
请参照Himax SDK Download and Build-CSDN博客的3.4节。












![【亲测有效】JS Uncaught TypeError: [function] is not a constructor](https://i-blog.csdnimg.cn/direct/f1ffc6dca72b451f826b8a2942a65c16.png)






