STM32教程:如何点亮LED灯

stm32之点亮LED

学习stm32单片机的时候,会有三种,标准库,寄存器,HAL库。这里我们统一使用HAL库,使用stm32cubemx来建工程。会方便很多简化我们编写代码的时间但其实不管是HAL库还是标准库都是操作寄存器的只是官方给我们封装好了。软件就不演示安装了 。欢迎各位指出我的错误,共同进步。

我们通过每个案例来介绍单片机的知识点,流水的单片机,铁打的LED灯。大部分来说不管是什么单片机都是以点亮LED灯为基础

一分析原理图

这里我们根据给的原理图,找到led的区域。

先看LED0 是和PB5引脚相连的 即PB5引脚控制着LED0的电平,上接3.3V电压,即默认是高电平,所以我们将PB5设置为低电平的时候,电路导通。

(这里我们说明一下,电路导通,是需要一个高电平和一个低电平导致电流可以正常流通的。这里根据原理图发现PB5这个引脚所在的电路,是外接的有3.3V的VCC,即板子一上电就会有高电平)

所以我们想让LED0亮,就将PB5引脚设置为低电平。LED1同理。

那我们怎么设置,能否设置引脚为低电平或高电平呢?

二GPIO
2.1 什么是GPIO?
概述:General Purpose Input Output,即通用输入输出端口,简称GPIO 作用:负责采集外部器件的信息或者控制外部器件工作,即输入输出。

是不是很迷糊,简单来就是控制引脚使其能够达到输入和输出电平的操作。

比如我们这里的LED,我们需要将PB5设置为低电平,那是输入还是输出呢?

注意:这里的输入和输出的操作对象即主体是单片机。所以我们需要单片机去给PB5引脚输出低电平。即设置为输出模式。

2.2GPIO的特点
1,不同型号,IO口数量可能不一样,可通过选型手册快速查询

2,快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz)

3,每个IO口都可以做中断 (后面会说明什么是中断)

4,支持8种工作模式

2.3GPIO的八种模式分析

这里补充一下,当IO口设置为输出模式的时候,也是可以读取IO的电平状态的。

正常情况开漏和推挽的区别是:开漏输出无法输出高电平(必须加外部上拉电阻),推挽可以

这里我们总结一下GPIO的八种模式 又可以分为输出和输入

输入:1 浮空输入

       2 上拉输入

       3 下拉输入

       4 模拟输入

输出:1 开漏输出

       2 复用开漏

       3 推挽

       4 复用推挽

三stm32cubemx配置
我们说完了GPIO的基础知识我们来看怎么用cubemx来配置

这里我们新建工程

输入自己单片机的型号

点system core,然后点RCC配置时钟

选择外部时钟

将PB4,PE5 设置为输出


代码

void MX_GPIO_Init(void)
{
 
  GPIO_InitTypeDef GPIO_InitStruct = {0};//初始化GPIO使用的结构体变量
 
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOE_CLK_ENABLE();//打开gpioe的时钟
  __HAL_RCC_GPIOB_CLK_ENABLE();//打开gpiob的时钟
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);//将PE5 设置为低电平
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);//将PB5 设置为低电平
 
  /*Configure GPIO pin : PE5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;//选择引脚号
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出模式
  GPIO_InitStruct.Pull = GPIO_NOPULL;//无上下拉,输出一般是无上下拉
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//传输速度
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);//初始化GPIO
 
  /*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_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
}

作者:就爱吃夜宵

物联沃分享整理
物联沃-IOTWORD物联网 » STM32教程:如何点亮LED灯

发表评论