随着物联网近年来飞速的发展,嵌入式软件开发领域的发展也随之有所发展。集成开发环境Integrated Development Environment,简称IDE,在任何软件开发中都是最重要的部分之一。
在以前,用来开发嵌入式应用的IDE通常是MDK Keil、IAR。但是上述IDE都是10年前的水平,从UI界面到稳定性都令人不满。所幸的是,新的IDE终于出现了,叫做PlatformIO。
Platform是基于Visual Studio Code(vscode),利用了vscode强大的扩展extension功能,使得开发者可以在vscode中直接调用gcc、jlink、gdb等进行开发、调试。
PlatformIO只是一个集成开发环境,其本身几乎不包括任何实质性功能,但是其集成了很多了例如编译器、调试器等,主要包括以下:
以下是我实际使用的截图:
主页:
设备管理页面:
debug界面:
先安装vscode:https://code.visualstudio.com/
安装好之后,点击最左侧的工具栏,找到扩展,搜索PlatformIO,点击安装即可,安装好后会让你重启vscode。
PlatformIO作为一个集成开发环境,只有其本身的安装包是托管在vscode官方上的,其他的很多东西都需要从第三方网站进行下载。所以PlatformIO安装过程比较缓慢。
作者注:
为了写这篇文章,我已经去阅读了PlatformIO的源码,从其中扣出了第三方包的下载网站是这里:http://dl.bintray.com/platformio/dl-packages/,并且看到其下载是使用python的request模块进行下载的(关键代码)。 而再google一下,发现可以设置 HTTP_PROXY
和 HTTPS_PROXY
两个环境变量,来设置下载代理。
综上所述,如果你的下载速度过慢,那么你可以直接上面的网站下载第三方包之后拷贝到C:/.platformio目录里面合适的位置中去 或者 需要速度快一点的梯子来做个代理。 (由于合适的位置我也不知道是哪里,所以推荐后者)
安装好之后,会提示让你重启vscode,重启之后,即可进入主界面,如下图所示。
点击New Project,根据你的需要选择:
这里我选择是STM32Cube(其实就是STM32HAL库),选择之后会进入下载中,这里和上述提到的安装中一样,回去第三方下载HAL库,过程会比较久。解决办法也是和上面一样:
手动去第三方网站下 或者 使用梯子代理。
创建好项目之后,使用快捷键 ctrl+k ctrl+o打开项目文件夹,在./src
目录下新建一个main.c
文件进行测试,文件内容如下:
#include "stm32f1xx_hal.h"
static int a = 1;
// static char str[50] = "Hello PlatformIO";
void SystemClock_Config(void);
int main(void) {
HAL_Init();
SystemClock_Config();
while(1) {
__NOP();
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {
0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {
0};
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
}
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
}
}
然后在每一步都打上一个断点,等一下进行断点调试。
还需要在platformio.ini
中指定一下调试工具,这里我用的是jlink:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:genericSTM32F103RC]
platform = ststm32
board = genericSTM32F103RC
framework = stm32cube
debug_tool = jlink
最后点击左侧的这个调试按钮切换到调试窗口,点击这个绿色的箭头进行调试。
至此,关于PlatformIO的基本介绍就结束了,但是实际上我们使用PlatformIO还会涉及到更多的知识,如果你有兴趣欢迎查看我的下一篇文章: 嵌入式IDE-PlatformIO结合STM32CubeMX