stm32cubeMX学习二、按键点灯与灭灯

上一节入门了stm32cubeMX,这节我们来学习下编写一个按键的程序。
本程序编写基于秉火霸道STM32F103ZET6开发板进行。
stm32cubeMX学习二、按键点灯与灭灯_第1张图片

一、打开stm32cubeMX软件

stm32cubeMX学习二、按键点灯与灭灯_第2张图片

二、选择芯片型号

stm32cubeMX学习二、按键点灯与灭灯_第3张图片
首先点击File,然后选择New Project,在弹出的页面中搜索您要配置的芯片型号,然后鼠标双击选择stm32f103ZETx

这时候会弹出另外一个页面如下,开始做芯片的硬件资源配置工作。

三、配置时钟频率

选择Clock Configuration,然后在如下图所示的方框中配置好时钟频率,stm32cubeMX会自动把分频系统等配置好,不用人为一个一个去设置。

stm32cubeMX学习二、按键点灯与灭灯_第4张图片

四、配置按键相关的GPIO

4.1 打开电路图,找相关的IO

stm32cubeMX学习二、按键点灯与灭灯_第5张图片
从按键的原理图可知,这些按键在没有被按下的时候,GPIO 引脚的输入状态为低电平,(按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为高电平(按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。

4.2 在stm32cubeMx中对这两个按键的GPIO进行配置

通过搜索框找到引脚的位置,这里我们PA0、PC13分别配置为输入。
stm32cubeMX学习二、按键点灯与灭灯_第6张图片
stm32cubeMX学习二、按键点灯与灭灯_第7张图片
接下来分别对两个IO进行详细配置,点击左边的System Core,然后选择GPIO,这时候右边可以选中具体的引脚,由于上一节我们已经对两个LED的GPIO做了适配,这一节就不讲。
stm32cubeMX学习二、按键点灯与灭灯_第8张图片
stm32cubeMX学习二、按键点灯与灭灯_第9张图片

五、生成代码

选择Project Manager,然后配置对应的项目名称、项目输出位置以及运行环境等。
stm32cubeMX学习二、按键点灯与灭灯_第10张图片
最后点击右上角的GENERATE CODE即会在项目输出位置输出一个完整的Keil工程。

六、编写业务逻辑

int main(void)
{
  /* USER CODE BEGIN 1 */
	GPIO_PinState key_statu1,key_statu2 ;
  /* 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 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		 /* USER CODE BEGIN 2 */
			key_statu1 = HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
			key_statu2 = HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);
			if(GPIO_PIN_SET == key_statu1)
			{
				HAL_GPIO_WritePin(GPIOF, LED1_Pin|LED2_Pin, GPIO_PIN_RESET);
			}	
			if(GPIO_PIN_SET == key_statu2)
			{
				HAL_GPIO_WritePin(GPIOF, LED1_Pin|LED2_Pin, GPIO_PIN_SET);
			}
		/* USER CODE END 2 */
		
	
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

6.1 编程注意事项

由于stm32cubeMX在每次生成代码后会将不按规范要求编写代码的区域对代码做删除处理,这样会让很多初学者头痛不已(我也遇到过),自己添加的代码因为一次生成就全部得重写了,如何避免这个问题呢?stm32cubeMX已经给出了规范。

6.1.1 在用户区内编写用户代码
/* USER CODE BEGIN label */

 /* USER CODE END label */

其中label就是编号0,1,2,3,4…
这样代码在下次生成的时候就会保留了。

七、演示

当按下KEY1时,两盏灯点亮,当按下KEY2时,两盏灯熄灭。
stm32cubeMX学习二、按键点灯与灭灯_第11张图片
stm32cubeMX学习二、按键点灯与灭灯_第12张图片
完,下一节再更新学习成果。

你可能感兴趣的:(stm32cubeMX)