cubemx部分:


1. 配置debug,目的是使程序可以多次编程,如果不配置此项,只能烧录一次。

cubemx 闪烁灯 cubemx按键点灯_引脚

2.打开晶振

cubemx 闪烁灯 cubemx按键点灯_stm32_02

3.配置引脚

cubemx 闪烁灯 cubemx按键点灯_初始化_03

在配置引脚时要注意引脚对应的外设,通过查阅 “IO引脚分配图”我们可以找到按键以及LED灯。

在STM32F103ZET6中,PB5/PE5对应不同颜色的LED灯,将其设置为“Output”。

PE3/PE4则对应按键KEY1/KEY0,将其设置为输入“Input”。

如果配置错误,点击“Reset_State”复原。

cubemx 闪烁灯 cubemx按键点灯_引脚_04

cubemx 闪烁灯 cubemx按键点灯_引脚_05

同时,对应不同的应用场景,要配置GPIO的具体模式,对应KEY0/KEY1的配置,则根据其开发手册中的电路图具体分析,将其配置为上拉输入“Pull-up”: 把电位拉高,拉到 Vcc,把一个不确定的信号通过一个电阻嵌位在高电平,电阻会起到限流的作用。

cubemx 闪烁灯 cubemx按键点灯_stm32_06

cubemx 闪烁灯 cubemx按键点灯_stm32_07

右下角的查询按钮可以帮助我们快速找到对应的引脚。

配置好引脚之后配置一些基础设置


在①中

配置项目名称以及存储路径,注意不要出现中文,否则可能会产生错误。

选择MDK作为IDE。

cubemx 闪烁灯 cubemx按键点灯_大数据_08

在②中

1中选择第一个或者第二个,区别在于生成的代码是否为必需的,对于像我这样的初学者来说,我们选择2,只生成必需的代码。

2中勾选第一个:生成.c和.h文件

cubemx 闪烁灯 cubemx按键点灯_大数据_09

在此之后,在cubemx中的配置就告一段落了,接下来点击右上角的“GENERATE CODE”,伟大的cubemx就会为我们生成代码。

cubemx 闪烁灯 cubemx按键点灯_大数据_10

点击open project,直接打开Keil


有过标准库学习基础的同学可以打开这个gpio.c文件查看cubemx帮我们进行的初始化操作。

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

  /*Configure GPIO pins : PE3 PE4 */
  GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  /*Configure GPIO pin : PE5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  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 pin : PB5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}

(比起标准库手敲,是不是快乐多了) 

接下来就是编写业务代码,以实现我们按键控制LED灯亮灭的功能

cubemx 闪烁灯 cubemx按键点灯_初始化_11

以上就是借助cubemx初始化,按键控制led的全部操作了

笔者才疏学浅,仅仅是最基础的按键led,也深知自己有很多理解不足甚至错误的地方,欢迎同学们批评指正,感激不尽。

后续如有机会,则更新外部中断、定时器中断以及pwm的内容。