简介
使用过vscode的小伙伴都知道起功能非常好用,尤其是提供很多开源插件。这时候就想把他应用于嵌入式开发。方法一:就是直接下载arm编译工具等进行搭建,缺点是比较麻烦,好处是可以了解工作机制。方法二:就是采用目前流行的PlatformIO这个插件进行快速搭建。
但是在使用这个插件时发现部分器件型号并没有,这时候就需要自己添加器件。本文主要就是介绍如何快速添加一个芯片型号,前提是这个芯片的产品线(其他类似型号)platformIO已经支持。
因为目前手上有STM32L011K4T6的NUCLEO板子,所以一这颗型号进行说明和测试。
操作步骤
- 创建型号说明json文件
首先在C:\Users\用户名.platformio\platforms\ststm32\boards目录中创建下图所示的文件,可以拷贝其他文件修改名称为"genericSTM32L011K4.json"
- 修改创建的json文件
其中svd是关于仿真的芯片寄存器信息等内容用于仿真时查看。存储位置:C:\Users\用户名.platformio\platforms\ststm32\misc\svd 文件夹中可以找到对应型号。
Product_line 要注意不可以写错,否则编译会出现无法找打对应的.s文件,但是编译提示还是成功的,但是
代码下载后无法运行。
{
"build": {
"core": "stm32",
"cpu": "cortex-m0plus",
"extra_flags": "-DSTM32L011xx -DSTM32L1",
"f_cpu": "32000000L",
"mcu": "stm32l011k4t6",
"product_line": "STM32L011xx",
"variant": "STM32L0xx/L011(D-E-F-G-K)3_L011(D-E-F-G-K)4"
},
"debug": {
"jlink_device": "STM32L011K4",
"openocd_target": "stm32l0",
"svd_path": "STM32L0x1.svd"
},
"frameworks": [
"arduino",
"cmsis",
"stm32cube",
"libopencm3"
],
"name": "STM32L011K4 (512B RAM. 16k Flash)",
"upload": {
"maximum_ram_size": 512,
"maximum_size": 16384,
"protocol": "serial",
"protocols": [
"blackmagic",
"dfu",
"jlink",
"serial",
"stlink"
]
},
"url": "https://www.st.com/en/microcontrollers-microprocessors/stm32l011k4.html",
"vendor": "Generic"
}
- 创建工程
启动vscode 的platformIo后就可以在里面搜索到刚刚添加的芯片
- 编写测试代码
下面的代码供参考,为了让代码篇幅小一点,删除时钟初始化等函数
#include "main.h"
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
MX_GPIO_Init();
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
HAL_Delay(300);
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
HAL_Delay(300);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : LD3_Pin */
GPIO_InitStruct.Pin = LD3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LD3_GPIO_Port, &GPIO_InitStruct);
}
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
void SysTick_Handler(void)
{
HAL_IncTick();
}
编译成功后会提示“SUCCESS”
- 下载测试
nuelo板子自带stlink仿真器。这里修改Platformio.ini设置.为了能调试启动文件,同时设置仿真端点为复位向量函数
[env:genericSTM32L011K4]
platform = ststm32
board = genericSTM32L011K4
framework = stm32cube
upload_protocol =stlink
build_flags = -g
debug_tool = stlink
debug_init_break = tbreak Reset_Handler
配置完成后启动调试可以正常进入,而且可以看到ADC等外设寄存器