YA157C 应用层开发LED例程

开发环境

  1. MYD-YA157C开发板

  1. Linux开发环境

原理图

PA13 PA14均可以作为此次试验的对象,系统上电后的Blue LED秒闪,即PA14引脚已被使用系统使用,此次使用PA13作为测试对象。

 

 

代码

stm32官方wiki已提供该部分代码,官方的代码使用PA14引脚,我们将该引脚修改为PA13。

代码功能为秒闪。

 #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: gpiochip11 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_13 */
   req.lineoffsets[0] = 13;
   req.flags = GPIOHANDLE_REQUEST_OUTPUT;
   memcpy(req.default_values, &data, sizeof(req.default_values));
   strcpy(req.consumer_label, "led_gpio_a_13");
   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;
 }

Makefile

Makefile使用cmake生成

 cmake_minimum_required (VERSION 2.8)
 ​
 project (led_ya157c)
 add_executable(led_ya157c led.c)

使用cmake .生成makefile后,执行make命令生成可执行文件。

 

设备树修改

为啥要修改设备树呢?因为实际PA13也已经被系统使用,通过命令cat /sys/kernel/debug/gpio可知。

 

如果不修改设备树,则在执行应用程序的时候,会出现如下错误。

 

修改设备树文件stm32mp157c-ya157c-v2.dtsled部分,将okay修改为disabled后保存。

 

重新生成设备树dtb文件

 make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040 O="$PWD/../build"

该命令参考米尔文档。

将新生成的设备树文件stm32mp157c-ya157c-hdmi-v2.dtb传输到开发板的boot目录下。reboot开发板。

执行应用程序

重新使用命令cat /sys/kernel/debug/gpio检查PA13的使用情况。PA13并未被使用。

 

运行应用程序./led_ya157c,即可见红色LED闪烁。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值