
工程配置
接上篇文章,这一章节我们来了解工程配置。
工程配置分为两部分:platformio.ini 和 example_board.ve
注:不仅 example 工程需要这两个配置,所有的工程都需要这两个配置文件。
其中:
platformio.ini 配置 工程的编译、烧录、仿真的选项;
与 IDE 相关。
example_board.ve 配置 芯片系统时钟频率、芯片 IO 引脚映射 等;
该文件中的配置是要被烧写到 flash 中的,做为该芯片独特的配置。
与用到的芯片有关。
这里的配置项,就是配置项目如何进行编译、烧录、仿真,以及使用芯片型号、
引用库等。
这里只对常用的几个配置做简单的描述,更多的清参考《AG32 下 platformio 的配置描述》或者联系海振远科技咨询。
boards_dir = boards //指定 board 对应的工作路径(用于代码编译的 path)
board = agrv2k_103 //使用 boards_dir 路径下的哪个硬件版本
//注:boards_dir 和 board 共同组成了完整 path。
//如:以上对应路径\platforms\AgRV\boards\agrv2k_103。
//这个路径下的.c 和.h 会被编译到工程,这个路径下的资源被默认查找;
board_logic.ve = example_board.ve
//工程使用到的 ve 配置文件(每个工程必须指定自己的 ve 文件)
//如果用相对路径,是相对于 platformio.ini 所在的路径(即:工程路径)
framework = agrv_sdk, agrv_lwip //使用工程中的哪些库。SDK 是必带的。
//工程中可添加的库,具体参考工程注释中的描述;
//使用多个库时名字中间加逗号隔开。
program = agm_example //工程名,可自定义,仅作用于生成的 bin 名称
src_dir = .
//参与编译的 c 文件基目录(路径相对于工程路径)
include_dir = . //参与链接的 h 文件基目录(路径相对于工程路径)//注意,如果工程内文件夹比较多,这里不要再使用./src(而是使用.)
build_src_filter = "-<*> +<*.c> +"
//参与编译的 c 文件路径列表
//*用于通配,+增加,-去除,**用于匹配所有子目录
//路径基于上边 src_dir 给出的路径
build_flags = -Isrc -Iuser -Iuser/print //头文件路径列表
//-I 后边是一个个文件夹,各项之间用空格来分开
board_logic.device = AGRV2KL100 //芯片类型配置
//64 脚的封装应配置为 AGRV2KL64
logger_if = UART0 //芯片输出 log 用的串口号(对应代码中 printf 函数)
//注意:UART0 同时用于代码烧录,但烧录和 log 输出并不冲突
//如果用串口 1 输出 log,这里设置为:UART1
monitor_speed = 115200 //芯片输出 log 用的波特率 (sdk1.5.0 之后新增)
//注意:用宏 BAUD_RATE=115200 的方式也能设置波特率(1.5.0 之前是用宏方式)
upload_protocol = jlink-openocd //烧录固件的方式
//可选方式:jlink、dap(官方烧录器)、serial,字段名称参考注释部分
debug_tool = jlink-openocd//仿真时使用的工具,同上
以上几个是常用配置项
AG32 芯片和其他芯片(比如 ST、GD)在使用上有一个很大的差异点,是 AG32的 IO 引脚并不是定死的,而是配置的。
比如,ST 的 gpio 的 PA1,是定死指定到某个 PIN 脚的;
但是,AG32 的所有 gpio,对应到哪个 PIN 脚是配置的。必须在 VE 里配置绑定后,程序里操作这个 gpio(比如,置高置低)才会最终作用到 PIN 脚上。
除了 gpio,其他的很多外设(如 spi,iic,can,uart 等)都是需要配置引脚的。Mcu 里用到哪个信号就在 VE 里配置对应引脚,没用到的不用配置。
这种方式下:
1. 可以节省大量引脚(开发者只需要配置自己使用到的外设引脚即可)
2. PCB 布线可以非常方便(引脚随意指定,不用再考虑走线时绕来绕去)在引脚配置上,也有一些限制,参后续描述。
ve 配置方式(以 example_board.ve 为例):
SYSCLK 100 #配置系统时钟频率,M 为单位。407 最高频率可到 248M
HSECLK 8#使用的外部晶振频率,M 为单位,建议取值范围 4~16
UART0_UARTRXD PIN_69 #串口 0 的收引脚
UART0_UARTTXD PIN_68 #串口 0 的发引脚
GPIO6_2 PIN_23 #IO_Button1
GPIO6_4 PIN_24 #IO_xxxx
I2C0_SDA PIN_36 #I2C0
I2C0_SCL PIN_35 #I2C0
……
GPTIMER1_CH0 PIN_7 #配置 GpTimer1 的 channal 0 输出到管脚 7
……
在书写格式中,前边为信号量的名称,后边为 PIN 脚编号。
(如果用到 mcu 和 cpld 联合开发,cpld 信号量也在 ve 配置,这里不做细述)
这里着重描述一下 GPIO 的使用:
AG32 芯片内共有 10 组 GPIO(GPIO0 – GPIO9),每组 8 个 IO(0~7)。所以,可用的 GPIO 共有 80 个。(100pin/64pin/48pin 只是外部封装的区别,不影响内部 GPIO 的定义和数量)
虽然总数有 80 个,但真正在 VE 里绑定了 PIN 脚的那些 gpio 才会“有效”。
GPIOx_y 表示的是第 x 组第 y 个 IO。
比如上图中,GPIO6_2 表示的就是第 6 组的第 2 个 IO。程序里操作 GPIO6_2 实际操作的就是 PIN_23 引脚。
VE 里这些使用到的左列的信号名称,请从文档《AGRV2K_逻辑设置.pdf》中查找。
配置的限制:
1. 只有少数几个外设不能配置引脚(芯片定死了引脚):
包括:ADC/DAC/CMP、USB、MAC。
如果使用到这些外设,只能使用对应引脚。
如果不用这些外设,空闲出来的引脚可以被用于其他用途。
2. 在可配置的项中,注意相互间的少量冲突;
在《AGRV2K_逻辑设置.pdf》中有详细描述。
另外:不可配置的引脚(ADC、USB 这些),在 32pin/48pin/64pin/100pin 上的对应是不同的。注意区分。

小结
本章节主要是了解AG32的工程配置以及两部分工程配置:platformio.ini 和 example_board.ve。下一章节,我们将介绍AG32使用的第四个步骤:编译程序,欢迎持续关注海振远科技。