CubeMX环境搭建及使用

  • 前言
  • 一、CubeMX安装环境
  • 二、使用CubeMX实现流水灯闪烁
    • (一)新建工程
    • (二)基本配置
      • 1.时钟配置
      • 2.GPIO引脚配置
      • 3.生成工程配置
    • (二)编写用户代码
  • 三、实例演示
  • 四、keil虚拟示波器
  • 总结

前言

STM32CubeMX 是意法半导体推出的图形化配置工具,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具链,比如MDK、IAR For ARM、TrueStudio等。. 尤其值得一提的是,TrueStudio已经被ST收购,提供完全免费的版本,并且,通过插件式 安装 ,可以将 STM32CubeMX 集成在一个IDE,使用十分方便。


一、CubeMX安装环境

STMCubeMX是一个图形化的配置STM32代码的工具,它将硬件抽象层、中间层、示例代码等封装起来,用户可以通过图形化的操作方式,完成初始化代码工程。

  • 安装jdk

由于STM32CubeMX是Java实现的,需要安装jdk环境。
jdk官网下载链接:
https://www.oracle.com/java/technologies/javase-downloads.html

根据电脑型号,选择相应的下载版本,这里安装很简单,就直接跳过了

  • 下载STM32CubeMX

下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html

解压压缩文件,我这里选择最新版本

①以管理员身份运行,点击下一步

②选择I agree… , 点击next


③同意隐私设置,点击next

④选择安装路径(路径中最好不要出现中文与空格),点击next,点击yes


⑤在桌面和开始菜单创建快捷方式(默认即可),这一步直接点next

⑥等待一段时间,然后点击next


⑦点击done,安装完成

运行STM32cubemx,安装固件库

⑧选择help–Manage embedded software packages


⑨选择F1系列下的任意安装包,点击Install Now(联网环境下)我这里已经安装了1.8.3


正在下载中


⑩出现以下界面,安装成功

二、使用CubeMX实现流水灯闪烁

(一)新建工程

  • 运行STM32cubemx,选择File–New Project

  • 找到并选中对应的芯片型号,双击进入

(二)基本配置

1.时钟配置

在Pinout&Configuration–System Core–RCC选择外部晶振,如下图所示

选择完成后,在Clock Configuration下选择时钟频率为72M,输入完成后回车

2.GPIO引脚配置

在Pinout&Configuration中,单击PA12引脚,选择GPIO_Output


重复上诉操作,将PA12,PB1,PC14都设置为GPIO_Output


在Pinout&Configuration–System Core–GPIO下找到刚刚配置的三个引脚,如下图所示


依次选择PA12、PB1、PC14,将其配置为下图所示

3.生成工程配置

在Project Manager–Project下,配置如下图


在Project Manager–Code Generator下

  • 配置工作完成,生成代码
  • 打开生成的工程文件,编辑

(二)编写用户代码

/* USER CODE BEGIN */
用户代码

/* USER CODE END*/

STM32CubeMX生成的工程中添加代码要在提示 /* USER CODE BEGIN /和/ USER CODE END*/之间添加代码,这样STM32CubeMX重新生成代码时不会将自己添加的代码删除掉。
此外,注意使用Cubemx配置生成的工程中的注释最好不要随便删除掉。

  • main.c文件
/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.* All rights reserved.</center></h2>** This software component is licensed by ST under BSD 3-Clause license,* the "License"; You may not use this file except in compliance with the* License. You may obtain a copy of the License at:*                        opensource.org/licenses/BSD-3-Clause********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void LED_R_Toggle(void)
{HAL_GPIO_TogglePin(LED_R_GPIO_Port,LED_R_Pin);HAL_Delay(500);HAL_GPIO_TogglePin(LED_R_GPIO_Port,LED_R_Pin);HAL_Delay(5);
}void LED_Y_Toggle(void)
{HAL_GPIO_TogglePin(LED_Y_GPIO_Port,LED_Y_Pin);HAL_Delay(500);HAL_GPIO_TogglePin(LED_Y_GPIO_Port,LED_Y_Pin);HAL_Delay(500);
}void LED_G_Toggle(void)
{HAL_GPIO_TogglePin(LED_G_GPIO_Port,LED_G_Pin);HAL_Delay(500);HAL_GPIO_TogglePin(LED_G_GPIO_Port,LED_G_Pin);HAL_Delay(500);
}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */LED_R_Toggle();LED_G_Toggle();LED_Y_Toggle();}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses 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_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

在BEGIN和END之间插入代码


三、实例演示

  • 接线方式

  • 动态效果


注意:如果确定代码没问题,接线也正确,但是最小系统板并没有正确执行程序,可以试试将BOOT0引脚在不断电的情况下从1换到0,再按一下复位键,程序就可以正常执行(我暂时还没找出问题,不过我在这里卡了很久,如果你遇到这个问题,可以试试。我这里使用的是串口下载,且已经勾选debug–setting–flash download–Reset and Run,但是还是出现上述问题,如果有大佬知道这个问题,欢迎留言,不胜感激.)

四、keil虚拟示波器

  • 选择魔术棒-Target,选择外部晶振,设置为8.0

  • 选择Debug项,配置参数

  • 进入调试界面,选择Logic Analyzer


-选择setup,配置为如图所示(我这里使用的是PA12、PB1、PC14)

  • Display Type选择bit,颜色任意设置

  • 点击运行,等待一段时间,波形如图所示

总结

cubemx为我们初始化外设提供了极其简单、强大的工具,我们熟练掌握该工具可以更快的编写程序、提高效率。

另外关于keil可以虚拟显示波形,也是一个很强大的功能,有些时候想要观测PWM波,或者定时器波形,在没有示波器的情况下,这是一个很不错的替代。

以上是我关于Cubemx的理解,若有不当之处,敬请指教。

参考
搭建STM32开发环境——STM32CubeMX,Keil5

利用KEIL的软件仿真的逻辑分析仪功能观察GPIO的波形

STM32CubeMX环境搭建及使用相关推荐

  1. STM32CubeMX环境搭建与安装

    简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用 ...

  2. 【STM32】关于Clion+STM32cubeMX环境搭建过程中所遇到的一些问题·其一

    目录 一.前言 二.正文 stm32 cubemx的安装 建立工程 配置openOCD进行编译烧录 关于烧录失败的事 三.小结 四.参考文章 一.前言    近日在网上冲浪时无意间发现了稚晖君在知乎发 ...

  3. stm32f4 hal 4位数码管_STM32裸机开发基础篇01开发环境搭建(HAL库)

    前言 众所周知,在32位单片机中,STM32占有重要市场份额,其社区活动频繁,网上相关资料也比较多,无论是学习入门,还是工作使用,都无疑是极好的选择,本节开始,我们将学习如何使用STM32,首先,我们 ...

  4. NB-IoT(7)---开发环境搭建及模组驱动开发

    NB-IoT(7)---开发环境搭建及模组驱动开发 STM32CubeMX安装及使用 1.STM32CubeMX介绍 2.STM32CubeMX安装 3.STM32CubeMX使用 STM32Cube ...

  5. STM32上手-STWingSKIT_BC28学习笔记(一)环境搭建和LED灯点亮

    嵌入式STM32上手学习笔记(一)LED灯点亮 STM32开发环境的搭建 1. 安装keil5 IDE 2. 下载STM32F1的支持包 3. 在Pack installer中找到F1支持包下载 4. ...

  6. PanGu STM32MP1开发环境搭建

    STM32MP1开发环境搭建 更新记录 0 - 相关文章 1 - 前期准备 2 - 交叉工具链 2.1 - 安装qt交叉工具链 2.2 - 设置环境变量 3 - 了解STM32MP1启动 3.1 - ...

  7. ARM-GCC环境搭建:适用STM32/GD32的编译调试总结

    本文重点参考了一位博主的文章,他的文章写的也是十分详细,推荐阅读. Win10配置 STM32/GD32 单片机 GCC+VScode 编译调试总结 2021版_秋阳 Cody的博客-CSDN博客_g ...

  8. NXP freescale 开发环境搭建

    目录 NXP和freescale简介 本文使用的芯片 术语介绍 开发环境选择 MCUXpresso IDE环境搭建 ①下载安装 ②安装SDK 并 新建项目 MDK Keil + MCUXpresso ...

  9. eclipse+gcc STM32开发环境搭建及调试

    记录一下本人进行eclipse+gcc stm32开发环境的搭建过程,以便后续学习使用 参考资料如下: CubeMX+Eclipse+Jlink STM32开发环境搭建_小裘HUST的博客-CSDN博 ...

最新文章

  1. JAVA中“==”与equals()方法区别
  2. MySQL【环境搭建 03】腾讯云 Linux 环境踩坑 loading shared libraries: libnuma.so.1 + quit without updating PID file
  3. 循环赛日程安排(构造、分治)
  4. linux常用命令之文件管理
  5. Alluxio2.X简要介绍
  6. error: #error regenerate this file with a newer version of protoc.
  7. C++对BIL格式遥感影像读取
  8. linux C语言 SOCKET 服务器断开导致客户端SEND崩溃问题解决办法
  9. Win10释放C盘空间的一些办法
  10. java else 语法错误_Java中带有else的语法错误
  11. Javascript技巧之对话窗口
  12. jmeter 接口测试 签名_Jmeter之API接口签名验证测试
  13. android摇一摇功能实现
  14. 解决photoshop cs5每次打开都输入序列号的问题 (至少我好用 win7 64位)
  15. 探究pytorch model.eval()测试效果远差于model.train()
  16. E舞成名模拟器分析及下载地址
  17. git submodule解决多包协作
  18. 【CF】3B Lorry
  19. 专访阿里云闵万里:云上逐鹿_ET大脑要做行业化、垂直化的创新运用
  20. 机械学习基础以及在pynq-Z2上部署Faster-RCNN的项目学习2

热门文章

  1. 专业性项目,品质背景图片素材
  2. java计算机毕业设计web在线考试系统MyBatis+系统+LW文档+源码+调试部署
  3. (转)天道酬勤,上善若水—八字真言让您立于“不败之地”
  4. 全能PSP视频转换器Ultra PSP Movie Converter
  5. 指令集CEO潘爱民做客《数字浙江》 畅谈物联网发展
  6. 你陪我一程,我念你一生
  7. 注册制为国产奶粉正名,但迎来“春天”仍任重道远
  8. Photoshop:制作一张光盘
  9. python图片转手绘软件_一款可以绘出手绘风格的 Python 绘图神器
  10. 入门PCB设计(杜洋工作室)——Altium Designer Winter 09