AG32在VSCode下的使用入门(五)

浏览: 作者:Robitn 来源: 时间:2024-09-01 分类:软件使用手册
AG32 使用入门(五)


Daplink(或 Jlink)仿真

烧录完成后,如果要仿真跟踪代码时,可通过 daplink 或 jlink 的方式。

使用时,需要在 platformio.ini 中指定:

用 daplink 时:debug_tool = cmsis-dap-openocd

用 jlink 时:debug_tool = jlink-openocd

在仿真的操作上,两种方式完全相同。

按以下步骤启动:

12

13

14

正常运行起来后,这个样子:

15

接下来就可以单步程序了。debug 调试中的快捷键和 VS 一致。



进入开发

前边已经了解 SDK 工程的编译烧录,这里简单介绍 gpio 和串口的使用。

举例 gpio 的使用:

举例:用 pin3 引脚接 led 灯,并控制亮灯(高为亮),则需要做:

1. ve 文件中设置: GPIO4_5 PIN_3

2. 代码中定义三个宏:

#define LED_G_GPIO GPIO4

#define LED_G_GPIO_MASK APB_MASK_GPIO4

#define LED_G_GPIO_BITS GPIO_BIT5

3. 代码中调用:

SYS_EnableAPBClock(LED_G_GPIO_MASK);

GPIO_SetOutput(LED_G_GPIO, LED_G_GPIO_BITS);

GPIO_SetHigh(LED_G_GPIO, LED_G_GPIO_BITS);

4. 先烧录 ve 部分;

5. 再编译烧录代码部分;

以上代码的解释:

1. 不管外部封装是多少 pin(48pin/64pin/100pin),芯片内部可用 gpio 都有 80 个。

在使用 gpio 时,需要把使用到的 gpio 关联到外部 pin 脚。

(没被关联的 gpio,即使在代码中操作它,也不会传导到外部 pin 脚)

这步关联动作是在 ve 文件中进行的。

ve 文件里的配置,GPIOx_y PIN_z,就是关联的语句。

PIN_z,对应外部哪个引脚。z 取值范围(48 脚封装:0~47;64 脚封装:0~63)

GPIOx_y,对应内部哪个 GPIO。x 取值范围(0~9),y 取值范围(0~7);

80 个 gpio 分为 10 组,每组 8 个。用 GPIOx_y 的格式来表达。如:

GPIO0_1 对应第 0 组的第 1 个 IO;

GPIO4_5 对应第 4 组的第 5 个 IO;GPIO9_7 对应第 9 组的第 7 个 IO…

2. 在代码中如何操作 GPIO:

仍以 GPIO4_5 举例:

在代码里定义:

#define LED_G_GPIO GPIO4

#define LED_G_GPIO_BITS (1 << 5) (或用宏 GPIO_BIT5)

则意味着 LED 对应到了 GPIO4_5。

调用函数 GPIO_SetOutput 设置改 IO 为输出模式:

GPIO_SetOutput(LED_G_GPIO, LED_G_GPIO_BITS);

然后就可以通过 GPIO_SetHigh/GPIO_SetLow 来置高置低 IO 口。

如果要设置上拉下拉,请参考文档《AG32 驱动的使用.pdf》中对 gpio 部分的详述。

举例 log 输出:

16


通过串口烧录 mcu 程序时,是固定使用 mcu 的 uart0。建议 mcu 在运行时也使用uart0 来输出 log。

在 VE 里设置后,代码中的 printf 函数将通过 uart0 来输出。

1. 在 ve 中配置输出 Log 的串口:

logger_if = UART0

build_flags = -DBAUD_RATE=115200 //增加系统宏 BAUD_RATE 为 115200

从 SDK1.5.0 之后,最好使用 monitor_speed = 115200 替代这种宏的用法。

2. 在 ve 中设置串口 0 的映射引脚,如:

UART0_UARTRXD PIN_69

UART0_UARTTXD PIN_68

3. 在程序的 board_init()函数中,有 UART0 的初始化:

在该初始化中,会设置串口的波特率、位宽、停止位、奇偶位。

21



如果不想使用 UART0 输出 log,要改用 UART1。那么在 ve 配置中对应修改:

logger_if = UART1

UART1_UARTRXD PIN_xx

UART1_UARTTXD PIN_xx

即可。

关于系统的宏定义:

在代码中出现的宏,在 VSCode 中通过鼠标停留在上边,可以看到其定义值。

这些宏,除了代码中定义的外,还有“系统预制宏”也可以被代码中使用。

系统宏的两类:

1. 定义在 platformio.ini 中的 build_flags 字段中;

如 上边定义的波特率:build_flags = -DBAUD_RATE=115200

在 build_flags 后边用 -D 表示是系统宏。后边的紧跟的字符串 BAUD_RATE=115200

(字符串中间不能有空格),则相当于 C 代码中的 #define BAUD_RATE 115200

如果有多个宏,则 -D 与下个 -D 之间用空格 隔开。

2. 在 platformio.ini 中定义后再由 main.py 经过转换拼接,才最终使用的宏。

比如上边截图中的 LOGGER_UART。

这个宏并没有在代码中定义,也没在 build_flags 中定义。但它是在 agrv_sdk.py 中引用

时再拼接的。

第二种方式了解即可,不要使用。开发者使用第一种就够了。


增加编译目录

在开发中,新增了 c 文件和 h 文件,怎么编译进来?

1. 如果新增文件在原有路径下,则会被自动关联进来编译;

2. 如果新增一个文件夹,则要把该文件夹加入到编译选项中;

如果文件夹下存放 C 文件:在 src_filter 中增加该文件夹

如果文件夹下存放 h 文件:在 src_build_flags 中增加该文件夹

举例:

在 example 项目里,只有一个 src 文件夹(里边存放全部.c 和.h)。编译设置为:

src_dir = .

include_dir = ./src

build_src_filter = "-<*> +<./src/**/*.c>"

其中:

src_dir 定义“.c 文件编译时,查找路径的基路径”

include_dir 定义“.h 文

src_build_flags 是新增的“设置头文件查找路径”的选项。每个头文件路径用 -I 来加入,

多个-I 之间加空格。

注意:在 build_src_filter 和 src_build_flags 中,都是使用相对路径。他们是从

src_dir/include_dir 定义的基路径上再开始的。

如果工程含有 c++的文件,只需在 build_src_filter 的选项中增加 cpp 选项,如:

build_src_filter = "-<*> +<./src/**/*.c> +<./src/**/*.cpp>"

件编译时,查找路径的基路径”

build_src_filter 定义 “.c 文件从哪些路径下搜索”,星号代表通配,双星代表子目录通

配,+表示增加一个搜索路径,-表示去除一个搜索路径

如果要新增一个文件夹 print(跟 src 同级),里边也有.c 和.h,可以设置如下:

src_dir = .

include_dir = .

build_src_filter = "-<*> +<./src/**/*.c> +<./print/**/*.c>"

src_build_flags = -Isrc -Iprint

其中:

include_dir 路径也退回到根路径下;

build_src_filter 加入 print 文件夹的选项;



小结

本章节主要展示和示范AG32使用的Daplink(或 Jlink)仿真,进入开发, 增加编译目录。下一章节,我们将介绍展示和示范AG32 使用的脱机烧录,flash 的大小与两个 bin, 更多:了解 platformio 插件,如需要了解更多信息,或者订购芯片,欢迎联系海振远科技。