0%

stm32F407HAL库学习-点亮LED灯

stm32F407HAL库学习-点亮LED灯

前期准备:

  • stm32F407ZGT6开发板
  • stm32cubeIDE软件
  • STM32F4xxHAL库

1、创建工程

我从这开始想学习使用stm32CubIDE工具来写代码。所以这算一个新的教程。

1、在双击stm32CubIDE工具进入到主界面中,点击左上角file->NEW->stm32_Prject.

然后计入到选择MCU的界面。

在这个中,有一个Part Number Search的一行,下面有个搜索的图标。在方框中输入型号。我这次使用的是stm32F407ZGT6.下面图片中不一样,是我截取网上的图片。

选中你的芯片型号只有,点击右下角的Next,然后进入到创建项目的界面,如下图。

在上面界面中 的Project Name这行输入名称,这个名称就是你项目的名称,这里我们输入LED_Project.完成后,点击下面的完成。

然后进入了硬件配置的界面。

这里比较重要详细讲一下,分为三大块。

  • 1、MCU外设资源的选择。

    提供了三种方法找到外设。可以直接搜索或者通过字母顺序的查找。还可以在大的分类里面找。

  • 2、外设配置

    选择好外设后,在这里构建好外设的功能。

  • 3、预览界面

    这里分为引脚预览和系统预览。

2、配置引脚

工程已经创建好了,下面开始配置GPIO引脚和一些必要的外设配置。

1、配置GPIO引脚用于LED
  • 在 STM32CubeMX 界面中,点击左侧的 Pinout & Configuration 标签,进入芯片引脚配置视图。

  • 在芯片引脚图上找到PF9、pF10,点击它。

  • 在弹出的选项中,选择 GPIO_Output,表示将该引脚配置为通用输出模式。

  • 左侧会显示 GPIO 选项,点击它。

  • 在 GPIO 配置窗口中,找到 PF9、PF10,可以设置以下参数:

    • GPIO mode: Output Push Pull(推挽输出)
    • GPIO Pull-up/Pull-down: No pull-up and no pull-down(无上拉/下拉)
    • Maximum output speed: Low(低速即可,LED 不需要高速)
    • User Label: 输入 LED(可选,方便代码中识别)。
2、配置时钟
  • 点击顶部的 Clock Configuration 选项卡。

  • 如果你使用外部晶振(HSE,例如 8 MHz,常见于发现板),在 HSE 输入框中选择 Crystal/Ceramic Resonator。

  • 默认情况下,STM32CubeMX 会自动配置 PLL(锁相环)以达到较高频率(例如 168 MHz,这是 STM32F407 的最大主频)。

    在 System Clock 输入框中,确认频率(比如 168 MHz),或者根据需要调整。

    点击 Resolve Clock Issues 按钮(如果有提示),让工具自动优化时钟树。

3、生成代码

配置完成后按下ctrl + S ,保存,就会生成初始化代码。

3、编写代码

  • 在工程目录的 Core > Src > main.c 中打开 main.c。

  • 在 main() 函数中,找到 while (1) 循环,这是主循环区域。

  • 你会看到类似下面的代码框架:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int main(void) {
    /* 初始化代码已由 CubeMX 生成 */
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();

    /* USER CODE BEGIN 2 */
    /* USER CODE END 2 */

    while (1) {
    /* USER CODE BEGIN 3 */
    /* USER CODE END 3 */
    }
    }
  • 添加 LED 闪烁代码:

    1
    2
    3
    4
    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); // 翻转 PD12 引脚状态
    HAL_Delay(500); // 延时 500 毫秒
    /* USER CODE END 3 */

4、编译并下载

  1. 编译代码:
    • 点击 STM32CubeIDE 顶部工具栏的“锤子”图标(Build),或者按 Ctrl + B。
    • 检查输出窗口,确保没有错误。
  2. 连接硬件:
    • 将 STM32F407ZGT6 开发板通过调试器(比如 ST-Link)连接到电脑。
  3. 下载程序:
    • 点击“绿色播放”按钮(Run),或者选择菜单 Run > Run。
    • 程序会下载到芯片并自动运行。

复习一遍GPIO的八种模式

1、输入模式

1、输入浮空模式(Input Floating)
  • 原理:GPIO引脚不接受任何内部的上拉和下拉电阻,处于悬浮状态。它的电平状态完全由外部信号决定。
  • 用途:适用于外部电路已经提供了明确的高低电平信号。
  • 注意:如果外部不接任何东西,电平会不稳定,容易受到干扰。
2、输入上拉模式(Input Pull-Up)
  • 原理:GPIO引脚内部连接一个上拉电阻,连接3.3v电源。如果外部没有信号,则默认处于高点平。
  • 用途:常用于检测低电平触发信号,比如按键按下时,引脚从高变为低。
  • 注意:上拉电阻通常比较弱,外部信号足够强的话可以拉低电平。
3、输入下拉模式(Input Pull-Down)
  • 原理:GPIO引脚在内部连接一个下拉电阻,连接着地。如果外部没有信号,则默认处于低电平。
  • 用途:常用于检测一个高电平信号,当一个传感器输出高电平时触发。
  • 注意:和上拉电阻一样,电阻很弱,当外部信号足够强时可以改变其电平
4、模拟输入模式(Analog Input)
  • 原理:GPIO不在做数字信号处理,直接作为模拟信号输入,连接内部ADC。
  • 用途:测量连续变化的电压值,比如温度传感器
  • 注意:这种模式下,引脚不能用于输入输入输出,只能给模拟电路用。

2、输出模式

5、开漏输出模式(Open-Drain Output)
  • 原理:GPIO引脚只能输出低电平,高电平处于开路状态,需要外部上拉电阻拉高。
  • 用途:常用于IIC、SMBus等通信协议。
  • 注意:必须外部连接上拉电阻,否则高电平无法实现。
6、推挽输出模式(Push-Pull Output)
  • 原理:GPIO可以主动输出高电平和低电平,由内部电路直接驱动。
  • 用途:最常用的输出模式
  • 注意:驱动能力强,但是不能对各引脚直接并联输出。会短路。
7、复用功能模式(Alternate Function)
  • 原理:GPIO引脚配置为硬件外设功能,比如USART的TX、RX等。
  • 用途:用于特定的外设功能。例如串口通信
  • 注意:配置时需要指定其具体的功能。
8、复用开漏、推挽模式(Alternate Function Open-Drain/Push-Pull)
  • 原理:结合复用功能和开漏、推挽输出。例如IIC用开漏,PWM用推挽。
  • 用途:根据外设需求选择输出类型,比如I2C需要开漏,PWM需要推挽。
  • 注意:具体模式取决于外设协议要求。