当前位置:   article > 正文

STM32使用HAL库点亮流水灯_hal库点灯

hal库点灯

目录

一、搭建STM32开发环境(HAL库环境)

1、安装STM32CubeMX

1.1、下载STM32CubeMX: 

1.2、安装STM32CubeMX:

2、安装jdk环境:

2.1、下载jdk环境:

 2.2、安装jdk环境:

 3、配置STM32CubeMX:安装HAL库

 4、keil5的下载与安装:

 二、利用HAL库新建keil5工程

三、电路连接与烧录运行

 1、电路连接:

2、烧录与运行:

 四、利用keil5进行仿真实验:观察GPIO端口的输出波形

4.1、进入keil仿真:

4.2、开始仿真: 

​编辑

五、总结

六、参考文献


一、搭建STM32开发环境(HAL库环境)

1、安装STM32CubeMX

1.1、下载STM32CubeMX: 

 官网下载地址:STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

 (1)进入官网下载STM32CubeMX软件:

 (2)根据自己的电脑操作系统进行选择合适的软件包以及选择软件包的版本号:

 (3)点击ACCEPT:

(4) 可以看到已经开始下载了:

(5)下载完成:

1.2、安装STM32CubeMX:

 (1)双击刚刚下载的STM32CubeMX包,打开如下界面,接着点击next:

 (2)接着点击图示1与2的步骤:

(3)接着点击图示1与2的步骤:

 (4)点击第一步选择安装路径,接着点击next:

 (5)点击next:

 (6)安装完成后,选择Next:

(7)点击Done就完成安装:

2、安装jdk环境:

 由于STM32CubeMX是Java实现的,需要安装Java jdk环境:

jdk环境下载官网:Java Downloads | Oracle

2.1、下载jdk环境:

(1)进入官网下载Java jdk环境:

 

(2)根据自己电脑操作系统与自己的需要进行下载: 

 

 2.2、安装jdk环境:

(1)打开刚刚下载好的jdk安装包,接着在弹出的界面上点击“下一步”:

(2) 点击下一步:

(3)等待安装成功,点击关闭:

 3、配置STM32CubeMX:安装HAL库

 (1)点击打开刚刚安装好的STM32CubeMX软件:

 (2)点击help,再点击Updater Settings:

 (3)按照图示步骤进行:

 (4)按照图示进行1与2步骤:

 (5)按照图示三步骤进行安装自己想要安装的HAL库版本号:

(6)弹出登录错误,要求登录下载,点击OK:

 (7)在弹出的界面选择登录或者注册,本人没有注册,所以选择注册:

 (8)填写注册信息:

 (9)点击close,接着进入自己所注册的邮箱里面进行验证与设置密码即可:

(10)重新返回进行登录即可解决那个登录报错了,之后就可以进行安装了:

 (11)重新点击进行下载自己想要的那个版本的HAL库:

 (12)HAL库下载完毕,HAL库环境安装完成:

 4、keil5的下载与安装:

 参考我的这篇博客:stm32通过寄存器方式利用GPIO端口点亮LED_-HSheng的博客-CSDN博客

 二、利用HAL库新建keil5工程

 (1)打开STM32CubeMX,在主界面点击:ACCESS TO MCU SELECTOR:

 (2)选择的单片机型号以及点击开始工程项目:

 (3)点击system core,进入SYS,在debug下选择serial wire:

 (4)配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,将hse那里设为Crystal/Ceramic Resonator:

(5)打开时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上。我们要用是GPIO接口,而这些接口都在APB2里:

 

(6)进入GPIO选择引脚 并且配置其工作模式:点击相应的引脚设置输出寄存器了,就是GPIO_output那一项

我这里一共选择了三个GPIO:PA0,PA1,PA2,均设置为了GPIO_output: 

 (7)点击Project Manager,接着点击Code Grenerator,勾选上第三步的那一个选项:

(8) 点击Project Manager,接着点击Project,开始给项目取名字;选择存放位置;选择MDK-ARM,最后点击图示第五步生成项目:

 (9)点击Open Project打开项目(keil工程):

 (10)打开main.c文件,滑倒主函数那一部分,图中所圈住的main函数:

(11)在主函数while(1)循环中写入下列代码:

  1. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//PA0亮灯
  2. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄灯
  3. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄灯
  4. HAL_Delay(1000);//延时1s
  5. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯
  6. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//PA1亮灯
  7. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄灯
  8. HAL_Delay(1000);//延时1s
  9. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯
  10. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄灯
  11. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);//PA2亮灯
  12. HAL_Delay(1000);//延时1s

三、电路连接与烧录运行

 1、电路连接:

ST_Link与单片机的连接,如下图所示:

 总电路:

黄——PA0
红——PA1
绿——PA2

 连接好的电路实物图如下:

2、烧录与运行:

(1)点击图示1处进行编译,接着点击图示2处进行烧录:

(2)板子运行结果展示:

 四、利用keil5进行仿真实验:观察GPIO端口的输出波形

4.1、进入keil仿真:

 (1)点击第一步,Target界面中,选择跟正确的晶振大小,使用8MHz的外部晶振: 

 (2)接着进行Debug页的设置: 

(3)点击图示圈住的地方进入仿真调试界面:  

 (4)选择逻辑分析仪:

 (5)点击Setup设置添加要进行观察的引脚:

添加引脚信息:添加引脚信息时候,PA脚输入:PORTA,PB脚输入PORTB,PC脚输入PORTC;接着输入".",接着在.后面输入对应引脚号,最后回车即可;例如:我这里要输入PA0,PA1,PA2这三个引脚的信息:依次分别添加三个引脚,分别添加三个引脚信息:PORTA.0;PORTA.1;PORTA.2,最后回车完成添加!!!

 

接着对于每一个引脚的配置信息进行修改,如下图所示: 

 

我这里选择的引脚仿真波形对应的颜色为:

PA0——红色;

PA1——绿色;

PA2——蓝色;

4.2、开始仿真: 

(1)点击图示圈住的部分,进行仿真 

 (2)仿真结果:

 

 (3)仿真结果分析:

-1)实物板子延时情况:

       首先我们来看看我们在代码里面设置的延时是多少时间;也就是烧录进入板子之后,各个GPIO口对应的LED灯亮的时间是多少?(意思就是:我设置了GPIO端口输出低电平,LED灯才亮,延时多久,LED灯就亮多久),我设置了PA0,PA1,PA2这三个端口的输出低电平的时间(延时)均为:1s:  

 -2)仿真延时情况:

我们这里以PA1的仿真延时为例子:

进入低电平初始时间为:4.004256s;进入低电平之后的结束时间:5.000151s;

所以后者低电平结束时间减去前面低电平的起始时间,得到的差就是低电平的持续时间,也就是仿真得到的延时时间: 5.000151 - 4.004256=0.995895s;

-3)基于仿真的GPIO端口的输出波形与时序状态分析:

 GPIO端口在keil软件上面仿真显示可以看出来:

     1、输出波形是每一个GPIO口:PA0、PA1、PA2的高低电平的变化情况。

     2、由图中可以看出显示PA0先进入低电平并且持续一段时间(LED闪烁期间);之后就是PA1进入低电平;最后是PA2进入低电平;在PA2的低电平结束之后完成了一次基于固件库的LED流水灯的闪烁;接着又进入下一个LED灯闪烁的周期。这与我在代码以及烧录在单片机上面的LED灯闪烁的时序一致,时序状态正确!

-4)基于仿真与板子的延时时间误差分析:

       板子与代码上的延时(LED闪烁周期):使用的是定时计数器来进行精确的计时或者延时的,为:1s;

       仿真上面的延时(LED闪烁周期):测出来的延时为:0.995895s;

       看以看出仿真延时与真实板子上面的延时(LED闪烁周期)存在不足0.01s的误差,本次仿真得出的仿真延时几乎完美接近真实板子的延时!!!

五、总结

      已经完成了基于寄存器的STM32流水灯:STM32F103的流水灯点亮版本1(寄存器地址操作)_-HSheng的博客-CSDN博客和基于固件库的STM32流水灯:基于标准外设库的LED流水灯-CSDN博客,本次又完成了基于STM32CubeMX(HAL库)的流水灯;本人已经熟练的完成了对于STM32利用三种方式开发STM32的流水灯。通过本次实验本人成功了解了并且学会了STM32CubeMX(HAL库)的使用方法以及利用其进行建立与开发STM32工程项目!

六、参考文献

1、 【精选】stm32cubeMX使用HAL库点亮LED流水灯-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/941144
推荐阅读
相关标签
  

闽ICP备14008679号