PlatformIO下的STM32F4xx项目配置
2021/9/13 6:05:11
本文主要是介绍PlatformIO下的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 Core
和Full MCU package
的对应关系在README.md的表格中, 现在最新的是v2.6.7, 对应的完整库版本为v1.26.2 - 这个库与Windows Keil5 MDK下使用的标准外设库
Standard peripherals library
不兼容, 后者已经不再更新, 最高版本到1.8.0
- 这个库只是
- STM32Cube完整库的仓库
- Github地址是 https://github.com/STMicroelectronics/STM32CubeF4
- 上面的framework库, 在这个仓库里的路径是 tree/master/Drivers/CMSIS/Device/ST/STM32F4xx, 可以对比两边的文件, 是一样的
- 完整库比较大, 压缩包接近300MB
综上, STM32F4的CMSIS环境下是没有可用的标准外设库(Standard peripherals library)的, 尝试过用1.8.0的标准外设库, 编译有不少错误, 所以用这个开发的话
- 要么自己修订标准外设库, 使其兼容v2.6.x的CMSIS核心库, 这个需要对各外设的变量和结构体很熟, 我这样刚入门的估计是搞不定
- 要么不用标准外设库, 纯使用核心库变量开发. 这个难度也不小, 类似于回到8051开发的模式了, 每写一步都要查寄存器手册.
- 要么直接用STM32Cube的完整外设库. 不过既然都用了STM32Cube的库了, 为什么不直接选framework时就选STM32Cube呢?
Framework:stm32cube和board:STM32F401CC的项目配置
创建项目
这个方式相对比较简单了, 默认方式创建就可以
- 打开PlatformIO:Home, 如果没装 Platform:ST STM32 的, 先在 Platform 里装一下
- 点击 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的开发板, 然后写入
参考和下一步阅读
- https://docs.platformio.org/en/latest/frameworks/stm32cube.html
- https://docs.platformio.org/en/latest/tutorials/ststm32/stm32cube_debugging_unit_testing.html#tutorial-stm32cube-debugging-unit-testing
- HAL库的nRF24L01操作 https://github.com/pstolarz/NRF_HAL/blob/master/src/nrf_hal.cpp
- 同上 https://github.com/leech001/NRF24L01/blob/master/src/nrf24l01.c
- 同上 https://github.com/eos1d3/NRF24L01
- 同上 https://github.com/J20RC/STM32_RC_Transmitter/tree/master/software/Config
这篇关于PlatformIO下的STM32F4xx项目配置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南
- 2024-09-26Springboot微服务资料入门教程