1.基于HAL库开发的STM32学习笔记一:STM32的GPIO开发基础

1.基于HAL库开发的STM32学习笔记一:STM32的GPIO开发基础,第1张

1.基于HAL库开发的STM32学习笔记一:STM32的GPIO开发基础

一、GPIO端口知识要点
1.GPIO:General Purpose Input & Output
2.STM32芯片最拥有GPIOA、GPIOB…GPIOG等7组端口,每组端口最多拥有Pin0、Pin1…Pin15共16个引脚。
3.STM32的每个I/O端口都可以自由编程,但I/O端口寄存器必须按32位字被访问。STM32的每个I/O端口都由7个寄存器来控制。
4.STM32的GPIO端口可以由软件配置成8种模式:
推挽输出、开漏输出、推挽式复用功能、开漏式复用功能;
模拟输入、浮空输入、下拉输入、上拉输入。

二、GPIO控制中常用的HAL函数
1.GPIO电平输出

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

参数1:GPIOx,端口号,如:GPIOB,GPIOF。
参数2:GPIO_Pin,引脚号,如:GPIO_PIN_9,GPIO_PIN_12。
参数3:PinState,引脚输出状态。高电平----GPIO_PIN_SET;低电平----GPIO_PIN_RESET。
返回值:void,空。

应用举例:向PB5引脚输入高电平

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

2.GPIO电平翻转HAL库函数

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx,  uint16_t GPIO_Pin);

参数1:GPIOx,端口号,如:GPIOB,GPIOF。
参数2:GPIO_Pin,引脚号,如:GPIO_PIN_9,GPIO_PIN_12。
返回值:void,空。

应用举例:将PA3引脚输出电平翻转

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);

3.GPIO初始化函数源码剖析

void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

  
  GPIO_InitStruct.Pin = GPIO_PIN_13;              //GPIO端口的引脚号是:13
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;         //GPIO的模式是:输入
  GPIO_InitStruct.Pull = GPIO_NOPULL;		  //没有上拉
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);	  //将参数结构设置到GPIOC端口

  
  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;	   //GPIO端口的引脚号是:8和9
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;	   //GPIO的模式是:输出
  GPIO_InitStruct.Pull = GPIO_NOPULL;		   //没有上拉
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;	   //GPIO的输出速度是:非常低速
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);	   //将参数结构设置到GPIOB端口
}

三、练习:基于STM32CubeMX的跑马灯和流水灯
在STM2F103ZET6开发板上,利用STM32CubeMX对STM32芯片的LED控制引脚进行配置并快速生产项目,在Keil5中进行代码编写,实现以下功能:
(1)跑马灯功能,即:LED0灯亮,过一会,LED1灯亮,过一会,LED0灯熄灭,过一会,LED1灯熄灭….如此循环。
(2)流水灯功能,即:LED0与LED1灯交替闪烁。

第一部分:根据开发板原理图,配置STM32CubeMX
1.开发板LED灯部分原理图如图所示:

由原理图不难看出,LED0的阴极与PB5引脚直接相连,LED1的阴极与PE5引脚直接相连,控制时,引脚为低电平,对应LED灯发光;引脚为高电平。对应LED灯熄灭。

2.配置STM32CubeMX
(1)实验中使用开发板通过STlink连接电脑仿真,Debug模式要选择SW模式,如果使用JTAG连接,对应连接方式选择JTAG。否则一会在Keil5中下载的时候,会提示找不到设备。

(2)时钟配置:如果需要使用外部晶振,需要再System Core菜单里选择RCC,将时钟源选择成为外部晶振

(3)观察时钟树,调节时钟频率:点击上方的Clock Configuration,在其中可以调节时钟频率,如果频率超过最大频率,会标记为红色

(4)引脚配置:在STM32CubeMX的引脚图中,分别点击PB5和PE5两个引脚,由于STM32的芯片为引脚复用,在IO控制中,选择其模式为Output模式

随后可在左侧的GPIO菜单中看见这两个引脚,可以单击Modified进行设置,注意:勾选Modified才可以启用引脚

(5)导出项目,在Project Manager选项卡中设置导出的内容,包括项目位置与名称,和开发环境等,我用的是Keil5开发的,所以IDE需要选择MDF-ARM,最低支持版本为V5即可。
需要注意的是,左侧Code Generator选型卡中,第二块,第一条,Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral项需要选中。
以上内容设置好后,点右上角GENERATE CODE按钮导出即可,随后可进入Keil5项目中,进行代码的编写。

第二部分:Keil5中代码的编写
在Keil5中,可以发现,STM32CubeMX导出的项目中,结构清晰,并且留出了用户代码书写区域,用户需要将代码写入到书写区域中,这样如果后续开发需要再配置内容的时候,重新导出后,书写区的代码不会被清空;如果写入到非指定区域,代码会被清空。
本次练习为对IO口的控制,需要保证其持续运行,因此需要写到while(1)死循环中:

  
  
 while (1)
  {
  	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);  //实现PB5引脚电平的翻转
	HAL_Delay(500);  //延时500ms
	HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);  //实现PB5引脚电平的翻转
//		HAL_Delay(500);  //延时500ms,实现流水灯时,不需要对此行注释进行任何 *** 作;如果实现跑马灯,清除掉此处注释标记即可
    
    
  }
  

写完代码后,在Keil5里编译好后,就可以下载到单片机中。
对应源码:利用STM32F103ZET6开发板基于HAL库的STM32学习笔记一:GPIO开发基础例程

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5703340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存