ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PlatformIO下的STM32F4xx项目配置

2021-09-13 02:00:14  阅读:292  来源: 互联网

标签:PlatformIO HAL 配置 STM32Cube 外设 https GPIO LED STM32F4xx


Board:STM32F4xx和Framework:CMSIS

  • cmsis核心库的安装路径是 /home/[your user]/.platformio/packages/framework-cmsis
    • 对应了STM32Cube完整库 Drivers/CMSIS/ 路径下的内容
    • 多了一个Driver目录
  • stm32f4-framework库文件安装路径是 /home/[your user]/.platformio/packages/framework-cmsis-stm32f4
    • 这个库只是STM32Cube MCU Full Package 的核心定义部分, 在Github上的仓库地址: https://github.com/STMicroelectronics/cmsis_device_f4
    • 这个库有自己的版本号v2.6.x, 容易与完整库的版本号混淆, 其与CMSIS CoreFull MCU package的对应关系在README.md的表格中, 现在最新的是v2.6.7, 对应的完整库版本为v1.26.2
    • 这个库与Windows Keil5 MDK下使用的标准外设库Standard peripherals library不兼容, 后者已经不再更新, 最高版本到1.8.0
  • STM32Cube完整库的仓库

综上, STM32F4的CMSIS环境下是没有可用的标准外设库(Standard peripherals library)的, 尝试过用1.8.0的标准外设库, 编译有不少错误, 所以用这个开发的话

  1. 要么自己修订标准外设库, 使其兼容v2.6.x的CMSIS核心库, 这个需要对各外设的变量和结构体很熟, 我这样刚入门的估计是搞不定
  2. 要么不用标准外设库, 纯使用核心库变量开发. 这个难度也不小, 类似于回到8051开发的模式了, 每写一步都要查寄存器手册.
  3. 要么直接用STM32Cube的完整外设库. 不过既然都用了STM32Cube的库了, 为什么不直接选framework时就选STM32Cube呢?

Framework:stm32cube和board:STM32F401CC的项目配置

创建项目

这个方式相对比较简单了, 默认方式创建就可以

  1. 打开PlatformIO:Home, 如果没装 Platform:ST STM32 的, 先在 Platform 里装一下
  2. 点击 New Project,
    • 填入项目名称,
    • 在 Board 中输入 stm32f401 在过滤结果的列表中, 选择 stm32f401cc, 如果是常见的 black pill, 可以直接在底下找到对应的专门的board
    • 选择 Framework 为 STM32Cube
    • 如果不希望建在默认目录的话, 取消 Use Default Location 勾选, 指定位置, PlatformIO 会创建项目目录

项目的目录和文件

首先是 platformio.ini, 这个文件的内容如下, 一个项目里可以有多个env, 可以指定一个默认的, 在使用快捷键时, 会执行默认env的编译和写入. upload_protocol 用于指定不同的写入方式

[env:stm32f401cc]
platform = ststm32
board = genericSTM32F401CC
framework = stm32cube
upload_protocol = stlink

其次是 .vscode/c_cpp_properties.json, 这个文件很重要, 因为任何 include 的错误, 都可以在这里检查. 这个文件是 PlatformIO 自动生成的, 所以不需要去改它, 如果发现你修改了platformio.ini 后它没有更新, 重新打开 VS Code 就可以了.

测试

闪灯例子, 在src目录下创建 main.c, 内容如下

#include "stm32f4xx_hal.h"

#define LED_PIN                        GPIO_PIN_13  // 指定PIN
#define LED_GPIO_PORT                  GPIOC        // 指定IO
#define LED_GPIO_CLK_ENABLE()          __HAL_RCC_GPIOC_CLK_ENABLE() // 指定启用时钟的IO

void LED_Init();

int main(void) {
  HAL_Init();
  LED_Init();

  while (1)
  {
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
    HAL_Delay(1000);
  }
}

void LED_Init() {
  LED_GPIO_CLK_ENABLE();
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.Pin = LED_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
}

void SysTick_Handler(void) {
  HAL_IncTick();
}

编译, 使用stlink连接stm32f401的开发板, 然后写入

参考和下一步阅读

标签:PlatformIO,HAL,配置,STM32Cube,外设,https,GPIO,LED,STM32F4xx
来源: https://www.cnblogs.com/milton/p/15260805.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有