STM32CubeMX环境搭建及使用
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>© 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环境搭建及使用相关推荐
- STM32CubeMX环境搭建与安装
简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用 ...
- 【STM32】关于Clion+STM32cubeMX环境搭建过程中所遇到的一些问题·其一
目录 一.前言 二.正文 stm32 cubemx的安装 建立工程 配置openOCD进行编译烧录 关于烧录失败的事 三.小结 四.参考文章 一.前言 近日在网上冲浪时无意间发现了稚晖君在知乎发 ...
- stm32f4 hal 4位数码管_STM32裸机开发基础篇01开发环境搭建(HAL库)
前言 众所周知,在32位单片机中,STM32占有重要市场份额,其社区活动频繁,网上相关资料也比较多,无论是学习入门,还是工作使用,都无疑是极好的选择,本节开始,我们将学习如何使用STM32,首先,我们 ...
- NB-IoT(7)---开发环境搭建及模组驱动开发
NB-IoT(7)---开发环境搭建及模组驱动开发 STM32CubeMX安装及使用 1.STM32CubeMX介绍 2.STM32CubeMX安装 3.STM32CubeMX使用 STM32Cube ...
- STM32上手-STWingSKIT_BC28学习笔记(一)环境搭建和LED灯点亮
嵌入式STM32上手学习笔记(一)LED灯点亮 STM32开发环境的搭建 1. 安装keil5 IDE 2. 下载STM32F1的支持包 3. 在Pack installer中找到F1支持包下载 4. ...
- PanGu STM32MP1开发环境搭建
STM32MP1开发环境搭建 更新记录 0 - 相关文章 1 - 前期准备 2 - 交叉工具链 2.1 - 安装qt交叉工具链 2.2 - 设置环境变量 3 - 了解STM32MP1启动 3.1 - ...
- ARM-GCC环境搭建:适用STM32/GD32的编译调试总结
本文重点参考了一位博主的文章,他的文章写的也是十分详细,推荐阅读. Win10配置 STM32/GD32 单片机 GCC+VScode 编译调试总结 2021版_秋阳 Cody的博客-CSDN博客_g ...
- NXP freescale 开发环境搭建
目录 NXP和freescale简介 本文使用的芯片 术语介绍 开发环境选择 MCUXpresso IDE环境搭建 ①下载安装 ②安装SDK 并 新建项目 MDK Keil + MCUXpresso ...
- eclipse+gcc STM32开发环境搭建及调试
记录一下本人进行eclipse+gcc stm32开发环境的搭建过程,以便后续学习使用 参考资料如下: CubeMX+Eclipse+Jlink STM32开发环境搭建_小裘HUST的博客-CSDN博 ...
最新文章
- JAVA中“==”与equals()方法区别
- MySQL【环境搭建 03】腾讯云 Linux 环境踩坑 loading shared libraries: libnuma.so.1 + quit without updating PID file
- 循环赛日程安排(构造、分治)
- linux常用命令之文件管理
- Alluxio2.X简要介绍
- error: #error regenerate this file with a newer version of protoc.
- C++对BIL格式遥感影像读取
- linux C语言 SOCKET 服务器断开导致客户端SEND崩溃问题解决办法
- Win10释放C盘空间的一些办法
- java else 语法错误_Java中带有else的语法错误
- Javascript技巧之对话窗口
- jmeter 接口测试 签名_Jmeter之API接口签名验证测试
- android摇一摇功能实现
- 解决photoshop cs5每次打开都输入序列号的问题 (至少我好用 win7 64位)
- 探究pytorch model.eval()测试效果远差于model.train()
- E舞成名模拟器分析及下载地址
- git submodule解决多包协作
- 【CF】3B Lorry
- 专访阿里云闵万里:云上逐鹿_ET大脑要做行业化、垂直化的创新运用
- 机械学习基础以及在pynq-Z2上部署Faster-RCNN的项目学习2
热门文章
- 专业性项目,品质背景图片素材
- java计算机毕业设计web在线考试系统MyBatis+系统+LW文档+源码+调试部署
- (转)天道酬勤,上善若水—八字真言让您立于“不败之地”
- 全能PSP视频转换器Ultra PSP Movie Converter
- 指令集CEO潘爱民做客《数字浙江》 畅谈物联网发展
- 你陪我一程,我念你一生
- 注册制为国产奶粉正名,但迎来“春天”仍任重道远
- Photoshop:制作一张光盘
- python图片转手绘软件_一款可以绘出手绘风格的 Python 绘图神器
- 入门PCB设计(杜洋工作室)——Altium Designer Winter 09