1. 配置STM32CubeMX
【1.1】打开软件:
【1.2】 在 STM32CubeMX 的主界面中,点击 “New Project” 功能框中的 “ACCESS TO MCU SELECTOR” 功能按钮,从 MCU 开始新的工程。
【1.3】 在弹出对话框的 “MCU/MPU Selector” 选项卡中,首先,在左侧搜索框中输入该工 程需要使用的芯片型号 “STM32F407VE” ,然后,用鼠标在右下方的芯片列表中选择具体的 芯片型号,接着点击右上角的“Start Project” 按钮,开始工程的各项配置。
【1.4】 工程配置的主界面有四个菜单:Pinout & Configuration、Clock Configuration、 Project Manager 和 Tools。
【1.5】 在 Pinout & Configuration 界面左侧的菜单中,选择 “System Core” 菜单项中的 “SYS”,在点击其右边展开的 “Mode” 功能框中配置工程的仿真调试方式。我使用的是 SWD 接口的仿真器,点击“Debug”下拉列表,选择 “Serial Ware” 选项。
注:不同接口仿真器可以选择不同的调试方式。
【1.6】在 Pinout & Configuration 界面左侧的菜单中,选择 “System Core” 菜单项中的 “RCC”,在点击其右边展开的 “Mode” 功能框中时钟源。如果你的芯片使用外部晶振,则 在 HSE 和 LSE 下拉列表中选择“Crystal/Ceramic Resonator”。
注:一般开发板上都会有两个外部晶振。
【1.7】点亮LED,这边时钟树默认就可以了,后面如果用到其他外设就有可能要设置时钟树了。
【1.8】LED 引脚接在 PA6 上,所以,需要将 PA6 引脚设置 为 GPIO 输出功能。
完成功能选择的引脚上会标志一个图钉并会根据不同功能填充不同的颜色,同时在该引脚旁边标识出所选定的功能。
【1.9】 在 Pinout & Configuration 界面左侧的菜单中,选择 “System Core” 菜单项中的 “GPIO”,点击小三角符号,向右边展开 GPIO 的功能框,在这里可以对所有选择的芯片引脚的输入和输出功能进行参数配置。
本次工程中 “SYS” 中设置了仿真调试引脚,在 “RCC” 中设置了外部晶振引脚, 在 “GPIO” 中设置了 LED 的控制引脚。选择不同的选项卡,就会看到其相关的芯片引脚, 可以根据具体需要对其属性参加修改配置。
【1.10】当把工程的引脚和外设全部配置完成后,点击主界面中的 “Project Manager” 菜单项,进入工程相关的参数配置界面。
【1.11】在工程参数配置界面左侧的 “Code Generator” 菜单项中,将 “Generated files” 中的第一项打钩。
这样生成的工程将会为你配置的每一个外设生成对应的.c 文件和.h 文件。
【1.12】点击主界面右上角的 “GENERATE CODE”, 开始生成工程代码。
【1.13】代码生成后会弹出一个提示框,点击 “Open Floder” 按钮可直接打开生成工程代 码所在的文件夹
也可以点击 “Close” 按钮直接完成,但不会关闭 STM32CubeMX。
2. 添加代码
只需添加一行代码即可:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);
下面贴出主要的生成代码:
2.1 gpio.c
/**
******************************************************************************
* File Name : gpio.c
* Description : This file provides code for the configuration
* of all used GPIO pins.
******************************************************************************
* @attention
*
*
© Copyright (c) 2020 STMicroelectronics. * All rights reserved.
* All rights reserved.
*
* 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
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "gpio.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/*----------------------------------------------------------------------------*/
/* Configure GPIO */
/*----------------------------------------------------------------------------*/
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/** Configure pins as
* Analog
* Input
* Output
* EVENT_OUT
* EXTI
*/
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
/*Configure GPIO pin : PA6 */
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
2.2 main.c
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
*
© Copyright (c) 2020 STMicroelectronics. * All rights reserved.
* All rights reserved.
*
* 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 */
/* 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 */
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
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_NONE;
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_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != 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 */
/* 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,
tex: printf("Wrong parameters value: file %s on line %drn", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
3. 总结
CubeMX+HAL 不需要理解底层寄存器的定义,使用起来非常方便
要理解生成的代码之间的逻辑联系,熟悉常用的 hal 函数
建议学完标准库后上手 CubeMX
上一篇:【STM32】CubeMX+HAL 输出PWM
下一篇:【STM32】stm32f407 + DS18B20 碰出不一样的火花
推荐阅读最新更新时间:2024-11-12 09:24
推荐帖子
- 赚分,速结
- 0赚分,速结0
- jxrth 嵌入式系统
- DDK中: 如何Sleep ?
- 如果执行这个语句:while(1){printf(这个是死循环!\\n);}CPU估计能飚到60%以上;但是:while(1){printf(这个是死循环!但是有Sleep\\n);Sleep(2000);}CPU就不会狂飚了.....我不懂编写驱动,近来无事从网上弄了个玩,发现里面有while在某种情况下使CPU狂飚到50%+,DDK里可没有Sleep!求方法解决......DDK中:如何Sleep?执行等待函数,例如
- ttjj120 嵌入式系统
- 变频器控制系统回路电源的监控及自投
- 论述了针对聚酯工业生产过程中的集中式变频器控制系统的电源进行的改造。改造此系统使用Intel公司的MCS251系列的单片机8031芯片去控制2路电源的自投和撤出。由于单片机运行稳定,计算精确,功能强大,很多功能都可以通过软件编写来加以实现。能减少使用大量外围电气设备。使得改造后的系统能运行在一个安全稳定可靠的环境中,且易于维护。变频器控制系统回路电源的监控及自投
- frozenviolet 电源技术
- msp432 相关问题求助?
- 这个问题改怎么样解决呀,debugger改的tiXDSXDS里面的选项是xds110那项msp432相关问题求助?
- sunj 微控制器 MCU
- 哪位大侠提一个stc89c52的12864液晶显示的c语言代码,以供学习,谢谢
- 哪位大侠提一个stc89c52的12864液晶显示的c语言代码,以供学习,谢谢哪位大侠提一个stc89c52的12864液晶显示的c语言代码,以供学习,谢谢里面有一个ST7565P的芯片的LCD驱动,看你用的着不
- 450678797 51单片机
- 节约型社会话电源节能
- 如今我们已经进入了一个节约型社会,如何提高电源的使用功效、创造电源节能设计是摆在电源工程师们面前的课题。观点一:提高电源使用效率是电源管理的一部分提高电源效率是一项专门的技术,多数由硬件电路构成,如高效的开关电源(DC-DC变换),但它只是电源管理的一个部分,而不是全部。目前为了使设计者更方便地进行电源管理,一些厂商还开发了电源管理软件用于嵌入式操作系统,运用这类操作系统,可以有效地降低软件编制中的工作量,同时优化系统的电源管理,所以说电源管理既包含电源变换效率问题也包含负载降低功耗的问题。
- zbz0529 电源技术
设计资源 培训 开发板 精华推荐
- 使用 Aimtec 的 AM2S-4807SZ 的参考设计
- LT3088MPM 基准缓冲器的典型应用
- LT6656BIS6-3.3、3.3V 低功率精密高压电源监视器的典型应用
- AD9736-DPG2-EBZ,使用 AD9736、14 位、1.2 GSPS 串行电压输出数模转换器的评估板
- RD-480,将 FSQ0365RL 电源开关用于辅助电源应用的参考设计
- 具有宽范围 VDD 输入的 LTC2945IMS-1 宽范围电源监视器的典型应用
- 使用 ROHM Semiconductor 的 BD8314NUV-E2 的参考设计
- SOP8 转 DIP8 转换小板 文件放在附件里
- LT1026CN8 稳压转换器的典型应用电路
- 用于离线电源的 NCP1251 电流模式 PW 控制器的典型应用
- 有奖调查:ST MEMS 传感器论坛用户问卷调查,参与有惊喜
- 有奖直播:TI最新C2000实时控制器,在功率变换应用中实现高性能的成本优化型设计
- 万用表,红外测温仪等你来拆!—— EEWorld拆你来玩拆解(第二期)
- 泰克 MSO6B 探索营:设计资源集锦
- 免费领取|价值400元的乐鑫无线屏幕交互开发板ESP32-S3-LCD-EV-BOARD
- 开学季!EEworld下载中心 Cortex主题资源上传
- 有奖直播|TI DLP® 技术如何推动AR HUD和汽车大灯的发展
- 齐聚一堂 恩智浦教大家玩转新一代物联网应用 观看视频答题有好礼!
- 如何在FPGA设计环境中加时序约束
- 答题赢好礼|ADI技术直通车第1期