AG32VH407是一款AG32 MCU系列的三合一芯片,其芯片内部包含了MCU、2K CPLD和64Mbit PSRAM存储空间,它可以同时满足多种应用开发的需求,其围观如图1所示。

图1 开发板外观
在程序提示和烧录方面,是通过外挂的调试器,见图2所示。

图2 调试器
有了硬件的基础,要进行开发就免不了开发环境的主持及相关的例程。
在通常情况下,厂家为了便于用户学习和使用都会提供相应的例程以展示其内核的性能和使用方法。
其中,最普遍的方式就是按内核的性能分成多个文件目录,在每个目录下,又细分为多种工作模式或使用方式。
而对于AG32VH407开发板来说,其例程体系结构则是采用另一种方式,即在一个项目工程下,将各种例程都容纳旗下,然后在主程序里都排列其中,使用哪一个就去除注释加以使用,否则就注释掉免除其运行。
该主程序处于文件example.c中,见图3所示。

图3 包含内容
其具体的内容如下:
#include "example.h"
void Button_isr(void)
{
if (button_isr_cb) {
button_isr_cb();
}
UTIL_IdleMs(400);
GPIO_ClearInt(BUT_GPIO, BUT_GPIO_BITS);
}
void MTIMER_isr(void)
{
GPIO_Toggle(EXT_GPIO, EXT_GPIO_BITS);
INT_SetMtime(0);
}
void TestMtimer(int ms)
{
clint_isr[IRQ_M_TIMER] = MTIMER_isr;
INT_SetMtime(0);
INT_SetMtimeCmp(SYS_GetSysClkFreq() / 1000 * ms);
INT_EnableIntTimer();
while (1);
}
int main(void)
{
// This will init clock and uart on the board
board_init();
// The default isr table is plic_isr. The default entries in the table are peripheral name based like CAN0_isr() or
// GPIO0_isr(), and can be re-assigned.
plic_isr[BUT_GPIO_IRQ] = Button_isr;
// Any interrupt priority needs to be greater than MIN_IRQ_PRIORITY to be effective
INT_SetIRQThreshold(MIN_IRQ_PRIORITY);
// Enable interrupt from BUT_GPIO
INT_EnableIRQ(BUT_GPIO_IRQ, PLIC_MAX_PRIORITY);
// TestMtimer(500);
// TestAnalog();
// TestCan();
// TestCrc();
// TestFcb();
// TestGpTimer();
// TestGpTimerPwm();
// TestI2c();
// TestRTC();
// TestSpi();
// TestSystem();
// TestTimer();
// TestWdog();
// TestUart();
// TestFlash();
TestGpio();
}在主程序里,真正被使用的是TestGpio(),其它的测试均被注释掉而暂停使用。我们要进行其它的测试,完全可将其注释掉,而解开所调用的注释。
那函数TestGpio()又是啥内容呢?
其内容如下:
#include "example.h"
#include <stdio.h>
void TestGpio()
{
printf("Testing gpio\n");
int counter = 0;
while (1) {
printf("Test log\r\n");
UTIL_IdleUs(100e3);
GPIO_Toggle(EXT_GPIO, EXT_GPIO_BITS);
}
}也就是说,这是一个测试GPIO使用及 printf输出的函数。
至于所使用的GPIO引脚则是在文件board.h进行宏定义,其内容为:
#define LED_GPIO GPIO4
#define LED_GPIO_MASK APB_MASK_GPIO4
#define LED_GPIO_BITS (1 << 4)
为了能观察LED的变化效果,需配置这4个LED及所用串口的引脚,以匹配开发板上的硬件连接,其内容在文件example_board.ve中,即:
GPIO4_1 PIN_39 # LED1
GPIO4_2 PIN_38 # LED2
GPIO4_3 PIN_37 # LED3
GPIO4_4 PIN_36 # LED4
UART0_UARTRXD PIN_43
UART0_UARTTXD PIN_42
其中:GPIO4_1是引脚名称,PIN_39则是引脚号,这样就建立他们的对应关系。

图4 LED电路
弄清了例程的结构关系之后,即可自主地选取测试的功能或改造成所需的用途。
当然,要观察到运行结果的话,还需进行程序的编译和烧录。
与普通开发板不同的是,常规的开发板只需一次程序下载即可运行查看效果。
为了进行测试,需在 platformio.ini 中,对芯片及调试器的类型加以设置,其内容为:
board = agrv2k_103
board_logic.device = AGRV2KL64
debug_tool = cmsis-dap-openocd
upload_protocol = cmsis-dap-openocd
对于AG32VH407开发板来说,由于其特殊的设计结构,在烧录时通常要进行两次,即烧录VE和bin,见图5和图6所示。

图5烧录VE

图6 烧录bin
这便是AG32VH407开发板的例程体系构成及使用方法,对这方面的了解将有助于使用者快速进入程序设计的角色。
我要赚赏金
