STM32F0x HAL库学习笔记(2)STM32CubeMx 初始化和读/写 IO口操作

本文开发环境:

  • MCU型号:STM32F051R8T6
  • IDE环境: MDK 5.18
  • 代码生成工具:STM32CubeMx 5.0.1

本文内容:

  1. 初始化IO口
  2. IO口的读和写

当我们安装好STM32CubeMx以及芯片对于的固件包之后,就可以开始一个新的工程。对于一个MCU来说,IO口的读和写是简单的,通常作为一个单片机裸机中外设开发的第一步。本文演示如同通过CubeMx来生成一个初始化IO口工程,并实现IO口的读写。

IO口工程的建立

本文以初始化 PA0PC9 为例,其中,PA0作为输入IO口PA9作为输出IO口,分别演示IO的读和写操作。建立一个工程主要有以下几个操作:

  1. 选择芯片
  2. 初始化RCC,选择系统时钟
  3. 初始化外设
  4. 生成工程
  5. 编写用户代码

接着下来分别介绍这些步骤的具体操作。

选择芯片

建立工程的第一步,有2种方式可以选择:选择芯片和选择板子,这里只介绍选择芯片的方式。
点击Start My Project from Mcu 下的 ACCESS TO MCU SELECTOR,如下图所示:
在这里插入图片描述
确定方式后,你可以通过多种方法来确定一个芯片,比如Core,Series等等,但是通过Part Number来确定是很便捷的。首先,我们在Part Number的搜索框中输入STM32F051R8,得到了该芯片系列,接着在MCUs List列表中选择STM32F051RBTx(如果点到 STM32F0DISCOVERY这样则变成通过选择板子而非选择芯片的方式来创建工程了),步确定具体芯片。由于芯片型号的最后一个字母表示包装方式,对生成代码没有影响,所以这里用x来表示可以是任何值,当然也包括本文的“6”。
在这里插入图片描述
当我们选中STM32F051R8Tx后,MCU 列表上的简介窗口出现了该芯片的信息,右上角的 Start Project也变成了有效按钮,即可点击状态。如下图所示:
在这里插入图片描述
点击Start Project就可以开始一个新的工程,进入新界面:
在这里插入图片描述

初始化RCC,选择系统时钟

MCU有多种时钟源可以选择,如外部高速时钟(HSE),外部低速时钟(LSE),还有内部时钟等。本文硬件平台已经接入一个8M的晶振。这里以外部高速时钟作为系统时钟,首先展开System Core,点击RCC,在Mode栏的 High Speed Clock(HES)选项框选择Crystall/Ceramic Resonator,如果你的板子没有外部晶振,那么也可以使用内部时钟。其余的保持默认,可以看到右侧芯片引脚PF0,PF1已经变成绿色,表示已经使用。如下图所示:
在这里插入图片描述
现在我们只是使能了外部时钟,接着我们进入Clock Configuration来配置系统的时钟源为外部时钟,如下图所示:
在这里插入图片描述
进入Clock Configuration,可以看到系统默认使用的是内部时钟源,如下图所示:
在这里插入图片描述
这里我们以外部高速时钟为例,具体配置如下图所示,实心表示点选择:
在这里插入图片描述
可以看到,我们还配置了PLL的倍率(绿框部分),提高系统时钟至最高的48Mhz。至此我们便配置好系统的时钟源。

初始化外设

配置好每一个工程都需要配置的系统时钟源,我们便可以配置外设,外设则根据用户所需来配置,以本文为例,我们回到 Pinout & Configuration配置选项卡中,展开System Core,接着选择GPIO,这样就可以开始配置在Pinout view窗口中图形化配置IO口了。如下图所示:
在这里插入图片描述
本文以PC9作为输出IO口,PA0作为输入IO口,所以分别在点击PC9和PA0,选择对应的模式,如下图所示:
PC9配置
PA0配置
当我们选择好IO口模式后,可以发现 GPIO Mode and Configuration窗口中多了2个IO选项,我们可以点击选择它们,进行进一步的配置,以PA0为例,如下图所示:
在这里插入图片描述
输入口的模式我们选择浮输入,User Lable是用户自定义的,因为我的板子PA0接了一个按键,所以我命名为button。
PC9的配置也是同理,这里输入我们选择了推挽输入,如下图所示:
在这里插入图片描述
至此我们就完成了IO口的初始化配置,最后我们就可以生成工程了。

生成工程

选择 Project Manager 工程管理来生成工程需要的一些配置:
在这里插入图片描述
如下图所示,我想写入工程的名字,存储的位置,已经生成什么IDE的工程,本文开发IDE为MDK5,所以在Toolchain/IED中选择MDK-ARM V5,这里需要你对应的IDE既可。具体如下图所示:
在这里插入图片描述
之后我们配置好了工程,点击又上叫的GENEARTE CODE就可以生成一个工程了:
在这里插入图片描述
等待工程生成:
在这里插入图片描述
生成以后,可以直接打开工程:
在这里插入图片描述
这样便打开了一个工程,展开Application/User,进入main函数,可看到工程已经生成一些代码:
在这里插入图片描述

编写用户代码

当然,由于我们以后可能会用工具继续生成代码,那么不可避免的,CubeMx会修改main.c或其他文件,所以如果我们代码插入的地方不合适,就会被覆盖掉,在CubeMx工程中,用户代码需要插入在 带 BEGIN 和 END 注释的区域之中,这样CubeMx就可以识别到,在此生成代码时候,不会修改到这部分代码。
我们选择在 USER CODE BEGIN 3 和 USER CODE END 3中添加以下代码:

	if(HAL_GPIO_ReadPin(button_GPIO_Port, button_Pin))                                                  //读取PA0口的值,并判断
	{
	  HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);                     //值为非0,拉低PA0
	}
	else
    {
	    HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);                       //值为0,拉高PA0
	}
  }

如下图所示:
在这里插入图片描述
编译下载程序后,可以发现:LED灯亮了。当按下按键后,LED暗。弹起按键后,LED又恢复点亮状态,这样我们就完成了一个简单的IO初始化工程,接下来我们可以用STM32CubeMx来配置串口(uart,usart),定时器(TIM,PWM),外部中断)EXIT)等等。

扫描二维码关注公众号,回复: 5959153 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_17351161/article/details/89167560