(二)STM32F407 cubemx按键点灯

(二)STM32F407 cubemx按键点灯

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

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

数据手册内容

1.首先我得看看我F407开发板的原理图,我发现我的开发板电流是涌入电流(injected current)PC13,PC13需要拉低才能点亮LED。

在这里插入图片描述总注入电流(所有I/O和控制引脚之和),F407涌入的电流之和不能大于25mA,3.3V/360Ω=9.1mA满足条件。

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

参考手册内容

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

cubemx配置

时钟配置详见下文

在这里插入图片描述输入模式根据要求配置成上拉模式,cubemx配置完成。

函数调用

在这里插入图片描述去hal库里面看看有什么函数是可以调用的。
在这里插入图片描述读取引脚函数,读取引脚输入状态,这个函数可以供按键使用。

在这里插入图片描述
状态改变函数,可改变输出状态。
go to definition后找到变量出处,SET对应1,RESET对应0。由上图知PC13需要为低电平0才可点亮LED灯,即选择状态为GPIO_PIN_RESET点亮。
在这里插入图片描述在这里插入图片描述
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 */
}

在这里插入图片描述这一步作用是下载完程序之后自动复位,若没有此过程需要人工手动复位。切记下载完程序是需要复位的。

编写完程序后测试效果

F407按键点灯

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

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RouDragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值