前言
EIDE: 是一款适用于 8051/STM8/Cortex-M/RISC-V 的单片机开发环境。能够在 vscode 上提供 8051/STM8/Cortex-M/RISC-V 项目的 开发, 编译, 烧录等功能
VSCODE+EIDE相较于KEIL类开发环境有开发环境统一,代码编辑和自动补全效果,路径包含,丰富的功能插件等优点
一、必要准备工作
- WINDOWS 7 SP1 及以上
- VSCODE
- KEIL Uvision5
- STM32Cube_FW_F1_V1.8.4或其他版本
- STM32开发板
二、安装EIDE
- 配置EIDE
三、新建工程
新建一个空项目并选择CORTEX-M,将STM32Cube_FW_F1_V1.8.4软件包放到该工程根目录下,并将STM32Cube_FW_F1_V1.8.4/Drivers/STM32F1xx_HAL_Driver文件夹添加到工程中
- 修改STM32Cube_FW_F1_V1.8.4\Drivers\STM32F1xx_HAL_Driver\Inc内的模板文件
stm32f1xx_hal_conf_template改名为stm32f1xx_hal_conf
stm32_assert_template改名为stm32_assert
- 修改STM32Cube_FW_F1_V1.8.4\Drivers\STM32F1xx_HAL_Driver \Src内的模板文件
stm32f1xx_hal_msp_template改名为stm32f1xx_hal_msp
stm32f1xx_hal_timebase_rtc_alarm_template改名为stm32f1xx_hal_timebase_rtc_alarm
stm32f1xx_hal_timebase_tim_template改名为stm32f1xx_hal_timebase_tim
此时已经将ST官方提供的STM32F1系列软件开发包中的主要源代码添加进我们的工程,继续添加内核和芯片相关文件
将STM32Cube_FW_F1_V1.8.4\Drivers\CMSIS\Core\Include文件夹添加进工程中;
- 删除STM32Cube_FW_F1_V1.8.4\Drivers\CMSIS\Device\ST\STM32F1xx\Include文件夹内的其他芯片型号的文件,仅保留以下文件
stm32f1xx.h
stm32f103xe.h
system_stm32f1xx.h
- 删除STM32Cube_FW_F1_V1.8.4\Drivers\CMSIS\Device\ST\STM32F1xx\Source
Templates\arm文件夹内的其他芯片型号的文件,仅保留以下文件
startup_stm32f103xe.s
四、配置工程编译参数和环境
- 添加预定义参数
- 配置工具链
- 配置烧写参数
构建配置和项目设置中可根据需要对当前工程进行更加丰富详细的个性化配置
五、编辑main文件
#include "stm32f1xx_hal.h"
/*时钟配置,可参考官方软件包下的模板工程*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef clkinitstruct = {0};
RCC_OscInitTypeDef oscinitstruct = {0};
/* Enable HSE Oscillator and activate PLL with HSE as source */
oscinitstruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
oscinitstruct.HSEState = RCC_HSE_ON;
oscinitstruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
oscinitstruct.PLL.PLLState = RCC_PLL_ON;
oscinitstruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
oscinitstruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&oscinitstruct)!= HAL_OK)
{
/* Initialization Error */
while(1);
}
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
clocks dividers */
clkinitstruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
clkinitstruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
clkinitstruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
clkinitstruct.APB2CLKDivider = RCC_HCLK_DIV1;
clkinitstruct.APB1CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&clkinitstruct, FLASH_LATENCY_2)!= HAL_OK)
{
/* Initialization Error */
while(1);
}
}
int main(void)
{
/*******hal init*******/
HAL_Init();
/******clock init******/
SystemClock_Config();
/****add user code****/
GPIO_InitTypeDef GPIO_InitStruct=
{
.Pin = GPIO_PIN_1,
.Mode = GPIO_MODE_OUTPUT_PP,
.Pull = GPIO_PULLUP,
.Speed = GPIO_SPEED_FREQ_HIGH,
};
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*闪个灯*/
while (1)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
HAL_Delay(300);
}
}
六、编译烧写
总结
对于STM系列芯片的基础工程同样可以由ST官方工具STM32CubeMX 直接生成,再使用VSCODE+EIDE将STM32CubeMX生成的文件包含进工程进行编辑,进而利用VSCODE强大的代码编辑、自动补全、路径包含及丰富插件等优势。本文之所以根据官方的开发软件包手动添加是为了给相同环境下开发别的芯片平台提供一个参考。