2022/10/1 --- LED A7核复习

创作本文目的:记录自己的学习历程


一、A7实现LED灯亮灭的步骤

1.分析硬件

根据扩展板上的丝印,找到LED灯的位置,查看其对应的管脚
在这里插入图片描述

根据硬件原理图,可知LED灯的亮灭,其实就是高低电平的转换
在这里插入图片描述

2.分析芯片手册

主要就分析RCC和GPIO章节
RCC就是给指定的寄存器进行时钟使能,使其正常工作
GPIO就是根据需求,调整需要设置的寄存器,常用有:
GPIOx_MODER: GPIO模式寄存器 设置为输出模式
GPIOx_OTYPER: GPIO输出类型寄存器 设置为推挽/开漏输出
GPIOx_OSPEEDR: GPIO输出速度寄存器 设置为输出速率
GPIOx_PUPDR: GPIO上下拉电阻寄存器 是否需要上下拉电阻
GPIOx_ODR: GPIO输出数据寄存器 输出高低电平,实现LED灯点亮核熄灭

3.程序编写

主要就是给需要寄存器中指定位置清0或置1,封装好寄存器的地址,再根据芯片手册中所指示的位置,写入特定的值即可

.h

#ifndef __CMD_H__
#define __CMD_H__
#include <asm-generic/ioctl.h>
#define type 'a'

//#define CMD_ON _IO(type,0)
//#define CMD_OFF _IO(type,1)
#define CMD_LED1_ON _IOR(type,0,int)
#define CMD_LED1_OFF _IOR(type,1,int)

#define CMD_LED2_ON _IOR(type,2,int)
#define CMD_LED2_OFF _IOR(type,3,int)

#define CMD_LED3_ON _IOR(type,4,int)
#define CMD_LED3_OFF _IOR(type,5,int)

#endif

.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include "fsmp157a_led.h"

int main(int argc, const char *argv[])
{
	int fd;
	
	fd = open("/dev/mycdev",O_RDWR);
	if(fd == -1){
		perror("open device node error");
		return -1;
	}
	
	while(1){
		ioctl(fd,CMD_LED1_ON);
		sleep(1);
		ioctl(fd,CMD_LED1_OFF);
		sleep(1);
		ioctl(fd,CMD_LED2_ON);
		sleep(1);
		ioctl(fd,CMD_LED2_OFF);
		sleep(1);
		ioctl(fd,CMD_LED3_ON);
		sleep(1);
		ioctl(fd,CMD_LED3_OFF);
		sleep(1);
	}
	
	close(fd);
	
	return 0;
}

4.通过模块化方式,在开发板的linux内核上跑程序

注意要使用交叉编译工具进行编译,生成arm架构的可执行二进制文件才行
在这里插入图片描述

5.现象

请添加图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值