stm32入门实现流水灯

一 GPIO口

学单片机的第一步也是最简单的一步就是点灯,若想点灯,则首先需要了解GPIO口,GPIO全称:General Purpose Input Output,即通用输入输出端口,一般用来采集外部器件的信息或者控制外部器件工作,即输入输出。

二 GPIO口的模式

通过配置不同的功能,来达到不同的目的。具体用到会再分析。

三 实例演示及原理分析

通过操控gpio口来实现led灯的亮灭,及流水灯。

本此实验以stm32f407ig系列为例。

通过原理图可以看出,led右边与vcc相连,左边与gpio口相连。若想要led导通,则需要gpio口输出低电平。

打开cubeMX来配置工程,为了方便,后面进行代码分析。配置PE2 PF8 PF9 PF10引脚为输出管脚,隔一段时间改变输出状态即可完成流水灯操作。

工程配置如下,先将gpio口默认配置为高电平,防止上电后led都亮。导出工程分析完成时限代码。

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, GPIO_PIN_SET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);

  /*Configure GPIO pin : PE2 */
  GPIO_InitStruct.Pin = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  /*Configure GPIO pins : PF8 PF9 PF10 */
  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

}

   先使能4组io口的时钟,在对io口进行写高电平状态操作,再然后开始定义各个io口的具体配置,先给gpio初始化函数的结构体赋值配置管脚,输出模式,输出速度,io口的上拉下拉,在传入gpio口,和结构体的地址,完成一个io口的初始化,其他同理。

    主函数的实现 :                                                                                                                                                                     

 while (1)
  {
    /* USER CODE END WHILE */
	HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2, GPIO_PIN_RESET);
	HAL_Delay(500);
	HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_8, GPIO_PIN_RESET);
	HAL_Delay(500);	
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_8, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9, GPIO_PIN_RESET);
	HAL_Delay(500);	
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10, GPIO_PIN_RESET);
	HAL_Delay(500);	
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10, GPIO_PIN_SET);	
	HAL_Delay(500);	
    /* USER CODE BEGIN 3 */
  }

 通过库函数对io口进行状态写入,间隔500ms改变io口状态。

四 实现效果图                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           成功实现流水灯。                                                                                                                                                                                                                                                                                                                                                                                                                                             

  • 36
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值