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灯
目录
一、开发环境
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上进行。
二、硬件分析
从上图可以看出,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