当前位置:   article > 正文

STM32新手入门篇之HAL库点灯_stm32串口接收字符点灯hal

stm32串口接收字符点灯hal

目录

1.概述

2.软件安装

3.实验步骤

4.在示波器上进行验证

5.通过中断控制LED亮灭


1.概述

概要:STM32有多种开发方式,比如寄存器、固件库、LL库和HAL库,本文用到了HAL库来实现GPIO口的控制以及中断识别点灯,HAL库的特点是操作简单、能够快速上手;另外本文还利用keil5软件携带的示波器对输出引脚波形进行判断,观察stm32芯片在HAL库下运行情况。

所需材料:STM32F103c8t6核心板、面包板(用来连接和固定芯片、LED灯)、STLink(用来将电脑上编写好的程序烧录进芯片)、杜邦线(连接STLink和开发板)。

2.软件安装

HAL库的使用需要用到STM32CubeMX和keil5

一、STM32CubeMX下载

STM32CubeMX的下载与安装可以参考下面这篇文章,按照整个流程来就行,没有什么难的地方,遇到问题就上网百度:

【STM32】入门(十):STM32CubeMx下载、安装、使用-CSDN博客

二、keil5的下载与安装

keil5的下载可以参考下面这个博客,讲解了keil5的下载与安装:

Keil5下载和安装教程-CSDN博客

3.实验步骤

一、使用STM32CubeMX进行文件初始化

优点介绍:平时使用固件库编写代码需要加入很多头文件、源文件,还需要配置环境,过程十分繁琐,而使用STM32CubeMX可以一键生成配置好的keil文件,使用起来十分便捷。

步骤:

选择File、new project

搜索单片机型号

打开所选单片机

初始化配置,我配置了PA0,PA4,PB0三个端口,都是一样的配置方法

为了点亮Led,需要将引脚改为输出模式

继续配置

项目文件配置

生成文件

二、keil编写代码

上一步打开文件后来到了keil界面

代码如下:

  1. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // PA0处灯亮
  2. HAL_Delay(1000); // 延时1s
  3. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // PA0处灯灭
  4. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // PA4处灯亮
  5. HAL_Delay(1000); // 延时1s
  6. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // PA4处灯灭
  7. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // PB0处灯亮
  8. HAL_Delay(1000); // 延时1s
  9. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // PB0处灯灭

烧录配置

 

 

依次点击1,2,3,代码就被录入单片机了

效果图:

关于STLink与单片机的连接方式可以去b站看江协科技关于stm32的前两期视频。

4.在示波器上进行验证

打开keil软件,选择示波器

选择波形分析

选择setup

按步骤选择,第二步引脚编号写为GPIOX_IDR.x,如GPIOA_PIN3为GPIOA_IDR.3

效果图:

该示波器分析了不同引脚的输出情况,可以看出三个引脚的LED是保持两个高电平,1个低电平的

5.通过中断控制LED亮灭

要求:准备设置一个按键控制流水灯的亮灭

打开刚刚生成的CubeMX文件

选择外部中断

 

 配置NVIC

 中断配置完毕,按照之前的方法生成文件

打开刚刚生成的keil项目,在main.c中USER CODE BEGIN4里面加入中断代码,其中myFlag是我设置的一个全局变量,我设置在了main函数之前,用来检测是否中断,并且在主函数中调用它

  1. /* USER CODE BEGIN 4 */
  2. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
  3. if(GPIO_Pin == GPIO_PIN_10){
  4. {if(myFlag==1)
  5. myFlag=0;
  6. else
  7. myFlag=1;
  8. }
  9. }
  10. }
  11. /* USER CODE END 4 */

主函数也发生了改变,具体为判断全局变量是否改变,若改变则说明发生了中断,LED流水灯停止或继续(模拟按键控制流水灯是否启动),下图为主函数里的代码,注意这个while循环是写在总while循环里面的

  1. while(myFlag==0){
  2. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // PA0处灯亮
  3. HAL_Delay(1000); // 延时1s
  4. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // PA0处灯灭
  5. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // PA4处灯亮
  6. HAL_Delay(1000); // 延时1s
  7. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // PA4处灯灭
  8. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // PB0处灯亮
  9. HAL_Delay(1000); // 延时1s
  10. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // PB0处灯灭
  11. }

然后录入即可实现PA10按键控制流水灯运行

由于我没有按键,效果不好展示,不过我用了杜邦线接高低电平来代替按键,验证了该中断效果

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

闽ICP备14008679号