(二)STM32F407 cubemx按键点灯

(二)STM32F407 cubemx按键点灯

     这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。

废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列系统点灯按键配置都能明白如何通过参考手册去学习配置。而不是Ctrl c,Ctrl v。
首先要明白一个知识点,led灯、按键需要用到什么,引脚输出功能,引脚读取功能?这些功能具体到底是什么?

数据手册内容

1.首先我得看看我F407开发板的原理图,我发现我的开发板电流是涌入电流(injected current)PC13,PC13需要拉低才能点亮LED。
(二)STM32F407 cubemx按键点灯_第1张图片

(二)STM32F407 cubemx按键点灯_第2张图片总注入电流(所有I/O和控制引脚之和),F407涌入的电流之和不能大于25mA,3.3V/360Ω=9.1mA满足条件。

(二)STM32F407 cubemx按键点灯_第3张图片输出驱动电流
gpio(通用输入/输出)可以吸收或源高达±8ma,吸收或源高达±20ma(放宽VOL /VOH),但PC13, PC14和PC15可以吸收或源高达±3mA。PC13 ~ PC15的gpio在输出模式时,速度不能超过2mhz,最大负载30pf。这一部分内容是对于引脚拉高向外输出电流的必要知识点,但说实在的尽量不要用PC13-15去驱动led避免未知的麻烦,但是我这块开发板偏偏就是PC13,改不了了。

参考手册内容

(二)STM32F407 cubemx按键点灯_第4张图片
(二)STM32F407 cubemx按键点灯_第5张图片

根据原理图,
若是上拉电阻:按键未按下时引脚读取的是VDD高电平1,若按键按下input被短接直接读取GND低电平0,状态有明确对应关系符合要求。
若是下拉电阻:按键未按下时引脚读取电平为GND低电平0,当若按键按下input被短接直接读取GND低电平0,不管按下还是不按都没有变化始终是低电平0。不符合要求。

cubemx配置

时钟配置详见文一。
(二)STM32F407 cubemx按键点灯_第6张图片
(二)STM32F407 cubemx按键点灯_第7张图片
(二)STM32F407 cubemx按键点灯_第8张图片输入模式根据要求配置成上拉模式,cubemx配置完成。

函数调用

(二)STM32F407 cubemx按键点灯_第9张图片去hal库里面看看有什么函数是可以调用的。
(二)STM32F407 cubemx按键点灯_第10张图片读取引脚函数,读取引脚输入状态,这个函数可以供按键使用。

(二)STM32F407 cubemx按键点灯_第11张图片
状态改变函数,可改变输出状态。
go to definition后找到变量出处,SET对应1,RESET对应0。由上图知PC13需要为低电平0才可点亮LED灯,即选择状态为GPIO_PIN_RESET点亮。
在这里插入图片描述(二)STM32F407 cubemx按键点灯_第12张图片
toggled切换状态函数,可用于按键按下后翻转当前状态。
基于以上编写主程序。

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,GPIO_PIN_SET);  //熄灭LED
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,GPIO_PIN_RESET); //点亮LED
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15)==0)
		{ 
				HAL_Delay(50);
				if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15)==0)
			{
				  while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15)==0);  //必须松开按键方可进入下一行程序
				  HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
			}
	  }
  }
  /* USER CODE END 3 */
}

(二)STM32F407 cubemx按键点灯_第13张图片这一步作用是下载完程序之后自动复位,若没有此过程需要人工手动复位。切记下载完程序是需要复位的。

编写完程序后测试效果

F407按键点灯

代码链接百度网盘:
链接:https://pan.baidu.com/s/1qXNn2ARYShyCGsNaRbtLMg?pwd=qk8w
提取码:qk8w

你可能感兴趣的:(stm32,数据手册,stm32,单片机,嵌入式硬件)