GPIO引脚配置流水灯实验——点灯大师篇

 

一,项目创建及利用STM32CubeMX来自动生成GPIO的初始化代码

 

1,新建工程

点击下方的File并选择STM32 Project

按照指示新建工程后选择芯片型号,这里以STM32F103C8T6为例,选择后点击右边框中的第一个后选择Next,值得一提的小功能是,对于比较常用的芯片,我们可以点击芯片型号左边的小星星使他变成蓝色实心后,之后再次使用该型号芯片时便可点击左边的大蓝星来选择自己收藏的芯片了!

 

 

2,对需要使用的引脚进行配置

这里我使用PA5,PA6和PA7三个引脚,并将其模式都配置为GPIO_Output,即输出模式。

下一步点击左边System Core下面的GPIO选项

这里就有我们刚才选择的三个引脚,四个选项的意思分别为:

  1. GPIO output level:表示 GPIO 引脚的输出电平状态。
  2. GPIO mode:定义 GPIO 引脚的工作模式。
  3. GPIO Pull-up/Pull-down:设置引脚的上下拉电阻。
  4. Maximum output speed:限定 GPIO 输出信号的最大切换速度。

这里我们保持默认,即低电平推挽输出,并且不使用上,下拉电阻。

 

3,选择SYS模式并开启SWD下载端口

这里选择的调试模式为Serial Wire,这是一种调试接口模式。

  • 用于程序下载、调试,相比 JTAG 模式,占用引脚更少(仅需 SWDIO、SWCLK 两根线),是 STM32 开发中常用的轻量级调试方式。

4,保存配置生成初始化代码

点击第二个保存图标,或者使用快捷键Ctrl+S快速保存

 

 

二,完成流水灯基本现象

1,流水灯思路确定

思路是通过一个变量start自加来设置五个时间节点,当start为1~3时,PA7上面的小灯亮起,当start为2~4时,PA6上的小灯亮起,当start为3~5时,PA5上的小灯亮起,并且每次循环设置300ms的延时时间。

2,代码配置

需要定义变量

  int start = 1;

之后便是在while()循环里进行对三个小灯的输出电平的操作

 if(start>=1&&start<=3)
	  	  {
	  		  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET); //使用HAL_GPIO_WritePin()函数来写GPIO引脚的电平状态
	  	  }
	  	  else
	  	  {
	  		  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
	  	  }
	  	  if(start>=2&&start<=4)
	  	  {
	  	  	  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
	  	  }
	  	   else
	  	  {
	  	      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
	  	  }
	  	  if(start>=3&&start<=5)
	  	  {
	  		  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
	  	  }
	  	  else
	  	  {
	  		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
	  	  }
	  	  HAL_Delay(300);

	  	  start ++;

这里便是对刚才思路的具体实现,通过不断读取变量start的值来判断此时三个小灯应该输出怎样的电平,因为我们在设置引脚时,保持的是默认的低电平,所以此时我们应该要输出高电平才能使小灯亮起!

例如使PA7亮起的代码便是

 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET); //使用HAL_GPIO_WritePin()函数来写GPIO引脚的电平状态

我们在这里便能发现STM32标准库和HAL库函数之间的一些相似点和区别了。

3,对变量进行重置实现循环

为了下一次变量start还能从1开始自加,就需要对start进行判断,当start>5之后,则判断为溢出,需要重置为1,为下一轮流水灯做准备

start ++;

	  	  if(start>5)
	  	  {
	  		  start=1;
	  	  }

 

 

三,将代码通过ST-LINk烧入单片机

1,编译运行代码保证0错误

点击左上方的小锤子图标进行编译,下方指示框便会开始运行

出现以下语句便是代码没又错误和警告

19:26:19 Build Finished. 0 errors, 0 warnings. (took 1s.929ms)

2,将程序烧入单片机开发板中

点击上方功能框中的Run

出现以下弹窗后点击OK程序便开始烧录

当下方的运行框中出现以下语句则说明烧录成功

 

 

四,观察实验现象并分析

1,现象观测

可以观察到,三个小灯分别按照PA7,PA6,PA5的顺序循环点亮,并相邻两个小灯的点亮时间会有0.6秒的重叠时间。实验现象符合预期,LED流水灯实验成功完成。

2,注意事项

由于接线较为简单,所以未给出硬件接线图,唯一需要注意的就是三个LED小灯的脚需要正极接在单片机引脚上,负极接GND!

 

 

五,实验小结

     这是我接触STM32CubeIDE的第一个小项目,也是我第一次在CSDN上发文章,需要学习和改进的有方面很多。主要是第一次使用STM32CubeIDE软件的初始化配置问题,代码最核心的就是用变量的值来控制三盏小灯的亮灭状态。项目虽然非常基础,但是完成这个小实验的各位都可以称自己为点灯大师了!!!

    之后谈谈自己对于keil和CubeIDE的小小看法,IDE给我的第一印象就是新,看久了keil的古董界面,这个直接给我眼前一亮,其次就是CubeIDE通过内嵌CubeMX来实现代码初始化自动生成的功能确实非常强大好用,提高了写代码的效率。但keil也并非一无是处,之前因为是在江科大老师那学习的标准库,所以对代码初始化底层的逻辑会有更深的理解,这打下了较为坚实的基础,所以上手HAL库才会很快。两者各有优势,但为了顺应时代的潮流,学习HAL库使用STM32CubeIDE是非常有必要的!!!

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐