使用HAL库创建流水灯项目并使用逻辑分析仪

前情回顾

野火指南者实现流水灯:https://blog.csdn.net/weixin_54435584/article/details/127236470?spm=1001.2014.3001.5501

最小开发板实现流水灯:https://blog.csdn.net/weixin_54435584/article/details/127258841?spm=1001.2014.3001.5501

前言

在前面的博客中,笔者介绍了通过野火指南者以及C8T6最小开发板上的流水灯实现。它们每一个都离不开这几个步骤:时钟配置,工作模式配置,输出设置以及寄存器映射。

之前说过stm32不会自动生成这样一个寄存器映射文件,这使得我们在编写代码的时候会变得异常的困难。HAL库解决了这个问题。我们可以先使用STM32CubeMX软件创建一个项目而不是在KEIL5中创建,该软件为用户提供了图形化的配置功能,我们不用手动编写配置相关的代码,只需要在软件上进行可视化配置并生成项目,它就会自动编写相对应的配置代码。不仅如此,生成的项目还会调用HAL库,它将我们对GPIO口的各种操作封装成可引用的函数,让我们更方便地编写代码。

除此之外,在KEIL5的调试功能中,可以选择特定的GPIO端口,

STM32CubeMX下载

软件的下载链接在这里:点我下载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQCZZv8y-1665476776281)(E:\学习资料\嵌入式作业\04_流水灯\m0.png)]

根据不同的操作系统选择不同的按钮。我选择的系统与版本是Windows,6.4.0。

下载好后,这是一个安装器。根据下面的图例进行傻瓜式安装:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到这一步等待安装完成即可。

使用STM32CubeMX制作项目

1、安装HAL库

首先打开刚刚安装好的软件,按下图的流程安装hal库:

在这里插入图片描述

在这里插入图片描述

2、制作项目

新建项目

为STM32CubeMX下载了hal库后,就可以通过它创建项目了。

首先,点击正中间的Start My project from MCU,创建一个使用KEIL5编辑的项目。

在这里插入图片描述

点击后到下面这个页面:

在这里插入图片描述

在这个页面,根据你所使用的芯片类型,选择对应的芯片。例如我这里是最小开发板STM32F103C8T6,就在左边的过滤器上选择C8系列,并在列表中选出我的芯片。最后点击创建项目。

在这里插入图片描述

如果你看到这个页面,说明你前面的步骤成功了。下面开始配置项目,具体配置系统时钟,GPIO工作模式等等。

配置

(1)在这个页面,首先配置系统时钟与调试。

在这里插入图片描述

在System Core -> RCC -> HSE中,将HSE配置为Crystal/Ceramic Resonator。

然后点击上方的Clock Configuration,勾选PLLCLK。

在这里插入图片描述回到Pinout&Configuration,点击WWDG,按图设置调试。
在这里插入图片描述

(2)接下来配置GPIO端口。

点击SystemCore下的GPIO,进入到这个页面:

在这里插入图片描述

在这个页面的右边,是你所选的芯片的引脚图。点击你要使用的引脚,选择它们的工作模式:

例如,我要使用PA5,PB9,PC14:

在这里插入图片描述

在按上述方法选择了GPIO引脚后,左边出现上图这样的信息,说明已经选择成功。现在可以看见每个被选中的GPIO口有自己的一行配置信息。

相关参数如下:

参数描述
output level初始电平
mode引脚模式
Pull up/Pull down上拉下拉电阻
Maximum output speed引脚输出速率
User Label引脚名称

这里默认配置即可。

(3)现在进行项目设置

这一步是选择项目路径与命名,并让它生成初始化.c/.h文件。

点击Project Manager,按图中的顺序进行配置:

在这里插入图片描述

在这里插入图片描述

点击generate code,生成代码。

在这里插入图片描述

在这里插入图片描述

出现上图的弹窗,说明项目生成成功了。现在打开它。

代码编写

生成的项目结构如下:

在这里插入图片描述

在这里插入图片描述

与传统的流水灯项目不同,它添加了许多头文件,用于调用hal库。

双击main.c进入主文件,找到main函数:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  while (1)
  {

  }
}

前面说到过,hal库封装了一些列的方法供我们调用。这里它已经自动地调用了三个。顾名思义,它们的作用分别是初始化hal库,配置时钟以及配置GPIO工作模式。显而易见,这种创建项目的方式不需要手动制作寄存器映射与系统配置,并将对GPIO的操纵封装为函数调用,极大地方便了我们代码的编写。

在死循环中就是我们要编写的代码。我们要实现流水灯,需要有两种函数:一种用来设置GPIO电平,另一种用来延时。这两种函数在HAL库中都已经封好了。

这是它们的函数调用方式:

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//将PA4设置为0
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//将PA4设置为1

HAL_Delay(1000);//延迟1000ms

对于HAL_GPIO_WritePin(),第一个参数填写GPIO组名称,第二个填写GPIO的编号,最后写对它的操作。SET表示置高电平,RESET表示置低电平。

对于HAL_Delay(),它传入一个参数x,使程序暂停x毫秒。

实现流水灯,让他们以1s的频率闪烁,就在死循环中这样写:

while(1){
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//PA5亮灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//PC14亮灯
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA5熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC14熄灯
		HAL_Delay(1000);//延时1s	
}		

根据我上一篇博客的方法,编译程序并烧录到最小开发板中,程序顺利执行。

在这里插入图片描述

KEIL5逻辑分析仪

在KEIL5的仿真调试功能中,有一种功能是对选定的GPIO引脚输出它的电平变化。视觉效果就跟示波器一样。有这个功能,我们可以更好地调试项目。

在进行调试之前。我们需要进行相应的配置。

配置

按图中的顺序进行配置。

在这里插入图片描述

在这里插入图片描述

调试

(1)点击调试按钮

在这里插入图片描述

(2)在调试页面,进入逻辑分析仪

在这里插入图片描述

(3)点击创建,并设置显示的GPIO口

不用手动打代码,用PORTX.Y的形式输入就行。例如PORTA.5,表示建立对GPIOA_5的显示。

在这里插入图片描述

将PORTA.5,PORTB.9,PORTC.14三个端口加入进去。加入后,可以看到它自动变成了地址。

添加完成后,分别将它们三个的显示模式设置为bit,即显示高低电平。

在这里插入图片描述

最后点击close。

现在运行程序,可以看到三个引脚的输出电平每1秒发生高低电平变化。

在这里插入图片描述

在这里插入图片描述

参考资料

  • https://blog.csdn.net/weixin_54435584/article/details/127236470?spm=1001.2014.3001.5501
  • https://blog.csdn.net/weixin_54435584/article/details/127258841?spm=1001.2014.3001.5501
  • https://blog.csdn.net/weixin_46129506/article/details/120780184
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值