STM32MP157A-DK1 点亮LED

The Redefine Team Lv6

STM32MP157A-DK1 是一款基于 STM32MP157AAC3 MPU 芯片的开发板。这是一款 MPU 芯片,它和传统的 STM32 系列 MCU 不同,其开发方式有很大的区别。下面讲解如何点亮板载的 LED 灯。

一、系统安装

需要做的准备工作是

  • 安装 STM32CubeProgrammer 这款软件
  • 下载系统文件,例如:en.flash-stm32mp1-openstlinux-6-1-yocto-mickledore-mp1-v23-06-21
  • 插入 SD 卡,并把两个拨码开关调整至 off 状态已进入烧录模式
  • 插入电源,串口线,烧录线
  • 打开 STM32CureProgrammer,选择 USB 设备进行连接,此时可以找到一个 DFU 的设备
  • 打开 tsv 文件 FlashLayout_sdcard_stm32mp157a-dk1-optee.tsv,路径是 .\en.flash-stm32mp1-openstlinux-6-1-yocto-mickledore-mp1-v23-06-21\stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21\images\stm32mp1\flashlayout_st-image-weston\optee
  • 选择镜像文件路径为 .\en.flash-stm32mp1-openstlinux-6-1-yocto-mickledore-mp1-v23-06-21\stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21\images\stm32mp1
    download
  • 开始烧录,大约耗时 15 分钟,此时可以从串口看到打印
    download

二、点亮 LED 灯

完成系统安装后,便可以 boot 进系统了。

  • 两个拨码开关调整至 on 状态已从 SD Card 启动

  • 等待蓝灯闪烁表示 Linux 系统已经启动,同时也可以看串口的输出内容

  • 插入网线,使用 ifconfig 获取 IP 地址

  • 使用 date -s MM/DD/YYdate -s HH:MM:SS 修改日期和时间

  • 安装 SSH 并登录

  • 方式一

    • 使用如下指令点亮 LED 灯
      1
      2
      3
      gpioset -c gpiochip0 14=0                -->get GPIO PA14 and set it low (green led on)
      pioset -c gpiochip0 14=1 -->get GPIO PA14 and set it high (green led off)
      gpioset -t 500ms -c gpiochip0 14=active -->get GPIO PA14 and toogle it every 500ms (green led blink)
  • 方式二

    • 编译一个小程序,首先需要搭建交叉编译环境,参考博客 《STM32MPU 开发环境搭建》。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      #include <errno.h>
      #include <fcntl.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <sys/ioctl.h>
      #include <unistd.h>

      #include <linux/gpio.h>

      int main(int argc, char **argv)
      {
      struct gpiohandle_request req;
      struct gpiohandle_data data;
      char chrdev_name[20];
      int fd, ret;

      strcpy(chrdev_name, "/dev/gpiochip0");

      /* Open device: gpiochip0 for GPIO bank A */
      fd = open(chrdev_name, 0);
      if (fd == -1) {
      ret = -errno;
      fprintf(stderr, "Failed to open %s\n", chrdev_name);

      return ret;
      }

      /* request GPIO line: GPIO_A_14 */
      req.lineoffsets[0] = 14;
      req.flags = GPIOHANDLE_REQUEST_OUTPUT;
      memcpy(req.default_values, &data, sizeof(req.default_values));
      strcpy(req.consumer_label, "led_gpio_a_14");
      req.lines = 1;

      ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req);
      if (ret == -1) {
      ret = -errno;
      fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n",
      ret);
      }
      if (close(fd) == -1)
      perror("Failed to close GPIO character device file");

      /* Start led blinking */
      while(1) {

      data.values[0] = !data.values[0];
      ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
      if (ret == -1) {
      ret = -errno;
      fprintf(stderr, "Failed to issue %s (%d)\n",
      "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret);
      }
      sleep(1);
      }

      /* release line */
      ret = close(req.fd);
      if (ret == -1) {
      perror("Failed to close GPIO LINEHANDLE device file");
      ret = -errno;
      }
      return ret;
      }

三、参考链接

  1. Start package
  2. How to control GPIO
  • 标题: STM32MP157A-DK1 点亮LED
  • 作者: The Redefine Team
  • 创建于 : 2024-03-25 21:53:26
  • 更新于 : 2024-03-25 21:53:26
  • 链接: https://redefine.ohevan.com/2024/03/25/STM32MP157A-DK1 点亮LED/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论