阅读本文前 ,请参照《AG32 开发环境搭建.pdf》,先搭建好 AG32 运行环境。
通过本文 ,可以了解到怎么在 VSCODE 下的完成开发工作。
一、了解 SDK 目录结构:
安装完 SDK 后 ,首先了解下 SDK 工作路径下的文件结构:

以上几个红色标圈的目录 ,是在后续编写代码时常用的几个目录。
其中:
framework-agrv_sdk 是整个 SDK 的基础支撑部分。包含全部的驱动代码、board代码、输出重定向代码。该 framwork 是开发者在创建自己工程时必须依赖的
framwork(所有examples样例工程中都可以看到该项)
其中的 ips/lwip/usb ,是第三方的库 ,开发者根据自己需求决定是否使用它们。目前支持的四个操作系统 :ucos/rtthread/freertos/embos ,也在这里可以看到。
点开 framework-agrv_sdk 目录 ,src 中包含全部的驱动代码。

了解完依赖包 ,再看examples。
examples 中包含了众多的样例工程:example(基础驱动)、各种 OS 使用、lwip 使用、usb 使用,
其中的example 工程 ,包含了基础驱动的举例:

【这个是最基础的工程 ,随后会展示和示范】
二、打开第一个工程:example
看完目录结构 ,再来打开第一个样例工程(examples/example样例工程)。
打开方式:Vscode (左上角)【文件】 -> 【打开文件夹】 -> 弹出框中选该工程。
VSCODE 打开后如图:

上图的 main()函数 ,是 example 工程的主入口。
然后 ,board_init 函数中 ,会进行时钟初始化、GPIO 初始化、log 串口初始化; INT_EnableIRQ 是使能某种类型的中断;
再接下来 ,就是对各驱动的测试函数。需要测试时,放开对应项。
上边展示的环境 ,就是 AG32 芯片的开发环境。
在这个 IDE 中 ,开发者可以编写代码、修改配置、编译、调试、烧录。
事实上 ,在 example 工程中 ,除了上图的代码 ,还有两处重要的配置文件:

1. example_board.ve 管脚配置:
位于路径:AgRV_pio\platforms\AgRV\examples\example
该配置文件中 ,配置芯片主频及 pin脚映射。
2. platformio.ini 工程配置:
位于路径:AgRV_pio\platforms\AgRV\examples\example
该文件是工程配置文件 ,里边定义 IDE 的编译/烧录/仿真及工程宏的选项。
三、工程配置:
接上述 ,了解工程配置。
两部分工程配置:platformio.ini 和 example_board.ve
注:不仅example 工程需要这两个配置,所有的工程都需要这两个配置文件。
其中:
platformio.ini 配置 工程的编译、烧录、仿真的选项;
与 IDE 相关。
example_board.ve 配置 芯片系统时钟频率、芯片 IO 引脚映射 等;
该文件中的配置是要被烧写到 flash 中的 ,做为该芯片独特的配置。
与用到的芯片有关。
A. platformio.ini 配置项:
这里的配置项 ,就是配置项目如何进行编译、烧录、仿真 ,以及使用芯片型号、引用库等。
以下只对通用的几个配置项做简单的描述。
(更多的配置项, 在随后其他模块中使用到时, 会相应列出)
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 //烧录固件的方式
//可选方式:j link、dap(官方烧录器)、serial ,字段名称参考注释部分debug_tool = jlink-openocd //仿真时使用的工具 ,同上
以上几个是常用配置项。
B. example_board.ve 配置项:
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。
如果使用到这些外设 ,只能使用对应引脚。
如果不用这些外设 ,空闲出来的引脚可以被用于其他用途。
2. 在可配置的项中 ,注意相互间的少量冲突;
在《AGRV2K_逻辑设置.pdf》中有详细描述。
另外:不可配置的引脚(ADC、 USB 这些),在 32pin/48pin/64pin/10pin 上的对应是不同的。注意区分。
关于管脚配置和 GPIO 的更详细描述 ,请参考《AG32 下驱动的使用.pdf》。
四、编译程序:
程序编译可以通过 2 种方式 :pio 左栏按钮、命令行;
1. Pio 左栏按钮:

点下按钮编译后 ,会自动弹出终端窗口显示编译过程。
2. 命令行方式:
在“终端”通过命令行进行的工程编译。命令 :pio run -e debug -v使用如图:


不管使用上边的哪种方式 ,编译和烧录成功时 ,会有 success 的提示如下:

五、烧录程序(和ve 配置):
注意:AG32 烧录程序和烧录 VE 配置是分开的。
程序有改动 ,就编译后烧录程序;VE 有改动 ,就烧录 VE。
两者相互独立 ,各烧各的。烧录没有先后顺序之分。两者的烧录接线都相同 ,只是按钮不同。
新开发板的第一次烧录 ,必须先烧录 VE ,再烧录程序。
烧录支持三种方式:daplink、jlink 和串口。
daplink 烧录:
daplink 方式是官方推荐的烧录方式 ,官方提供的烧录工具属于这种类型。
1. 配置烧录方式:
如果使用 daplink 来烧录 ,需要在 platformio.ini 中进行相应配置。
配置方法:
修改 upload_protocol 项 ,使 :upload_protocol = cmsis-dap-openocd
(注 ,使用 daplink 烧录时 ,无需配置 upload_port 项)
2. 烧录程序:
烧录方法和上边的编译相似 ,也是 2 种方式:下边按钮、命令方式。如下图(二选一):


烧录命令 :pio run -e release -t upload
3. 烧录 ve 文件:
在烧录ve 配置时 ,只支持两种方式:左边栏和命令方式。如下图:(二选一)


烧录命令 :pio run -e release -t logic
注:烧录到 flash 的 ve 配置 ,就是在 platformio.ini 中指定的 board_logic_ve 项。如样例中的:board_logic.ve = example_board.ve
4. 烧录结果提示:
在烧录固件或者ve 配置完成时 ,都会有 SUCCESS 提示。
如果烧录失败 ,会有红色 Error信息给出对应的失败原因。
烧录中 ,最常见的报错是 “Error connecting DP: cannot read IDR”。
如果是新焊接的板子 ,需要检查:芯片是否有虚焊、芯片供电、link 接线管脚是否正常 ,是否对应;
如果是正常使用中突然出现 ,可以 Boot0 拉高 ,重新上电芯片 ,重新插拔烧录器 ,再尝试。
Jlink 烧录:
Jlink 烧录和 daplink 烧录有两点差异 ,其他均完全相同。
1. 在首次烧录前 ,需要先安装插件 zadig-2.8.exe。
注:该插件是 jlink 正常驱动的插件。在安装该插件前 ,确保电脑上已经安装过j link 的驱动 ,并能正常使用 jlink。
安装插件时 ,需要将 jlink 连接到电脑 ,然后再安装。
该插件位于 SDK 解压后的根目录下。
安装方式参下图:

注:开发中如重装过电脑, 或重新安装过 jlink 驱动,需要再次安装该驱动插件。
2. 在配置文件中修改烧录方式为:
upload_protocol = jlink-openocd
这里配置修改完后 ,烧录按钮(或命令) ,跟 dap-link 是完全一样的。
串口烧录:
1. 串口烧录前 ,要先使芯片进入烧录模式;
进入烧录模式的方法 :boot1 接地, boot0 接高。
2. 在 platformio.ini 的配置里 ,配置成串口烧录并指定 PC 使用的串口号;
配置方法:
修改 upload_protocol 项 ,使 :upload_protocol = Serial
修改 upload_port 项 ,使 :upload_port = COMx (x 是编号)
烧录时的波特率可以在[env:serial] 中修改 ,如 :upload_speed = 115200 (注:烧录时芯片端必须使用UART0)
3. 烧录程序和烧录 ve;
按钮方式 ,串口烧录和 jlink 烧录时相同(可参照上边 jlink 烧录的介绍)
命令方式,(把 release 换成 serial)。
烧录程序的命令 :pio run -e serial -t upload
烧录 ve 的命令 :pio run -e serial -t logic
4. 烧录成功后的反馈;
同 jlink 烧录相似,成功也会有 SUCCESS 提示;烧录失败会有红色 FAIL 提示错误原因。
总结下几个常用命令(如果使用命令的话):编译(debug) :pio run -e dev -v
#串口烧录 ve 配置:pio run -e serial -t logic
#串口烧录 code:pio run -e serial -t upload jlink 烧录 ve 配置: pio run -e release -t logic j link 烧录 code: pio run -e release -t upload
注:这里的烧录 VE,其实是烧录 logic。更多信息请参考后边描述。
六、daplink(或 jlink)仿真:
烧录完成后 ,如果要仿真跟踪代码时 ,可通过 daplink 或 jlink 的方式。使用时 ,需要在 platformio.ini 中指定:
用 daplink 时:debug_tool = cmsis-dap-openocd
用 jlink 时:debug_tool = j link-openocd
在仿真的操作上 ,两种方式完全相同。
按以下步骤启动:


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

接下来就可以单步程序了。debug 调试中的快捷键和 VS 一致。
注:从 SDK1. 5.0 之后(安装包为 AgRV_ pio-1. 5.0-win64-release), debug 调试除了当前的 pio-debug 外,还支持cortex-debug 插件。具体使用方法, 请参考网盘文档《AG32 下使用 cotex 插件调试程序》
七、进入开发:
前边已经了解 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 输出:
通过串口烧录 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 的初始化:
在该初始化中 ,会设置串口的波特率、位宽、停止位、奇偶位。

如果不想使用 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 文件编译时 ,查找路径的基路径”
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 文件夹的选项;
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> ”
九、脱机烧录:
脱机烧录前需要先编译出最终 bin(这个 bin是 code和 ve 整合后的 bin)。
方式如下:

编译完成后 ,可以在工程路径下找到生成的 xxxx_release_batch.bin。
然后 ,运行 PC 下载工具(该工具在 SDK 安装路径下):

下载方式可选 4 种:

挑选对应的方式。
然后点左边“Query Device ID”按钮 ,如果连接正常的话 ,会显示正常 ID: (4 种方式 ,连接正常的话 ,都能获取到设备 ID)
(注意,如果选串口方式,要 boot1 接地, boot0 接高)

然后 ,点右下角“download”按钮下载程序。
如果成功 ,可以看到成功信息;
如果失败,会有红色报错信息。
十、更多:芯片 flash 的大小与两个 bin:
关于芯片 flash 大小:
不管所选型号的 flash 是多大 ,请注意最后 100K 是留给 fpga/cpld 使用的。
如果使用的芯片是 256K 的 flash ,那么就是 156K 程序+100K fpga ,用户程序不能超过 156K。如果超过 156K 编译是可以通过的 ,但烧录后会冲掉ve 配置部分。
ve 配置被冲掉后 ,程序运行会表现出各种异常(通常是系统时钟初始化失败)。
如果程序使用的空间较大 ,fpga 又刚好比较小 ,可以调整这个界限的值。调整方法如下:
board_logic.compress = true //(可选)对 fpga部分进行压缩 ,更省空间 board_upload.logic_address = 0x80034000 //根据实际情况调整该边界值
flash 的大小是在 agrv2k_103.json 中定义的。
flash 起始地址是 0x80000000 ,ram 是 0x20000000。
关于 2 个 bin 的说明:
其他常用 mcu(如 ST、GD) ,工程编译后只有一个 bin。
而 AG32 工程则会编译出来 2 个 bin。一个是代码的 bin ,一个是逻辑的 bin。称之为 code.bin 和 logic.bin。
AG32 芯片运行时,需要两个 bin全部烧录下去。
code.bin容易理解,是软件代码的 bin ,等价于 st 编译后的那种 bin。
Logic.bin是多出来的一个 bin ,这个 bin是什么呢?
这个 bin其实是 fpga/cpld 部分编译出来的 bin。在上边第三章节里描述 VE 配置时 ,说到 gpio/spi/iic等这些外设的引脚需要在 VE 文件里配置后 ,才能最终使用。里边提到的“烧录 VE” ,其实就是编译并烧录这个 logic.bin。
这个 bin并不是在 mcu 里运行的 ,而是在cpld 模块里运行的。
拓展下:AG32 的芯片并不止是传统意义的一颗 mcu, 而是 传统意义的 mcu 芯+cpld 芯。而两部分各需一个 bin。于是整颗芯片需要 2 个 bin。
如果只使用 mcu(没接触过cpld),不理解上述描述也没关系。只要知道 ,相比传统 mcu,AG32 需多做一个步骤:配置 VE 引脚并烧录 VE。
这里的两个 bin ,在生产时烧录两次岂不是很不方便?上边第九章脱机烧录 ,描述的过程 ,就是把两个 bin 二合一 ,合并成一个 bin的。
十一、更多:了解 platformIO
这里描述下 platformIO 是什么。
在环境安装时 ,安装完 VSCode后 ,首先下载的插件就是 platformIO IDE。
它是 VScode的一款第三方插件 ,这款插件本身就是一套 IDE 开发环境。
访问 platformIO 的官网就知道 ,它是一套开放的 Iot 集成环境平台 ,允许芯片厂商通过配置和对接 ,方便地搭建自己芯片的开发环境。
也就是说,VSCode + platformIO + 芯片厂商配置 = 该芯片的 IDE 编译环境。
在嵌入式开发中 ,大家比较熟悉的 IDE 会有 Keil、IAR。而上边构建出来的 IDE 环境就是类似 Keil、IAR 的一整套可开发仿真的环境。只是这套环境比 Keil 和 IAR 更强大。
既然 AG32 芯片是基于 platformIO 平台的开发环境 ,那么项目中的配置就是围绕platformIO 展开的 ,上边章节描述的 platformio.ini 配置(配置编译、烧录、仿真等的配置项)就是用在这里的。
扩展信息:
查看 platformIO 的官网:platformIO 的定位是新一代的 IoT 集成开发环境。 它是基于
VSCode 的一款插件。VSCode 这款强大的文本编辑器辅以 PlatformIO 插件就可以化身为一款强大的 MCU 开发环境, 支持绝大多数流行的单片机平台。
我们知道, 嵌入式 Iot 开发中, 最让人不舒服的就是不同厂家的芯片要使用不同的集成开发环境。 例如:STM32 要使用 Keil 或 IAR, Arduino 默认使用自家 Arduino 开发环境,
ESP32 要使用 linux环境或者在windows 下部署eclipse 再用交叉编译。 那么, 有没有一个IDE 可以大一统起来, 集成大多数常用的芯片和模块的开发任务, 只要配置完成之后就一劳永逸的呢?没错, 那就是 PlatformIO。 PlatformIO 试图整合起目前所有主流的硬件平 台 :TI/ST/EspressIf/Intel/Silicon/… 等, 并且提供更便利的接口和更友好的交互, 以提高开发效率。
关于 platformIO, 有兴趣可以去官网获取更多的信息:h tps:/platformio.org/
前边说到, 每一款芯片在 PlatformIO 中需要配置, 按照 PlatformIO 的格式配置后, 才能被正常使用(platformio. ini 有大量的标准的控制选项, 可进入官网查看)。
官方配置:htps:/docs.platformio.org/en/latest/projectconf/index.html#projectconf
在实际使用中, 除了官方标准配置(编译、 烧录)外, 芯片方也会在这个开放平台上自定义一些自己特有的配置项。