STM32CubeMX实战教程(一)——软件入门

软件入门

    • 前言
    • 新建工程
    • 界面简介
        • MCU
        • 外设配置
        • 时钟树
        • 工程设置
        • 工具
        • 生成代码
        • 代码分析
          • main.c
          • gpio.c
          • stm32f4xx_it.c
        • 程序下载
        • 现象
    • 结语

前言

STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。平台包括了STM32Cube 硬件抽象层(一个STM32抽象层嵌入式软件,确保在STM32系列最大化的便携性)和一套的中间件组件(RTOS, USB, FatFs, TCP/IP, Graphics, 等等).
直观的STM32微控制器的选择和时钟树配置

  • 微控制器图形化配置外围设备和中间件的功能模式和初始化参数
  • C代码生成项目覆盖STM32微控制器的初始化符合IAR™,Keil™和GCC编译器。
  • 对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。

本系列教程就将以STM32F407ZGT6为例介绍STM32单片机基于STM32CubeMX的开发方法,所用开发板为正点原子的探索者如果发现什么问题,欢迎指正

新建工程

首先,打开STM32CubeMX,第一次使用的朋友可以点击右侧的CHECK FOR UPDATEINSTALL/REMOVE检查一下软件更新并且找到对应芯片的固件库然后下载,软件和固件库都推荐是使用最新版的,这里不多介绍。
STM32CubeMX实战教程(一)——软件入门_第1张图片
完毕之后点击File->New Project来创建一个新的工程。
STM32CubeMX实战教程(一)——软件入门_第2张图片
在弹出的界面中找到并选择对应芯片型号,可以在左上角的对话框中搜索,选中后点击Start Project来新建工程。
STM32CubeMX实战教程(一)——软件入门_第3张图片

界面简介

新建工程完毕后将弹出这个界面,下面我将简单介绍一下其中的主要功能。
STM32CubeMX实战教程(一)——软件入门_第4张图片

MCU

首先是这中间这块芯片,其中有所有引脚的映射,用鼠标左右键点击某一引脚可以直接对其进行配置,一般在引脚用作普通IO或者将引脚的其他功能映射至非默认引脚时需要对引脚直接操作。

外设配置

左边这一栏是外设配置栏,所有内核有关,数模转换有关或是其他外设配置的初始化都在其中进行设置,包括一些第三方组件和实时操作系统的移植都可以在其中完成,还是非常方便的。这里我们设置一下RCC时钟源,高低速时钟源都由外部晶振产生。
STM32CubeMX实战教程(一)——软件入门_第5张图片

时钟树

上面一栏的第二个选项便是时钟树的配置图,可以直接选择各个节点的分频系数来得到外设的时钟频率;甚至可以直接在相应外设的时钟输出端,也就是最后一项里面输入频率,系统会自动计算出节点的分频系数,不过可能因为目前的算法不够完善,总是会卡住,所以不推荐。*当然,在此之前要先在外设配置的RCC配置里面把时钟源设置一下。*因为现在不需要功能实现,就先不具体设置。
STM32CubeMX实战教程(一)——软件入门_第6张图片

工程设置

上面一栏的第三个选项是工程设置的选项,这里一般在新建工程后首先配置,因为一般不变,而且容易忽略。这里介绍几个一般配置的点,其他地方基本可以不用关注。
STM32CubeMX实战教程(一)——软件入门_第7张图片
这里从上往下依次介绍

  • 工程名(旧版本不允许有中文,当前版本已经支持,但keil的输出文件中不允许中文,否则会报错
  • 工程路径(可不另外新建文件夹)
  • 编译器种类及版本(一般是MDK也就是keil,STM8用IAR,版本默认即可)
  • 堆栈大小(一般不用管,特殊项目如USB开发时可能用到)

左侧的第二个选项也需要稍微配置一下,这里勾选一下,也就是将每一个外设都新建一个专门的 .c.h 文件。其他默认就行。
STM32CubeMX实战教程(一)——软件入门_第8张图片

工具

最后一个工具选项里面可以进行功耗计算,不常用,这里不必理会。
STM32CubeMX实战教程(一)——软件入门_第9张图片

生成代码

一切都设置好之后就可以点击右上角的GENERATE CODE生成初始化代码了。生成后可以直接点击open project或者找到路径下的工程文件打开。这里可能会出现一个小坑,就是当我们打开生成的MDK工程的时候可能会由于器件型号不太明确,需要我们手动选择对应的那个型号
STM32CubeMX实战教程(一)——软件入门_第10张图片
这里选择
STM32CubeMX实战教程(一)——软件入门_第11张图片
然后找到对应正确型号即可,这里由于器件型号是我们重新选择的,所以STM32CubeMX是不会帮我们加入启动文件的,这时如果我们直接编译,那么肯定会报错,这就需要我们找到启动文件并加入工程。其实启动文件就在工程文件的同一目录下,不过是 .s 文件,需要我们先选择文件类型为ALL才能看到,加入到Application/User一栏即可。
STM32CubeMX实战教程(一)——软件入门_第12张图片
刚刚这几步只有在keil无法确定器件具体型号时才需要,如果是直接顺利进入工程的话就没有必要了,毕竟STM32CubeMX都做好了。
好最后一步,我们直接编译整个工程即可喜提两个鸭蛋。

代码分析

到这里,前期的初始化工作已经全部完成了,可以先战术性喝杯水,偷个懒什么的,但是这里我想跟大家简单分析一下STM32CubeMX到底帮我们写了什么代码。

main.c
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage 
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 16;
  RCC_OscInitStruct.PLL.PLLN = 192;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
  {
    Error_Handler();
  }
}

首先来看到main.c里面,主要是这个RCC的配置,也就是我们刚刚对时钟的操作已经全都变成代码写进来了。而main函数里面也已经帮我们做好相关外设的初始化了。另外,很容易发现这里有大量的USER CODE BEGINUSER CODE END字样,其实这是非常重要的,也就是STM32CubeMX给用户预留出来的编程地方当我们在STM32CubeMX里面进行调整并重新生成代码后,在这两行之间的代码会被保留,而用户在其他地方作出的修改则一律被删除,所以这里是不允许在这之外的地方进行编程或是修改的。

gpio.c

STM32CubeMX实战教程(一)——软件入门_第13张图片
很显然这就是一个gpio的初始化文件了,因为没什么特别的设置,它也就打开了时钟源的引脚时钟。

stm32f4xx_it.c

这是一个中断的初始化文件,因为没有进行中断设置,所以就没有进行初始化,但是里面有很多回调函数,这是HAL库和标准库开发不同的一个地方,当然在后面的中断教程里会详细说到。

程序下载

大致分析完代码之后来看看程序的下载方法,其实和其他开发方式的下载方法是一样的,我这里用的是ST_Link软件内部下载,不需要全片擦除,所以非常快。在option for target设置好下载器和flash型号就能用,点击download或快捷键F8即可下载。STM32CubeMX实战教程(一)——软件入门_第14张图片
STM32CubeMX实战教程(一)——软件入门_第15张图片
STM32CubeMX实战教程(一)——软件入门_第16张图片

现象

空的工程当然也就没有具体现象了

结语

这次的工程太简单,就不发了,以后的教程中会附上工程源码~
非常感谢大家的阅读,如有不当或者错误的地方,欢迎指正,谢谢支持。

奥里给~

你可能感兴趣的:(STM32CubeMX实战教程(一)——软件入门)