0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32mp1 Cortex M4开发篇2:通过GPIO点亮LED灯详解

华清远见工控 2021-10-14 18:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

写在前面:

本文章为《ARM Cortex-M4裸机开发篇》系列中的一篇,,全系列总计14篇。笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板),Cortex-M4裸机开发篇除了讲M4裸机开发外,还会讲解通过M4控制资源扩展板上的各种传感器执行器模块(包括空气温湿度传感器LED灯、数码管、蜂鸣器、震动马达、按键中断、风扇等),本篇是M4控制资源扩展板中的一篇。

资源扩展板是FS-MP1A开发板的扩展模块,主要包含了10余种助主流传感器、执行器件、总线控制器件,非常方便项目扩展用。可拓展开发智慧家庭、智能医疗、智能安防、工业控制、图像识别、环境检测等方向的10个左右综合项目,华清远见开发板也将配套提供所有项目的说明文档、实验源码、应用程序等资料。

针对FS-MP1A开发板,除了Cortex-M4裸机开发篇外,还包括其他多系列教程,包括Cortex-A7开发篇、FreeRTOS篇、Linux基础及应用开发篇、Linux系统移植篇、Linux驱动开发篇、硬件设计篇、人工智能机器视觉篇、Qt应用编程篇、Qt综合项目实战篇等。?id=622457259672

资源扩展板介绍

硬件介绍&资源扩展板可开发项目

poYBAGFn9z-AAMA3AAJtk6t7vns204.jpg

Cortex-M4 GPIO编程

实验目的

熟悉STM32CubeIDE工具软件的使用。

掌握STM32CubeIDE软件的基本设计流程和设计步骤,能够使用工具进行设计、编程、仿真调试。

学习GPIO口的使用方法,掌握如何利用STM32MP157A芯片的I/O口控制LED。

实验环境

FS-MP1A开发平台

ST-Link仿真器

STM32CubeIDE开发软件

PC机 XP、Window7/10 (32/64bit)

实验原理

只要是对硬件操作,就要首先查看原理图。查看外设是和模块的MCU的哪个引脚相连。FS-MP1A开发平台上的LED的亮灭状态,与芯片上的引脚I/O输出电平有关。

FS-MP1A开发平台上LED的I/O:

pYYBAGD1gMqAeugsAABL_f8VtiY304.png

poYBAGD1gM-AUbhzAAAZU-WX2Vw836.png

IO操作重要结构体:GPIO_InitTypeDef

1234567891011121314151617181920 /** * @brief GPIO Init structure definition */typedef struct{ uint32_t Pin; /*!< Specifies the GPIO pins to be configured. This parameter can be any value of @ref GPIO_pins_define */ uint32_t Mode; /*!< Specifies the operating mode for the selected pins. This parameter can be a value of @ref GPIO_mode_define */ uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. This parameter can be a value of @ref GPIO_pull_define */ uint32_t Speed; /*!< Specifies the speed for the selected pins. This parameter can be a value of @ref GPIO_speed_define */ uint32_t Alternate; /*!< Peripheral to be connected to the selected pins. This parameter can be a value of @ref GPIO_Alternate_function_selection */}GPIO_InitTypeDef;

第一个成员变量Pin是所操作的管脚,第二个Mode是模式选择,第三个Pull是上拉下拉,或者都不加,第四个Speed是速度选择,第五个是管脚复用功能。一般我们只操作前四个。

IO口可以由软件配置成4种模式,其实操作的是GPIO的端口模式寄存器

输入(复位状态)/input(reset state)

通用输出模式 / general purpose output mode

复用功能模式 / alternate function mode

模拟模式 / analog mode

12345 #define GPIO_MODE_INPUT ((uint32_t)0x00000000U) /*!< Input Floating Mode */#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001U) /*!< Output Push Pull Mode */#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011U) /*!< Output Open Drain Mode */#define GPIO_MODE_AF_PP ((uint32_t)0x00000002U) /*!< Alternate Function Push Pull Mode */#define GPIO_MODE_AF_OD ((uint32_t)0x00000012U) /*!< Alternate Function Open Drain Mode */

上面给两个寄存器赋值了,1~4位是GPIO端口模式寄存器,5~8位是端口输出类型寄存器(决定是推挽输出还是开漏输出)。

STM32的GPIO端口在作为输出时,可以软件配置端口最大支持的时钟速率,下图是端口输出速度寄存器,有以下几种速度选择:

poYBAGFn9z-AC3_bAADm77RiO30862.jpg

12345678 /** @defgroup GPIO_speed_define GPIO speed define * @brief GPIO Output Maximum frequency * @{ */#define GPIO_SPEED_FREQ_LOW ((uint32_t)0x00000000U) /*!< Low speed */#define GPIO_SPEED_FREQ_MEDIUM ((uint32_t)0x00000001U) /*!< Medium speed */#define GPIO_SPEED_FREQ_HIGH ((uint32_t)0x00000002U) /*!< Fast speed */#define GPIO_SPEED_FREQ_VERY_HIGH ((uint32_t)0x00000003U) /*!< High speed */

GPIO调用的HAL函数:

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

该函数其实是对BSRR寄存器进行操作。

第一个参数传的是GPIO所在的组,第二个是该组的几号管脚,第三个是对管脚进行置位。

实验步骤

打开STM32CubeIDE->File->New->STM32 Project

poYBAGD1ME2AVPeTAACVnz-qkMk546.png

可以在左侧搜索框内输入芯片型号STM32MP157A进行搜索,选择对应芯片,点击Next

poYBAGFmcj-ASM-mAAC8KlaJkAU786.jpg

填写工程名,点击Finsh

poYBAGD1MFWAXdlzAABW-5r3LmY634.png

点击Yes打开配置页面

pYYBAGD1MFqAKmnWAAAp3TMlYLo989.png

poYBAGFmcj-AF6saAAEDRfefWWQ542.jpg

搜索框内搜索LED对应GPIO引脚PZ5、PZ6、PZ7,左键点击设置为GPIO_Output

pYYBAGD1MGOAQN6wAAC-3IaQ2Ns189.png

这里我们需要注意一下,和其他单片机不同,还需要继续设置“ Pin Reservation”给“ Cortex-M4”,否则STM32CubeMX不会生生成GPIO初始化相关代码。具体操作:在刚才选择的引脚上,鼠标右键选择“ Pin Reservation”->“ Cortex-M4”。

pYYBAGFn9z-AXRc1AADDkNnGYdI917.jpg

在Code Generator处选择为每个外设生成单独的C和H文件,这样设置方便阅读代码

poYBAGD1MGmAams0AACpGOkAn0s579.png

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

poYBAGD1MG2ADAi6AAAgBCPP1k8477.png

添加GPIO函数说明:

我们需要在main.c中添加GPIO相关函数, GPIO引脚输出电平高低函数

123456789101112 void bsp_led_on(void){ HAL_GPIO_WritePin(GPIOZ, GPIO_PIN_5,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOZ, GPIO_PIN_6,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOZ, GPIO_PIN_7,GPIO_PIN_SET);}void bsp_led_off(void){ HAL_GPIO_WritePin(GPIOZ, GPIO_PIN_5,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOZ, GPIO_PIN_6,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOZ, GPIO_PIN_7,GPIO_PIN_RESET);}

在main.c中调用函数改变GPIO引脚高低电平来改变LED灯的状态

pYYBAGFn90CADnhcAACkNLKoAdg961.jpg

上述为新建工程配置过程,可参考12.3.2章节进行导入已有工程,工程存放路径【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\1_LED】

配置完成或导入工程后进行程序下载,具体步骤参考12.3.3节进行开发板连接,程序编译、下载

实验现象

可看到LED灯循环亮灭

poYBAGFn90CAcLrCAACJKpoPP8E963.jpg

硬件平台:华清远见FS-MP1A开发板(STM32MP157)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45570

    浏览量

    673392
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9586

    浏览量

    393508
  • 嵌入式
    +关注

    关注

    5209

    文章

    20629

    浏览量

    336796
  • STM32
    +关注

    关注

    2312

    文章

    11189

    浏览量

    374545
  • 开发板
    +关注

    关注

    26

    文章

    6409

    浏览量

    120590
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析LPC408x/7x 32位ARM Cortex - M4微控制器

    深入解析LPC408x/7x 32位ARM Cortex - M4微控制器 在嵌入式应用领域,对于高集成度和低功耗的需求日益增长。NXP的LPC408x/7x 32位ARM Cortex -
    的头像 发表于 04-09 09:35 147次阅读

    Visionfive开发通过gpio来控制led

    用鼠标来控制它了,我选择在电脑上通过 ssh 开控制它。 如何通过 gpio 控制 LED
    发表于 04-01 06:10

    【RA-Eco-RA4M2开发板评测】+三个LED呼吸实现

    RA-Eco-RA4M2-100PIN-V1.0是一款基于100MHz Arm® Cortex®-M33内核架构的核心板,主控芯片为R7FA4M2AD3CFP。 RA
    发表于 03-28 10:35

    STM32MP257F-EV1评估板深度解析与技术应用指南

    STMicroelectronics STM32MP257F-EV1评估板是用于STM32MP257FAI3的开发平台,采用Arm® Cortex®-A35和
    的头像 发表于 10-20 11:49 1542次阅读
    <b class='flag-5'>STM32MP257F-EV1</b>评估板深度解析与技术应用指南

    STM32MP257F-DK探索套件技术解析与应用指南

    套件充分利用了STM32MP2系列微处理器的功能,用户可以使用STM32 MPU OpenSTLinux分布软件(用于主处理器Arm双核Cortex-A35)和STM32CubeMP2
    的头像 发表于 10-16 16:26 1406次阅读
    ‌<b class='flag-5'>STM32MP</b>257F-DK探索套件技术解析与应用指南

    【RA4E2开发板评测】1、从开箱到点亮 LED

    运行的。 4.点亮并闪烁 LED 4.1 硬件连接 查看开发板原理图,找到 LED 连接的 GPIO
    发表于 09-05 17:37

    【RA4E2开发板评测】点亮LED

    中文网站_生态社区_资料下载_样片申请_方案介绍 【LED开发板上有两个LED,从资料中可以找到其原理图: 分别接到了P207与P1
    发表于 08-27 20:53

    请问NuMicro® Cortex-M0/M4系列可以提供哪些USB器件示例代码?

    NuMicro® Cortex-M0/M4系列可以提供哪些USB器件示例代码?
    发表于 08-19 07:05

    【创龙TLT113-MiniEVM开发板试用体验】点亮LED

    源(3.3V),负极连接GPIO引脚。 点亮条件 :GPIO输出低电平时形成电流通路(低电平驱动)或高电平驱动(根据电路设计)。 本开发LED
    发表于 08-05 21:36

    【VisionFive 2单板计算机试用体验】GPIO点亮LED

    测试板卡GPIO点亮LED。 一、搭建环境 1.1、文档 按照官方的应用文档搭建测试环境GPIO点亮
    发表于 06-30 07:31

    使用STM32CubeIDE调试STM32MP157D的M4内核时报了下图这个错误,怎么解决?

    我使用STM32CubeIDE调试STM32MP157D的M4内核时报了下图这个错误: 经过我的排除后发现,应该是STM32CubeIDE上传&quot
    发表于 06-18 06:57

    瑞萨RA系列FSP库开发实战指南(19)使用寄存器点亮LED

    野火启明6M5开发板的LED电路图如图所示。图中RA6M5芯片的P400、P403、P404引脚分别通过一个2.2 KΩ的限流电阻连接到
    的头像 发表于 06-11 15:06 2258次阅读
    瑞萨RA系列FSP库<b class='flag-5'>开发</b>实战指南(19)使用寄存器<b class='flag-5'>点亮</b><b class='flag-5'>LED</b><b class='flag-5'>灯</b>

    stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?

    stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写
    发表于 05-19 15:06

    【米尔-STM32MP257开发板试用体验】初次体验米尔-STM32MP257开发

    257D是ST推出的搭载了双核Cortex-A35 @1.5 GHz和Cortex-M33 @400 MHz的微处理器。米尔电子基于STM32MP257D推出了MYD-LD25X开发
    发表于 04-30 16:21

    【RA-Eco-RA4M2开发板评测】2 初识GPIO流水灯

    开发环境: IDE:MKD 5.38a Renesas RA Smart Configurator:v5.1.0 开发板:RA-Eco-RA4M2 MCU:R7FA4M2AD3CFP
    发表于 04-25 23:06