一、说明
实现一个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节。