单片机学习小组
直播中

陈文博

8年用户 982经验值
擅长:测量仪表
私信 关注

怎样去使用STM32CubeMX软件呢?有哪些使用步骤

怎样去安装STM32CubeMX软件呢?

怎样去使用STM32CubeMX软件呢?有哪些使用步骤?



回帖(1)

庞晓瑜

2022-1-26 14:47:38
一、安装环境

首先的工作是配置编程环境,注意的是安装路径不要有中文,安装STM32CubeMX需要电脑先有JAVA环境。
二、使用步骤

1.STM32CubeMX新建工程

首先打开STM32CubeMX,点击
ACCESS TO MCU SELECTOR

稍等片刻进入设置界面
先在左上角①处输入芯片型号,我们这里用的是STM32F103C8Tx(输入F103C8也能找到)
然后右侧就会出现我们所要的芯片,双击②所选范围进入下一阶段

先选择 Pinout & Configuration→System Core
其中的SYS和RCC如图配置


然后选择时钟配置Clock Configuration
②中输入72或者64(我们这里输入64),回车,跳出的界面选OK

进入Project Manager的Project,注意要将③中的Toolchain/IDE换成MDK-ARM(这个很重要,一开始没有注意到这点,导致创建的文件夹里都没有需要的工程文件)

最后选择Code Generator,把Genearted files的第一个选择项选上,然后点击右上角的GENERATE CODE 就新建好工程了

点击出现的Open Folder打开目标文件、Open Project则打开工程文件(已安装keil)

2.根据需求改STM32CubeMX配置

根据项目的需求在 Pinout & Configuration这里点击PA8选择GPIO_Input,右键选择Enter User Label改名字为Button

然后左边点击GPIO将下面的状态改成如图,点击右上角的GENERATE CODE 就配置完成,然后进入工程文件

3.按键消抖代码编写

STM32CubeMX 已经默认设置 Systick 为 1ms 中断,那么我们可以直接利用起来。打开 MDK-ARM 工程,按下组合键 Ctrl+N(按住 Ctrl 键再按 N 键),新建一个文件,再按下组合键 Ctrl+S,文件名改为 button.c,保存到 MiaowLabs-DEMO 的 Src 文件夹里。来到这里,我们虽然新建了button.c 源文件,但是还没有把该文件加入到 MDK-ARM 工程里。我们
在 MDK-ARM 工程界面左侧 Project 栏目双击 Application/User 文件夹,把 button.c 加进来。

双击 button.c 文件,把下面代码敲进去。
#include "button.h"
#include "main.h"
#include "stm32f1xx_it.h"
#include "stm32f1xx_hal_gpio.h"
int iButtonCount;//i代表int型变量,ButtonCount表示按键计数变量
int iButtonFlag;//i代表int型变量,ButtonFlag表示重按键标志,1代表重新按键,0为没有重新按键
int g_iButtonState;//g是globle代表全局变量,会在其他地方引用;i代表int型变量,ButtonState表示按键标志,1代表按下,0代表松开


void ButtonScan(void) {
    if( HAL_GPIO_ReadPin(Button_GPIO_Port,Button_Pin) == GPIO_PIN_RESET )//如果引脚检测到低电平
    {
        iButtonCount++; //按键按下,计数iButtonCount加1
        if(iButtonCount>=30) //1ms中断服务函数里运行一次,iButtonCount大于等于30,即按键已稳定按下30ms
        {
            if(iButtonFlag==0) //判断有没有重按键,1为有,0为没有
            {
                g_iButtonState=1; //设置按键标志
                iButtonCount=0;
                iButtonFlag=1; //设置重按键标志
            }
            else //如果重按键,则重新计数
                iButtonCount=0;
        }
        else //如果没有稳定按下30ms,则代表没有按下按键
            g_iButtonState=0;
    }
    else //如果一直无检测到低电平,即一直无按键按下
    {   iButtonCount=0; //清零iButtonCount
        g_iButtonState=0; //清除按键标志
        iButtonFlag=0; //清除重按键标志
    }
if(g_iButtonState == 1) {
            HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED引脚(PB12)的电平
        }
}
其中这段代码的意思就是:如果按键状态标志为 1 ,则代表按键被按下了,这时候进行 LED 电平翻转
if(g_iButtonState == 1) {
            HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED引脚(PB12)的电平
        }

再新建一个文件 button.h 头文件,把文件保存到 Inc 文件夹。然后,把下面代码敲进去。
#ifndef __BUTTON_H
#define __BUTTON_H
extern int g_iButtonState;//声明外部变量,方便其他地方引用
void ButtonScan(void);//声明按键扫描函数
#endif

打开 stm32fxx_it.c 文件,在 /* USER CODE BEGIN Includes / 与 / USER CODE END Includes */ 之间加入 #include “button.h”。

在 stm32fxx_it.c 文件里面 SysTick_Handler() 函数里加入按键扫描函数 ButtonScan()。

代码已经编写好了。这时候,点击编译按钮,会提示没有错误和警告。把代码烧录进 MiaowLabs-STM32F1-Micro 核心板,然后按下用户按键,可以发现按一下 LED 会亮,再按一下 LED 就会灭掉。就这样,我们实现了通过按键控制 LED 亮灭的功能。
4.烧录代码

之前做物创的时候烧录用的是ST-Link,但是今天教我们用的是mcuisp烧录,个人感觉还是ST-Link比较方便。
其中mcuisp也有几个要注意的点在图中标注出来了

三、遇到的问题

一开始我把PA8命名为Botton_Pin,但是在函数HAL_GPIO_ReadPin()里面调用的时候用了botton_Pin,大小写不同导致找不到这个变量,刚开始还以为是没有调用定义的头函数,但是还是报错。
然后我就去gpio.c文件里面查命名,果然
  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = Button_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(Button_GPIO_Port, &GPIO_InitStruct);


看样子之后还是要多多注意大小写,细节还是得注意
四、编程环境配置

代码自动补全

Edit->Configuration

代码格式化

使用AStyle进行代码格式化

添加Astyle菜单的方法:
1:uVision4中单击Tools菜单—Customize Tools Menu
2:添加Astyle All Files 和Astyle Current File菜单(自定义菜单名,可以使用中文)
我在这里添加了两个菜单,分别是格式化当前文件和格式化project中的所有文件。
3:添加Command命令:单击…按钮,选择Astyle.exe。


格式化前

格式化后
举报

更多回帖

发帖
×
20
完善资料,
赚取积分