【STM32基础 CubeMX】从0带你点灯

这篇具有很好参考价值的文章主要介绍了【STM32基础 CubeMX】从0带你点灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言


一、GPIO的概念

STM32是一系列微控制器芯片的品牌,它们用于控制各种电子设备。其中的GPIO是通用输入/输出端口的简称,是STM32芯片上的一些引脚,用于与外部世界进行通信。
想象一下STM32芯片就像一个微型大脑,而GPIO引脚就是它的手臂和感官。这些手臂可以用来连接到LED灯、按钮、电机、传感器等外部设备,而感官则可以用来接收来自外部世界的信息,比如检测按钮是否被按下,或者读取传感器的数据。
您可以通过编程来控制这些手臂,告诉它们是应该高举还是低放,就像您控制您的手臂一样。这就是GPIO的基本概念:它们是微控制器与外部设备之间的桥梁,允许微控制器与外部世界互动和通信。通过控制这些引脚的电压,您可以执行各种任务,例如点亮LED、移动电机、检测按钮按下等等。所以,GPIO是让STM32芯片与外部设备互动的关键部分。

二、CubeMX配置GPIO

2.1 基础配置

1、点击File创建新的工程
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
2、输入STM32型号
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu

3、选择具体的STM32
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
双击就可以创建了。就像下面这样:
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
然后使用CTRL+s保存,切记不要保存到中文路径下面。

4、配置时钟
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
点击RCC,把High Speed Clock(HSE)设置成图片上面的这个

5、选择Clock Configuration配置时钟【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
6、设置微控制器的主总线时钟为最大
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
你这里有多大设置多大,然后按回车。

7、设置debug模式为Serial wire
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu

8、选择工具链
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
9、生成代码
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu

这样就是生成好了,我们进行一些Keil的普通配置即可烧录程序进去!

2.2 GPIO配置

1、首先在原理图中找到你想要点的灯的引脚
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
2、在CubeMX里面找到他
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
3、设置引脚模式
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
因为我们是要点灯,所以设置输出模式

【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
右键可以设置他的名字。

4、接下来设置这个配置特定的GPIO引脚在输出模式下的电压电平状态。
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
5、设置GPIO mode
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
他们的介绍如下:
推挽输出(Push-Pull Output):

想象一下你有一个开关,可以很容易地按下(这是推)和放开(这是挽)。推挽输出就像这样的开关。它可以将电路连接到电源(高电平)或地(低电平)。

开漏输出(Open-Drain Output):

现在,想象你只能把开关按下,但不能把它放开。这就像你只能把开关拉向地面,但不能把它推向电源。开漏输出就像这样,它只能将电路连接到地(低电平),但在高电平时不会主动提供电源。

这两者之间的主要区别在于,推挽输出可以主动提供电源和连接到地,而开漏输出只能连接到地。开漏输出通常用于需要多个设备共享同一信号线的情况,而推挽输出用于一般的输出任务,比如控制LED灯或驱动电机等。

所以驱动灯需要推挽模式

6、设置GPIO输出的速度
【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu
可以设置3个等级,这里的灯没有要求,随便设置!

最后我们生成代码。

三、点灯代码讲解

3.1 cubemx生成的代码

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

  /*Configure GPIO pin : PB5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu

下面为这些代码的解析:
static void MX_GPIO_Init(void):这是一个静态函数,用于初始化GPIO配置。函数名是MX_GPIO_Init,不接收任何参数,返回值为空(void)。

GPIO_InitTypeDef GPIO_InitStruct = {0};:在函数内部创建了一个名为GPIO_InitStruct的结构体变量,用于配置GPIO的初始化参数,并初始化为默认值。

__HAL_RCC_GPIOA_CLK_ENABLE();:这行代码启用GPIOA端口的时钟。它告诉微控制器启动GPIOA端口的时钟以激活它,以便您可以在这个端口上使用GPIO引脚。

__HAL_RCC_GPIOB_CLK_ENABLE();:这行代码启用GPIOB端口的时钟,同样的道理,它启用了GPIOB端口以使其可用。

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);:这行代码将GPIOB端口的第5号引脚(也就是PB5)的输出电平设置为低电平(GPIO_PIN_RESET)。这通常用于初始化GPIO引脚的状态。

GPIO_InitStruct.Pin = GPIO_PIN_5;:这行代码设置了GPIO_InitStruct结构体中的Pin成员,指定了要配置的GPIO引脚,即PB5。

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;:这行代码设置了GPIO_InitStruct结构体中的Mode成员,将GPIO引脚配置为推挽输出模式(GPIO_MODE_OUTPUT_PP)。这意味着PB5将能够提供电源并连接到地。

GPIO_InitStruct.Pull = GPIO_NOPULL;:这行代码设置了GPIO_InitStruct结构体中的Pull成员,表示不使用上拉或下拉电阻。

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;:这行代码设置了GPIO_InitStruct结构体中的Speed成员,将GPIO引脚的输出速度配置为高速度。这表示GPIO引脚将具有较短的上升和下降边沿,以实现高速输出。

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);:最后一行代码将配置参数应用到GPIOB端口的PB5引脚上,初始化该引脚的配置。

3.2 1个库函数

HAL_GPIO_WritePin函数是HAL(Hardware Abstraction Layer)库中的一个函数,用于控制STM32微控制器上的GPIO引脚的输出电平。以下是该函数的原型以及参数的作用:

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu

参数解释:

GPIO_TypeDef* GPIOx:这是一个指向GPIO端口寄存器的指针。它告诉函数要控制哪个GPIO端口。在STM32库中,每个GPIO端口都有一个相应的GPIO_TypeDef结构体指针,用于访问该端口的寄存器。例如,GPIOA、GPIOB等。

uint16_t GPIO_Pin:这是一个用于指定要控制的GPIO引脚的位掩码。在STM32中,每个GPIO端口有多个引脚,每个引脚都有一个唯一的位掩码。这个参数告诉函数要控制哪些引脚。可以使用位掩码运算来同时控制多个引脚。

GPIO_PinState PinState:这是一个枚举类型的参数,用于指定要设置的引脚状态。它有两个可能的值:

GPIO_PIN_RESET:表示要将引脚的状态设置为低电平(0V)。
GPIO_PIN_SET:表示要将引脚的状态设置为高电平(通常等于系统供电电压或VDD)。
这个函数的作用是根据参数的设置来控制指定GPIO端口上的一个或多个引脚的输出电平状态。它允许您在嵌入式应用中轻松地控制和操作GPIO引脚的电平,用于控制外部设备、传感器和其他外围设备。

那么我们就可以去点亮LED啦:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);

【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu

四、LED闪烁

我们只需要在main函数中的while循环写一个高电平一个低电平即可闪烁LED

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 */
		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,0);
		
		HAL_Delay(200);
		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,1);
		
		HAL_Delay(200);

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

【STM32基础 CubeMX】从0带你点灯,从0带你学会如何像人类一样写STM32程序,stm32,单片机,嵌入式硬件,c++,c语言,物联网,mcu

其中HAL_Delay是一个延时函数,参数为延时的毫秒数。


总结

本文介绍了STM32微控制器的基础概念,特别是GPIO(通用输入/输出端口),并以通俗易懂的方式解释了相关概念。
首先,我们了解了STM32是一系列用于控制电子设备的微控制器芯片品牌。在这个系列中,GPIO引脚扮演了重要角色,它们就像微控制器的手臂和感官,用于连接和与外部世界通信。
GPIO引脚的基本概念是它们可以通过编程来控制,就像控制手臂一样。通过改变这些引脚的电压,可以执行各种任务,例如点亮LED、移动电机、检测按钮按下等等。GPIO是STM32与外部设备互动和通信的关键部分。
这篇文章强调了GPIO的初始化过程,以及如何使用HAL库中的函数来配置和控制GPIO引脚。示例代码中展示了如何初始化GPIO引脚,并将其配置为输出,以控制LED的点亮和熄灭。
总的来说,本文提供了一个入门级的STM32 GPIO教程,让读者了解了如何从零开始控制一个简单的电子设备,即LED灯。这是深入学习STM32嵌入式开发的第一步,为进一步探索更复杂的应用奠定了基础。希望本文对初学者有所帮助,引导他们进入嵌入式系统开发的精彩世界。文章来源地址https://www.toymoban.com/news/detail-730445.html

到了这里,关于【STM32基础 CubeMX】从0带你点灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32-OTA升级-基于STM32CubeMX+STM32F103(一)基础知识

    0 引言 对于一个项目而言,往往将远程升级作为程序的最后一步(基本所有功能都开发完成之后再考虑)。但是在我看来,我们在写单片机的程序之前,就要规划好FLASH的使用情况,因为code、全局变量等重要信息都是放在FLASH(常说的闪存)中的,SRAM是程序运行时的存放位置

    2024年02月04日
    浏览(57)
  • STM32+CubeMX零基础串口收发全攻略

    第一章:初学单片机,使用STM32进行点灯 本文主要是解决简单的串口通信 提示:以下是本篇文章正文内容,下面案例可供参考 本案例主要涉及到的装置和软件有: 1.一块STM32F103ZET6的开发板(也可使用其它板子) 2.ST-LINKV2(有钱的也可使用J-link等)一个与杜邦线若干 3.涉及到

    2024年02月13日
    浏览(35)
  • 【STM32笔记】STM32的定时器开发基础(二)(基于STM32CubeMX实现定时器中断)

      传统STM32外部中断 的设计步骤:  (1)将GPIO初始化为输入端口。  (2)配置相关I/O引脚与中断线的映射关系。  (3)设置该I/O引脚对印的中断触发条件。  (4)配置NVIC,并使能中断。  (5)编写中断服务函数。   基于STM32CubeMX的外部中断 设计步骤  (1)在STM3

    2024年02月20日
    浏览(62)
  • stm32cubemx配置mpu6050——10分钟0基础到灵活使用

    10分钟速通!你没看错,就是10min,从0基础到灵活运用mpu6050。 不信?往下看看就会:嗷~原来如此 下载github开源代码。 首先声明,此代码不是本人所写,为某俄罗斯大佬提供。 如果你访问不了github不用担心,我在文章最后附上下载下来的文件 软件 根据github开源项目的Readm

    2024年02月03日
    浏览(44)
  • 【STM32】使用CubeMX快速创建FreeRTOS的基础工程,基于正点原子

    【STM32】HAL库 新建MDK工程 【STM32】HAL库 串口轮询发送 【STM32】HAL库 LED闪烁、流水灯 【STM32】HAL库 定时器中断 【STM32】HAL库 外部中断 使用STM32F103C8T6开发板,用STM32CubeMX配置FreeRTOS,可以适配正点原子FreeRTOS所有实验的基础工程 HAL的时基不能选择系统定时器 PA0和PA1输出模式,

    2024年02月19日
    浏览(52)
  • 【物联网学习笔记】CubeMx+STM32F407ZGT6+LWIP最最最基础配置

    使用正点原子探索者开发板 板载芯片:STM32F407ZGT6 PHY芯片:LAN8720 LWIP版本:2.1.2 本次目标:先ping通开发板再说! 修订: · 2024.4.23经评论区反馈又重新下载6.10版本CubeMX,发现确实没有Advanced Parameters,目前使用6.6.1存在,如有需要可以改成这个版本。 更改引脚 在ethernetif.c中找

    2024年04月27日
    浏览(73)
  • 江科大stm32之“点灯大师”

    声明:文章中出现的资料多数来自江科大视频资料,本文是我学习stm32的随手笔记 目录 一、准备 二、实现星星点灯 1、接线图 2、原理 3、步骤 (1)使用RCC开启GPIO时钟 (2)使用GPIO_Init函数初始化GPIO (3)用输出或者输入函数控制GPIO口 三、点灯大师 本次学习内容是经典的点

    2024年02月21日
    浏览(32)
  • 【STM32&RT-Thread零基础入门】8. 基于 CubeMX 移植 RT-Thread Nano

    硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 利用RT_Thread操作系统实现三种不同的LED等闪烁 提示:以下是本篇文章正文内容,下面案例可供参考 cubemx配置参考教程: 基于 CubeMX 移植 RT-Thread Nano 后面程序所需的引脚 RT

    2024年02月09日
    浏览(48)
  • STM32手把手点灯学习笔记(大疆robomasterA板)

    建议大家先在b站看正点原子或者野火的stm32视频,本贴仅适用于刚刚接触stm32并且使用大疆robomasterA型开发板的同学,我会分享实现的代码和学习的方法,供大家后续学习A板时可以参考,帖主也是正在学习,欢迎大家一起讨论 此教程建立在你会使用keil5, 虽然说正点原子和野

    2023年04月08日
    浏览(87)
  • Vscode platformio Arduino开发STM32,点灯+串口调试

    1.工具 USB-TTL(非常便宜,几块钱) STM32F103C8T6(几块钱) 2.引脚连线 USB-TTL STM32 TX PA10 RX PA9 VCC 3.3V GND GND 注意事项: 跳线帽位置:BOOT0接高电平(1),BOOT1接低电平(0) 每次上传程序前需要按一下复位键(之后,跳线帽的位置不需要改变,程序即可正常运行),否则会可能出现下面这种情

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包