欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

程序员文章站 2022-03-03 19:06:43
STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验,详细讲述了 STM32CubeMX GPIO 配置方法,内附图文及代码。...

先点赞,再看博客,顺便点个关注鼓励一下。
如果文章看完,觉得不错的话可以点个收藏,日后不迷路。



1 前言

1.1 STM32CubeMX

STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

点击图片进入 ST 官网 STM32CubeMX 介绍页面

1.2 教程介绍

STM32CubeMX 实战教程 基于正点原子 STM32F1 精英板(STM32F103ZET6)平台,旨在通过对板载资源的使用将各种外设的配置方法讲述清楚。更多教程请订阅 [专栏]STM32CubeMX
本教程是 STM32CubeMX 实战教程中的第二篇,主要通过对 LED 灯、蜂鸣器、按键输入等三个实验的实现,将 STM32CubeMX GPIO 的配置方法讲述清楚。

1.3 准备工作

系统版本:Windows 10 专业版 64 位
软件版本:STM32CubeMX V6.0.0 ( STM32CubeMX 下载及安装教程
硬件平台:正点原子 STM32F1 精英板
编译环境:MDK_ARM V5.29 ( MDK_ARM 下载及安装教程
调试工具:ST-LINK/V2

2 配置项目

将上一篇实战教程中建立的模板复制到新的文件夹下,更改相关名称,删除 MDK-ARM 文件夹及 Template 文件;
STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

模板

STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

新工程

STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

删除文件后的新工程

2.1 项目导入

  1. 打开 STM32CubeMX,点击 File > Load project 或点击 Other Projects;(也可在文件目录下直接打开项目文件)
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
  2. 选择项目文件 GPIO_Test.ioc,点击 打开
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
  3. 项目界面如下。
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

2.2 GPIO 配置

  1. 选择管脚(PB5),左键单击,选择 GPIO_Output
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

  2. 在配置好模式的管脚上,右键单击,点击 Enter User Label,输入用户标签 DS0
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

  3. 设置完成管脚后,进入 GPIO 配置相关管脚模式,配置完成如下图;
    (关于管脚模式、上/下拉、速度这些基础知识,请自行学习)
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
    GPIO 可选择按类别显示。
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验

2.3 生成代码

时钟配置、项目管理配置及生成代码请参考:STM32CubeMX 实战教程:新建项目和生成 MDK_ARM 工程STM32CubeMX 项目配置窗口介绍(一)STM32CubeMX 项目配置窗口介绍(二)
点击 GENERATE CODE 生成代码。

3 代码测试

  1. 打开 MDK_ARM 工程;
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
  2. main.h 文件中,有自动生成的用户标签管脚宏定义;
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
  3. while 循环中加入测试代码;
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
    main 函数代码如下:
/**
  * @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. */ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_AFIO); LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); /* System interrupt init*/ /** NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST
  */ LL_GPIO_AF_Remap_SWJ_NONJTRST(); /* 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 */ LL_RCC_GetSystemClocksFreq(&get_rcc_clock); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(LL_GPIO_IsInputPinSet(KEY_UP_GPIO_Port, KEY_UP_Pin) == 1 ) // KEY_UP Press { LL_GPIO_SetOutputPin(BEEP_GPIO_Port, BEEP_Pin); // BEEP ON } else { LL_GPIO_ResetOutputPin(BEEP_GPIO_Port, BEEP_Pin); // BEEP OFF } if(LL_GPIO_IsInputPinSet(KEY0_GPIO_Port, KEY0_Pin) == 1 ) // KEY0 UnPress { LL_GPIO_SetOutputPin(DS0_GPIO_Port, DS0_Pin); // DS0 OFF } else { LL_GPIO_ResetOutputPin(DS0_GPIO_Port, DS0_Pin); // DS0 ON } if(LL_GPIO_IsInputPinSet(KEY1_GPIO_Port, KEY1_Pin) == 1 ) // KEY1 UnPress { LL_GPIO_SetOutputPin(DS1_GPIO_Port, DS1_Pin); // DS1 OFF } else { LL_GPIO_ResetOutputPin(DS1_GPIO_Port, DS1_Pin); // DS1 ON } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 
  1. 编译工程;
    STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验
  2. 使用 ST-LINK/V2 下载程序,按下复位按键,若按照下面操作看到正常现象,则说明程序正常运行,GPIO 配置成功。
Steps 操作 正常现象 备注
1 按下 KEY_UP 按键,不放 蜂鸣器响 -
2 按下 KEY0 按键,不放 DS0 LED 亮 -
3 按下 KEY1 按键,不放 DS1 LED 亮 -

4 结束

本教程由 Brendon Tan 原创发布,版权所有。该文档仅供个人学习交流使用,不得用于其他用途, 禁止商用, 转载或公开使用请联系作者授权。
此教程由本人独立整理,如有不当之处,欢迎指正。

附录 相关教程

STM32Cube 系列软件教程总目录请参考文章:STM32Cube 生态系统之网站、视频、文档及教程汇总
该文章还提供:

  • STM32Cube 生态系统相关文章
  • STM32Cube 生态系统相关软件更新介绍
  • STM32Cube 生态系统相关教程汇总
  • STM32Cube 生态系统相关网站汇总
  • 该文章会不定期修改更新,更多信息请进入文章查看

本文地址:https://blog.csdn.net/Brendon_Tan/article/details/107900727