STM32MP157学习--通过stm32idecube用按键点亮灯和蜂鸣器

1、新建工程,和之前一样

2、选择芯片的型号,这是选择的是STM32mp157daax,点击next

 3、给工程定一个名称,不要用中文

4、选择NO

5、按如图所示的方式配置引脚,前面的文章有配置的过程

6、在工程管理处勾选生成.c/.h文件

 7、在M4内核的文件夹下新建文件夹BSP(其他名称也可以,不要用中文)

 8、在BSP文件夹下新建名为Include和src的文件夹,做好文件分层,并在这两个文件夹下新建3个.c的文件以及它们的头文件

9、右键M4文件夹选择最后一个属性配置选项

10、在弹出的窗口中选择c/c++ General中的Paths and Symbols并选择Source Location选择右边的Add Folder...将BSP文件夹加入工程中,点击Apply and Close保存配置并关闭

 11、贴上代码

led.h:

#ifndef __LED_H
#define __LED_H

#include "gpio.h"

#define LED0(x)	{(x==0)?(HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET)):(HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET));}
#define LED1(x)	{(x==0)?(HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET)):(HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET));}

#define LED0_T	HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
#define LED1_T	HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);

void led_init(void);

#endif

 led.c

#include "../Include/led.h"
void led_init(void)
{
	LED0(1);	//init led0 and led1,close them.
	LED1(1);
}

beep.h:

#ifndef __BEEP_H
#define __BEEP_H

#include "gpio.h"

#define BEEP(x)	{(x==0)?(HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET)):(HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET));}

#define BEEP_T	HAL_GPIO_TogglePin(BEEP_GPIO_Port, BEEP_Pin);

void beep_init(void);

#endif

beep.c:

#include "../Include/beep.h"

void beep_init(void)
{
	BEEP(1);	//init beep,close it.
}

key.h:

#ifndef __KEY_H
#define __KEY_H

#include "gpio.h"

#define KEY0_RET	1
#define KEY1_RET	2
#define KEY2_RET	3

#define KEY_UP		1
#define KEY_DOWN	0

#define	KEY0_VAL	HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)
#define	KEY1_VAL	HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)
#define	KEY2_VAL	HAL_GPIO_ReadPin(WKUP_GPIO_Port,WKUP_Pin)



int8_t key_scan(int8_t mode);

#endif

key.c:

#include "../Include/key.h"
#include "../Include/beep.h"
#include "../Include/led.h"

int ret;

/*
 #define KEY0_RET	1
#define KEY1_RET	2
#define KEY2_RET	3

#define KEY_UP		1
#define KEY_DOWN	0
#define	KEY0_VAL	HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);
#define	KEY1_VAL	HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
#define	KEY2_VAL
 */

int8_t key_scan(int8_t mode)  //mode = 0 : if keep press the button,it will output value until released,1: it will output a value until you released.
{
	ret = 0;
	if(KEY0_VAL == KEY_DOWN)
	{
		HAL_Delay(10);
		if(KEY0_VAL == KEY_DOWN)
			{
				if(mode == 1){
				while(KEY0_VAL == KEY_DOWN);
				}
				ret=KEY0_RET;
			}
	}
	else if(KEY1_VAL == KEY_DOWN)
	{
		HAL_Delay(10);
		if(KEY1_VAL == KEY_DOWN)
			{
				if(mode == 1){
				while(KEY1_VAL == KEY_DOWN);
				}
				ret=KEY1_RET;
			}
	}
	else if(KEY2_VAL == KEY_UP)
	{
		HAL_Delay(10);
		if(KEY2_VAL == KEY_UP)
			{
				if(mode == 1){
				while(KEY2_VAL == KEY_UP);
				}
				ret=KEY2_RET;
			}
	}
	return ret;
}

main.c:只贴出中间需要修改的段

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"
#include "../../BSP/Include/led.h"
#include "../../BSP/Include/beep.h"
#include "../../BSP/Include/key.h"
int8_t key_val;
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
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 */

  if(IS_ENGINEERING_BOOT_MODE())
  {
    /* 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 */
  led_init();
  beep_init();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	  key_val = key_scan(1);
	  if(key_val)
	  {
		  switch(key_val)
		  {
		  case KEY0_RET:
			  LED0_T;
			  break;
		  case KEY1_RET:
			  LED1_T;
			  break;
		  case KEY2_RET:
			  BEEP_T;
			  break;
		  }
	  }
	  else
		  HAL_Delay(10);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

有时间再更新中断点灯的配置方法

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值