STM32CubeMX开发实战1-LED点灯

news2024/11/14 23:37:03

目录

      • 点灯
        • 选择 MCU
        • 引脚设置
        • 时钟设置
        • 项目配置
        • 生成项目
        • 项目文件介绍
        • Debugger 设置

点灯

这里将会以一个最简单的一个点灯实验来展示如何使用 STM32CubeMX 快速生成 STM32 工程并上手开发,包括对项目工程建立的详细内容分析解释

接下来使用正点原子探索者开发板 STM32F407ZGT6


选择 MCU

下载并安装 STM32CubeMX,具体流程大家可以去网上找找,非常简单

按照下图所示,点击 ACCESS TO MCU SELECTOR 选择适合的 MCU

在这里插入图片描述

找到探索者开发板对应的 STM32 板子型号,使用左上角的搜索按钮找到
然后在右侧面板下方选择型号
最后点击右上角的 start project 开启工程

在这里插入图片描述

进入 MCU 配置面板,下面是面板对应的四个主要部分

  • Pinout&Configuration 引脚设置
  • Clock Configuration 时钟设置
  • Project Manager 工程输出设置等
  • Tools 保持默认,基本不需要动

在这里插入图片描述


引脚设置

在右侧的 MCU 引脚展示图内,找到引脚 PF9(因为该引脚默认对应探索者开发板上的板载 LED)

我们希望将其设置为输出模式,故右键点击该引脚,选择 GPIO_Output

在 GPIO 里面找到我们新添加的引脚 PF9,紧接着设置以下的几个参数(对应下图的第五步)

  • GPIO 输出级别:设置为 LOW,表示初始低电平
  • GPIO 模式:推挽输出模式
  • GPIO 上拉下拉:设置为上拉模式
  • 最大输出速度:设置为 HIGH
  • 用户标签:可以空着或者瞎写一个,表示该 GPIO 的别名

在这里插入图片描述


SYS 设置为总线输出的模式

在这里插入图片描述


RCC 设置时钟
高速时钟 HSE 和低速时钟 LSE 均设置为外部晶振

在这里插入图片描述


时钟设置

这一块比较复杂,后续我将会专门出一个专题文章来介绍这个时钟配置系统各个参数的对应含义,现在大家仅需要根据我们当前的需求,简单配置以下就可以了,我们当前的目的就是让他跑起来没别的

在这里插入图片描述

根据图上所示的步骤依次执行

  1. 设置为高速时钟 HSE
  2. 选择开启 PLL 倍频器,即 PLLCLK
  3. 设置 CPU 时钟频率 HCLK 为 72

设置完毕后点击回车,CubeMX 会自己为我们计算然后得出最合适的配置并自动填充其他的空


项目配置

进入 ProjectManager 面板

首先看项目设置

  • 设置项目名称
  • 项目名称和项目保存路径必须全英文且不要有奇奇怪怪的特殊符号!不然会导致编译错误
  • 工具链 toolchain 选择 MDK-ARM,版本选择目前最广泛使用的 v5 版本

在这里插入图片描述


Code Generator 代码生成配置

按照下图所示步骤一和步骤二,勾选对应的内容

步骤一:勾选仅生成必须的库,可以减少编译的时间
步骤二:勾选生成外围设备是都生成.c 和.h 文件

在这里插入图片描述


生成项目

对于 tools 一栏,基本没什么好改的,直接不管

点击右上角的 GENERATOR CODE 生成 keil 代码,然后弹出的窗口中选择 open project 即可直接打开 MDK-ARM
此时看见的就是我们实验 STM32CubeMX 生成的代码了!

该工具的最大作用就是把我们需要反复配置的时钟以及引脚等等东西都可视化了,一键式操作附带生成代码,极其方便;
但是只能使用 HAL 库开发,目前不支持生成的项目使用库函数开发


项目文件介绍

最主要的项目文件在下图红框圈出来的内容

在这里插入图片描述


先来看看初始化 GPIO 的代码是怎么写的,下面给出了对应的中文注释

代码清单 gpio.c

void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};  // 定义GPIO初始化结构体

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOF_CLK_ENABLE();  // 使能GPIOF端口时钟
  __HAL_RCC_GPIOH_CLK_ENABLE();  // 使能GPIOH端口时钟
  __HAL_RCC_GPIOA_CLK_ENABLE();  // 使能GPIOA端口时钟

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); // 初始化LED引脚输出低电平

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED_Pin;  // 配置LED引脚
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 设置为推挽输出
  GPIO_InitStruct.Pull = GPIO_PULLUP;  // 设置为上拉输入
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  // GPIO速度频率设置为高速
  HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);  // 初始化LED引脚GPIO端口
}

main.c 里面有 cubemx 生成的一大堆注释,根据这些注释的提示,我们在对应部分填入对应的代码
这里初始化了 HAL 库、系统时钟、GPIO 口

代码清单 main.c

/* 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 */
  }
  /* USER CODE END 3 */
}

在 while 循环里面填入点灯代码,让灯泡每隔 200ms 亮灭一次
使用 HAL_Delay 这个官方给出的延迟函数

while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
    HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
    HAL_Delay(200);
    HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
    HAL_Delay(200);
}
/* USER CODE END 3 */

Debugger 设置

鉴于 ST-Link 默认烧录不会重置,所以大概率编译后烧录你看不到任何效果

按照下图所示,打开工程设置
在 Debug 项打开 ST-LINK 设置
Flash Download 内勾选 Reset and Runs

在这里插入图片描述


编译并烧录,可以看见此时的小灯就已经间隔闪烁起来啦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

101、基于STM32单片机智能输液器红外点滴液位监控报警系统设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&a…

Python程序设计

很多刚接触Python的同学会觉得Python就和shell语言一样,是一门脚本语言,并不需要设计,只需要关注要实现的功能。确实一门计算机语言的诞生就是为了去更好的解决当前的痛点,功能实现肯定是第一位的。但是如何在功能实现的前提下&am…

【人工智能】您必须了解的最佳聊天机器人框架

在本博客中,我们将讨论 7 大聊天机器人开发框架。 聊天机器人现在已成为许多企业不可或缺的一部分。他们利用聊天机器人提供客户支持服务。聊天机器人增强了人工代理以提供客户服务支持。企业每天都会收到大量查询。手动回答这些问题不仅耗时,而且还会增…

数据结构--由遍历序列构造二叉树

数据结构–由遍历序列构造二叉树 不同二叉树的中序遍历序列 中序遍历:中序遍历 左 \color{red}左 左子树、 根 \color{purple}根 根结点、中序遍历 右 \color{green}右 右子树 中序遍历序列:BDCAE 结论 : 一个中序遍历序列可能对应多种二叉树形态 \color{green}结论:一个中序…

4.4 x64dbg 绕过反调试保护机制

在Windows平台下,应用程序为了保护自己不被调试器调试会通过各种方法限制进程调试自身,通常此类反调试技术会限制我们对其进行软件逆向与漏洞分析,下面是一些常见的反调试保护方法: IsDebuggerPresent:检查当前程序是…

OpenCV 入门教程:图像读取和显示

OpenCV 入门教程:图像读取和显示 导语一、图像读取1.1、导入 OpenCV 库1.2、读取图像文件1.3、图像读取的返回值 二、图像显示2.1、创建窗口2.2、图像显示2.3、等待按键2.4、关闭窗口 三、示例应用总结 导语 在计算机视觉和图像处理领域,读取和显示图像…

非局部均值滤波(磨皮)

note 根据掩膜区域与其他区域的相似程度来赋予掩膜区域像素权重 相似程度由均方差来衡量 code /*\brief 矩阵求邻和\param type1,列方向;type2,行方向 */ static void MyCumSum(Mat& src, Mat& res, int type) {if ((src.channel…

关于impacket套件中的atexec.py在使用的时候报error: unrecognized arguments: 的解决方案

定位到库文件C:\Users\LC\AppData\Local\Programs\Python\Python311\Lib\argparse.py 加一个return args就行了 用完记得改回来,不然会影响其他脚本的功能

算法分析和设计选择和判断

算法分析和设计选择和判断 目录 平时测试 1.算法概述 1.1渐进符号的概念 1.2求时间复杂度 1.3比较时间复杂度 1.4时间复杂度定义 1.5算法的有效性 1.6算法的性质 1.7顺序搜索法 1.8渐进算法分析 2.递归和分治策略 2.1归并排序 2.2归并的空间复杂度 2.3插入排序 2.4递归 2.5归并…

Docker容器与HSM整合的好处

Docker透过容器使创建、部署和运行应用程式变得更加容易。容器允许开发人员可以将一个应用程式与它所需要的所有部分封包,然后将应用程式及其组件作为一个单一的套装软体。 Docker面临的挑战 : ● 遭受特权用户滥用的风险 Docker环境或容器内的权限配置不当可能会导…

Redis常见数据结构

文章目录 前言一、Redis通用命令二、String类型三、Key的层级结构四、Hash类型五、List类型六、Set类型七、SortedSet类型 前言 Redis是一个key-value的数据库,key一般是String类型,但是value的类型多种多样 在学习Redis不同数据类型时,我们…

ChatGPT付费创作系统V2.1.0独立版 +WEB端+ H5端 + 小程序端+文心一言

ChatGPT付费创作系统V2.1.0提供最新的对应版本小程序端,上一版本增加了PC端绘画功能,绘画功能采用其他绘画接口-意间AI,本版新增了百度文心一言接口。后台一些小细节的优化及一些小BUG的处理,前端进行了些小细节优化,针…

C#学习之路-类型转换

类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。 C# 中的类型转换可以分为两种:隐式转换和显式转换。 隐式类型转换 隐式转换是指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …

如何使用SU插件一键生成通道图

如何使用SU插件一键生成通道图 通道图有什么作用? 以材质ID为例,最大的作用就是在PS通过选择材质ID图上的颜色,将颜色区域转化为蒙版,进而可以调节颜色区域所对应的效果图区域,原理类似于PS自带的通道:而A…

css 3D Demo

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> body{ /* 该属性必须在父或大于父的级别上添加,保证其子,孙等盒子可以以3D视角…

langchain调用chatGLM2纪实

一、科学上网要注意&#xff1a; 域名全代和全局代理&#xff08;网卡&#xff09;&#xff0c;都要打开。这样conda install特别快。 二、安装langchain 1、 conda install langchain 2、 conda install openai 注意&#xff1a; 使用pip install和conda install 是不同…

mysql如何运行 mysql 基本命令

一、 mysql如何运行 1. 成功安装mysql 点击进入–》如何安装 2. 确保mysql服务启动&#xff1a; 按下win&#xff0c;输入服务&#xff0c;然后找到mysql&#xff0c;启动服务&#xff1a; 3. 配置环境变量&#xff08;可跳过&#xff09; 点击进入–》如何配置环境变量…

SpringBoot项目出现Failed to configure a DataSource错误时解决方法

若在运行SpringBoot项目时&#xff0c;出现如下错误&#xff1a; Description:Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the…

1.前言和介绍

目录 前言1. 说在前面2. 介绍3. 拓展&#xff1a;vscode3.1 文件传输3.2 高效调试配置3.2.1 配置launch.json3.2.2 配置task.json3.2.3 配置settings.json3.2.4 配置c_cpp_properties.json 前言 从零学习算法部署-TensorRT篇 杜老师推出的 tensorRT从零起步高性能部署 课程&…