STM32MP1当作单片机系列 一操作LED灯

0 - 相关文章

  01-PanGu STM32MP1资料下载
  02-STM32MP1 开发环境搭建
  03-PanGu 开发板固件更新-SD卡
  03-PanGu 开发板固件更新-USB
  04-STM32MP1 uboot编译
  05-STM32MP1 linux编译
  06-STM32MP1 yocto qt构建
  07-PanGu 开发板SD卡镜像制作
  08-STM32MP1当单片机系列 一操作LED灯

TM32MP1 M4核的使用。

一、开发环境

  PanGu STM32开发板有多种启动模式,如需只使用M4核,可以进入Engineering Mode。PanGu开发板进入Engineering Mode的方式是将拨码开关设置为如下模式:

Boot Mode bit1 bit2 bit 3
Engineering Mode OFF OFF ON

  IDE推荐使用STM32CubeIDE1.1.0 (目前最新版本STM32CubeIDE1.3.0)版本,调试工具推荐使用STlink。

  目前仅进行M4核开发,可以直接在Windows上进行。

二、硬件分析

LED
PI11
PH6
  从上图可以看出,LED1使用PI11引脚,LED2连接至PH6引脚,两个灯都是引脚低电平点亮,高电平熄灭。LED1在板上丝印为D16,LED2在板上丝印为D17,都是蓝灯。

三、建立工程

3.1 新建STM32 Project

在这里插入图片描述
  STM32CubeIDE可能会有如下提示,直接忽略即可。
在这里插入图片描述

3.2 选择芯片型号 STM32MP157AAA

在这里插入图片描述

3.3 设置工程名

在这里插入图片描述
  请确认使用的MP1库版本为1.1.0(目前最新为1.2.0) 。
在这里插入图片描述
  工程设置完成后可以打开如下界面:在这里插入图片描述
  CA7文件夹是给A7核使用的,在工程模式可以不用理会。Drivers文件夹是ST提供的HAL_Drivers,用户无需修改。我们只需重点关注01LED.ioc文件和01LED_CM4子工程即可。

四、设置ioc

4.1 设置IO

  双击01LED.ioc文件,进入ioc设置界面。将LED1和LED2引脚设置为输出。LED1使用PI11引脚,LED2使用PH6。
在这里插入图片描述
在这里插入图片描述
  设置好引脚为输出后,在GPIO部分进行进一步设置:
在这里插入图片描述
  如图,引脚被设置为Output Push Pull(推挽输出)、Pull-up(上拉输出)。因为驱动LED灯不用特别高速,所以将IO口Maximum output speed(最大输出速度)设置为Low。并给两个引脚分别建立标签为LED1和LED2。

4.2 工程输出设置

  在Code Generator处选择为每个外设生成单独的C和H文件,这样设置方便阅读代码。
在这里插入图片描述

4.3 完成设置

  以上设置完成后,Ctrl+S保存,会提示是否需要生成代码,选择Yes即可自动生成代码。系统会自动生成System Clock代码。

4.4 编译

在这里插入图片描述

4.5 设置Debug

调试前,请检查开发版是否已经上电,即LED灯 D15 被正常点亮
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  至此,已经通过STlink进入仿真模式,可以正常仿真,不过目前开发板LED灯并没有变化,因为我们还没有对GPIO进行操作。

  如没有正常进入调试模式,尝试执行如下操作
    1-找到Project菜单,运行clean,清理工程。
    2-重新build编译工程。
    3-然后尝试重新进入Debug模式。

五、操作GPIO

  应该是STM32CubeIDE还存在bug,所以工程中并没有对我们设置的GPIO进行初始化,仅仅在main.h中进行了如下定义:

/* Private defines -----------------------------------------------------------*/
#define LED1_Pin GPIO_PIN_11
#define LED1_GPIO_Port GPIOI
#define LED2_Pin GPIO_PIN_6
#define LED2_GPIO_Port GPIOH
/* USER CODE BEGIN Private defines */

  下面我们需要对GPIO进行操作。

5.1 新建BSP文件夹

  新建BSP文件夹,并在文件夹中新建bsp_led.c和bsp_led.h文件。
在这里插入图片描述
在这里插入图片描述

5.2 代码内容

bsp_led.c

/*
 * bsp_led.h
 *
 *  Created on: Jan 4, 2020
 *      Author: www.whxinluyao.com
 */

#include "bsp_led.h"

void bsp_led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOI_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);

   /*Configure GPIO pin : PtPin */
   GPIO_InitStruct.Pin = LED1_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);

	GPIO_InitStruct.Pin = LED2_Pin;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
}


void bsp_led_toggle(void)
{
	HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
	HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
}

bsp_led.h

#ifndef BSP_LED_H_
#define BSP_LED_H_

#include "main.h"

void bsp_led_init(void);
void bsp_led_toggle(void);

#endif /* BSP_LED_H_ */

main.c中加入如下内容

/* USER CODE BEGIN Includes */
#include "bsp_led.h"
/* USER CODE END Includes */

//......
//中间未修改部分省略
//***********************************

/* Infinite loop */
/* USER CODE BEGIN WHILE */
bsp_led_init();
while (1)
{
 bsp_led_toggle();
 HAL_Delay(500);	//延时500ms
  /* USER CODE END WHILE */

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

5.3 设置BSP至Includes

在这里插入图片描述
  设置BSP至Includes,否则会提示找不到bsp_led.h文件。

5.4 运行

  重新编译,然后进入仿真模式,两个LED灯会以1Hz频率闪烁。

欢迎加群

扣扣群号:105335490
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章