STM32Cube 应用

文章目录

  • 1. 综述
    • 1.1 STM32Cube 生态组成
    • 1.2 安装与配置
      • 1.2.1 【异常】安装STM32CubeMX 平台时遇到缺乏Java 环境问题
    • 1.3 深色模式
  • 2. 应用
    • 2.1 新建工程
    • 2.2 System Core 配置(系统内核配置)
      • 2.2.1 SYS配置
      • 2.2.2 RCC配置
      • 2.2.3 GPIO配置
    • 2.* Clock Configuration 时钟配置
    • 2.* Project Manger 项目管理配置
    • 2.* 代码编辑
      • 2.*.1 代码块
      • 2.*.2 查看API 函数
      • 2.*.3 `printf()`函数组建


本文中使用的 STM32CubeMX 版本为6.5.0

1. 综述


STM32Cube不是一款软件,而是一个生态系统,是ST推出的面向STM32微控制器和微处理器的完整软件解决方案。它既适合寻求完整的免费STM32开发环境的用户,也适合已经拥有IDE(包括Keil或iAR)的用户,用户可以在其中轻松集成各种组件,如STM32CubeMX、STM32CubeProgrammer或STM32CubeMonitor .


STM32的三种开发模式:

  1. 基于寄存器开发:就是和51单片机一样,直接对寄存器进行编程。基于寄存器编写的代码简练、执行效率高。但由于 STM32 微控制器的片上外设和寄存器数量太多,这种编程方式移植性差,寄存器名称记起来也很痛苦。
  2. 基于st官方的固件库进行开发:现在大部分stm32教程教的都是这种库函数开发,如正点原子,野火等。他相比寄存器开发更加简单,不需要记住每个寄存器的地址和名称,只要会调用ST官方封装好的库函数进行编程就可以。
  3. 基于STM32cubemx进行开发:STM32cubemx使用的是st官方新推出的HAL库,然后我们可以通过软件内设计好的图形化界面进行配置,软件自动生成生成配置代码。

1.1 STM32Cube 生态组成

STM32Cube 应用_第1张图片

  • STM32CubeMX:图形化的STM32设备配置工具,为Cortex-M芯片生成初始化代码,为Cortex-A芯片生成Linux Device Tree

  • STM32CubeIDE:集成开发环境,基于开源的Eclipse工具和GNU C/C++ toolchain . 并能更好的和其他Cube工具配合,比如方便集成STM32CubeMX自动生成的初始化代码。不过大家可能用的比较多还是IAR和Keil

  • STM32CubeProgrammer:烧写工具。它提供了一个简单有效的环境,来读、写和验证片内存储和片外存储,支持广泛的通讯方式:JTAG, SWD, UART, USB DFU, I2C, SPI, CAN等

  • STM32CubeMonitor系列工具:强大的监视工具,用来帮助开发者功耗的优化有实时性要求的应用的行为和性能

  • STM32Cube MCU Package: 各个STM32系列芯片专用的支持包,这些包提供了STM32片上外设的操作实现和接口。包括HAL层的驱动,中间件软件框架和大量的示例,很多真实案例的项目可供参考。

  • STM32Cube Expansion:扩展包, 在一些应用方案中使用。从ST自有或经过许可的第三方合作伙伴,提供可扩展包,增强STM32 Cube工具软件的功能。


STM32 生态中各软件在不同开发阶段的应用
STM32Cube 应用_第2张图片

STM32Cube MCU软件包:STM32Cube MCU软件包是一套驱动目标MCU或MPU外设的嵌入式软件。每个软件包内嵌标准驱动程序,采用优化的(LL API)和可移植的(HAL API)版本。还可以根据MCU或MPU外设使用其他中间件。在下表中,点击对应MCU即可下载使用。
STM32Cube 应用_第3张图片

1.2 安装与配置

  1. 到ST官网 ,找到 工具与软件 - 生态系统 - STM32Cube Ecosystem

STM32Cube 应用_第4张图片
2. 登录账号,找到软件开发工具,选择要下载的软件
STM32Cube 应用_第5张图片
3. 下载对应软件并安装
STM32Cube 应用_第6张图片

1.2.1 【异常】安装STM32CubeMX 平台时遇到缺乏Java 环境问题

安装STM32CubeMX安装包时,弹出下图报错窗口。
STM32Cube 应用_第7张图片
原因是电脑没有JAVA环境,到JAVA SE网站点击下载JDK文件,选择对应工作环境下载安装包(如Windows x64),安装安装包,然后再安装STM32CubeMX安装包。
STM32Cube 应用_第8张图片
在这里插入图片描述

参考:https://www.runoob.com/java/java-environment-setup.html#win-install

1.3 深色模式

下面方法未成功,异常现象是 需要Eclipse证书

如下图,进入插件库
STM32Cube 应用_第9张图片
搜索darkest,如下图安装后重启STM32Cube
STM32Cube 应用_第10张图片

2. 应用


2.1 新建工程

!建议在 STM32CubeMX 中新建工程与生成代码!,因为未知原因,在STM32CubeIDK中不能生成Keil工程代码,但在STM32CubeMX 中可以。

  1. 点击新建项目
    STM32Cube 应用_第11张图片

  2. 选择芯片
    STM32Cube 应用_第12张图片

  3. 输入项目名,项目存储路径(不能有中文),点Finish
    STM32Cube 应用_第13张图片

  4. 项目建立后,进入到如下图界面
    STM32Cube 应用_第14张图片

2.2 System Core 配置(系统内核配置)

2.2.1 SYS配置

STM32Cube 应用_第15张图片

2.2.2 RCC配置

STM32Cube 应用_第16张图片

2.2.3 GPIO配置

选中GPIO,点击要配置的Pin脚进行功能配置,然后在Configuration 中对所选引脚进行进一步的配置
STM32Cube 应用_第17张图片

2.* Clock Configuration 时钟配置

关于时钟树相关知识可查看文章 STM32理论 —— ADC、存储、定时器、时钟、中断 中的时钟一节

时钟树配置界面图
STM32Cube 应用_第18张图片


2.* Project Manger 项目管理配置

选择IDE 使用Keil ,选择Keil 的最低版本,注意项目路径不要有中文
STM32Cube 应用_第19张图片

在Code Generator中勾选生成 ‘.c’、'.h’文件
STM32Cube 应用_第20张图片
点击生成代码

2.* 代码编辑

2.*.1 代码块

在生成的代码中,存在已定义的代码块范围,只有在该范围内编写的代码,在STM32CubeMX中重新修改配置后重新生成的代码中被保存下来。
STM32Cube 应用_第21张图片

2.*.2 查看API 函数

在Function中,可以找到并直接调用库中的函数。如读某IO的电平状态,可调用stm32f1xx_hal_gpio.c文件中的HAL_GPIO_ReadPin(xxx)函数,双击该函数,即可跳到函数本体,直接将函数复制到要被调用的地方即可。
STM32Cube 应用_第22张图片

2.*.3 printf()函数组建

如下图,芯片STM32F103C8系列连接性资源如下。
STM32Cube 应用_第23张图片
如配置一个串口,选择USART1,选择串口通讯模式,配置串口通讯的参数。
STM32Cube 应用_第24张图片
STM32Cube 应用_第25张图片
配置完成后,对应的两个引脚就被配置成USART1_TX和USART1_RX,注意在外部PCB Layout中,MCU的TX连接IC的RX,另一个脚亦然。


  • 组建printf函数:
  1. usart.c文件中的/* USER CODE BEGIN 1 */ /* USER CODE END 1 */代码块中加入以下代码:
// 1. 
/* USER CODE BEGIN 1 */
//在usart.c文件中添加以下代码
#include "stdio.h"

//这个变量是其他.c文件定义的
extern UART_HandleTypeDef huart1;
uint8_t ch;
uint8_t ch_r;
//重写这个函数,重定向printf函数到串口,意思就是说printf直接输出到串口,其默认输出到控制台的
/*fputc*/
int fputc(int c, FILE * f)
{
    ch=c;
    HAL_UART_Transmit(&huart1,&ch,1,1000);//发送串口
    return c;
}



//重定向scanf函数到串口 意思就是说接受串口发过来的数据,其默认是接受控制台的数据
/*fgetc*/
int fgetc(FILE * F)
{
    HAL_UART_Receive (&huart1,&ch_r,1,0xffff);//接收
    return ch_r;
}
/* USER CODE END 1 */
  1. main.c文件中的/* USER CODE BEGIN Includes */ /* USER CODE END Includes */代码块中引入以下头文件:
// 2. 
/* USER CODE BEGIN Includes */
//在main.c文件中引入**stdio.h**头文件
#include "stdio.h"
/* USER CODE END Includes */
  1. 然后在任意用户代码块中使用printf()函数即可:
// 3. 
  /* USER CODE BEGIN 2 */
  //在任意用户代码块中调用printf函数
	printf("hello world!\r\n");
  /* USER CODE END 2 */

你可能感兴趣的:(#,STM32,其他,stm32,stm32cube,ide)