LED灯驱动之直接操作寄存器下

37 篇文章 12 订阅
订阅专栏

目录

一、完善led.c驱动文件

1、添加控制与模块化的开关灯 

 2、写入操作函数

二、编写应用程序

1、编写ledAPP.c

2、编译测试

 ①编译

②加载驱动 

③创建节点 

④关灯 

⑤开灯  

⑥测试错误 

⑦卸载驱动 


一、完善led.c驱动文件

1、添加控制与模块化的开关灯 

定义1、0控制开关,编写开关灯模块

#define LEDOFF  0   /*关闭*/
#define LEDON   1   /*打开*/

/*LED灯打开、关闭*/
void led_switch(u8 sta)
{
    u32 val = 0;
    if(sta == LEDON)
    {
        val = readl(GPIO1_DR);
        val &= ~(1 << 3);/*bit3清零,打开LED灯*/
        writel(val ,GPIO1_DR);
    }else if(sta == LEDOFF){
        val = readl(GPIO1_DR);
        val |= (1 << 3);/*bit3置1,关闭LED灯*/
        writel(val ,GPIO1_DR);
    }
}

 2、写入操作函数

写入操作函数如下

/*写入操作*/
static ssize_t led_write(struct file *file, const char __user *buf,
				  size_t count, loff_t *pos)
{
    unsigned int retvalue;
    unsigned char databuf[1];
    retvalue = copy_from_user(databuf , buf , count);
    if(retvalue < 0)
    {
        printk("kernel write failed!\r\n");
        return -EFAULT;
    }
    /*判断开灯还是关灯*/  
    led_switch(databuf[0]);
    return 0;
}

二、编写应用程序

1、编写ledAPP.c

ledAPP.c代码如下

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

/*
    argc:应用程序参数个数(argv数组元素个数)
    argv:具体参数,也可以写作char **argv
    ./ledAPP <filename> <0:1>    0表示关灯,1表示开灯
    ./leAPP  /dev/led 0   关灯
    ./ledAPP /dev/led 1   开灯
*/
int main(int argc, char *argv[])
{
    int fd,retvalue;
    char *filename;
    unsigned char databuf[1];

    /*判断命令行输入参数是否正确*/
    if(argc != 3){
        printf("error usage!\r\n");
        return -1;
    }

    filename = argv[1];
    /*打开文件*/
    fd = open(filename , O_RDWR);
    if(fd < 0){
        printf("file open failed\r\n",filename);
        return -1;
    }
    /*获取控制开关的数字*/
    databuf[0] = atoi(argv[2]);/*将字符转换为数字*/
    /*如果输入的控制命令不是1或者0直接退出*/
    if(((int)databuf[0]) < 0 || ((int)databuf[0]) >1)
    {
        printf("control parameter error\r\n");
        return -1;
    }

    retvalue = write(fd,databuf,sizeof(databuf));
    if(retvalue < 0){
        printf("LED control failed\r\n");
        close(fd);
        return -1;
    }

    close(fd);/*关闭文件*/
    return 0;

}

2、编译测试

 ①编译

 分别编译led.c和ledAPP.c,都复制到开发板根目录/lib/modules/4.1.15/下

②加载驱动 

加载驱动,并查看设备号200存在,在加载驱动的时候灯就默认亮了

③创建节点 

创建设备节点

④关灯 

运行APP关灯

 

⑤开灯  

运行APP开灯

 

⑥测试错误 

进行错误输入测试

输错开关命令

 命令行多输或少输

⑦卸载驱动 

卸载驱动

 到此,用驱动直接操作寄存器开关led灯完成了

03 STM32寄存器开发基础-点亮LED(讲解GPIO口输出)
07-11 1944
这篇文章学习`STM32F103`单片机,以寄存器方式,点亮LED。以控制LED为例,学习如何配置STM32的寄存器,实现输出高低电平的控制。 所以,重点不是LED如何控制,重点是教会大家如何写代码配置STM32的GPIO口,实现对LED这种外设模块进行控制。
LED的控制
m0_72502290的博客
04-13 1169
首先赋值0xfe,点亮第一个LED,接下来,左移1位使得下一个LED也点亮,如此循环,使得8个LED全部依次点亮,以实现流水效果。可以看到,比赛时板子上 的LED是共阳极的,所以当我们写程序时,只需要对其赋值为0就可以使赋值为0的LED点亮。这里,对P0口赋值为0xee,即11101110,使L1和L5点亮。这样是不是非常简单!那么我们接下来,写段流水代码,来更好地体会对LED控制的原理。要想随心所欲控制LED,首先要读懂它的原理图。
编写驱动时对寄存器通用操作的讲解
GYFsix的博客
06-26 453
编写驱动时对寄存器通用操作的讲解
直接通过寄存器地址操作控制LED(STM32_01)
fanxp66的专栏
05-06 6419
一、硬件基础1、开发版:STM32-PZ6806L2、MCU型号:STM32F103ZET6(1)内核:32位 高性能ARM Cortex-M3处理器。时钟:高达72M,实际还可以超频一点。单周期乘法和硬件除法。 (2)IO口:STM32F103ZET6: 144引脚 112个IO,大部分IO口都耐5V(模拟通道除外),支持调试:SWD和JTAG,SWD只要2根数据线 (3)存储器容量:5...
Linux内核编程(四)gpio寄存器驱动编写
qq_1033275663的博客
06-29 413
Linux内核驱动gpio寄存器编写
使用寄存器GPIO点亮LED的简易指南
A77ul_的博客
03-15 1415
一、GPIO简介GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引 脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F4IGT6 型号的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOI 共 9 组 GPIO,芯片一共 176 个引脚,其中 GPIO 就占了一大部分,所有的 GPIO 引脚都 有基本的输入输出功能。
正点原子----LED驱动实验(直接操作寄存器
xylink_001的博客
11-05 674
正点原子led驱动
led驱动开发直接操作寄存器
weixin_43072093的博客
03-03 758
一、创建工程 1、知识前提 ​ 一般编写驱动很少直接操作寄存器来初始化外设,但是不排除要调试时要读取或置位寄存器的某些位。 ​ 在linux系统下操作寄存器不能直接按照芯片手册的寄存器物理地址来操作,因为linux内核启动的时候会初始化MMU,MMU的作用是将物理内存和虚拟内存映射起来,也就是地址映射: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0BQGUb...
使用寄存器点亮LED_STM32使用寄存器点亮LED_
10-01
本文将深入探讨如何在STM32F409上使用寄存器直接控制来点亮LED,这适用于那些希望了解底层硬件操作开发者。 首先,我们要了解STM32的GPIO(General Purpose Input/Output)结构。STM32F409系列拥有多个GPIO端口...
香橙派LED内核驱动源码,包括驱动文件,makefile和上层测试app
最新发布
10-03
本内容主要是基于orangepi_3_lts开发板写的一个LED内核驱动程序,该驱动程序主要通过写寄存器的方式来实现,暂时没有添加设备树,添加设备树的分享可以看我的下一篇分享。本次分享的内容主要包括LED的内部驱动...
51单片机入门————LED的控制
m0_73850645的博客
03-02 5554
LED的控制,LED的闪烁,自定义延时,独立按钮,流水的设计
linux之平台总线led_dev,led_drv,ledapp程序demo
weixin_42399752的博客
07-29 425
plat_led_dev.c #include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #define GPC0_CONF_REG 0xe0200060 #define GPC0_SIZE 8 // 24表示需要使用6个寄存器, 8表示使...
STM32-寄存器点亮LED
老胡的博客
10-10 1809
详细解释怎么使用寄存器点亮LED
寄存器方式点亮LED
weixin_53944340的博客
08-17 2311
stm32寄存器
IMX6学习记录(13)-LED驱动
Jun626的博客
11-05 996
上面是我创建的群聊,欢迎新朋友的加入。 1.确定寄存器地址 时钟配置 时钟基地址:0x20c406c GPIO MUX基地址:0x2290028 GPIO PAD基地址0x0229006c GPIO寄存器 2.驱动程序 #define CCM_CCGR1_BASE (0X020C406C) #define SW_MUX_GPIO5_IO08_BASE (0x0...
扩展知识点---驱动中对应的测试用的APP程序
嵌入式技术开发
10-11 182
1、编写测试APPled驱动加载成功以后可以手动创建/dev/led节点,应用程序通过/dev/led文件来完成对LED设备的控制 例如:向/dev/led文件中写0 表示关闭LED,写1表示打开LED。 #include "stdio.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "fcntl.h" #include "stdlib.h" #include "string..
STM32用寄存器点亮LED
qq_44622367的博客
03-31 5787
寄存器:实际上就是cpu里面的东西 每个单元都有不一样的功能,根据功能给这些存储单位取别名,这个别名就是我们所说的寄存器寄存器的映射:给寄存器分配地址的过程就叫作寄存器的映射。 新建工程: 新建工程需要手动创建main.c .h(头文件)头文件:寄存器的映射 如何写寄存器的映射: 首先找到需要控制外设的IO口,根据这个IO口去寄存器组织架构寻找需要控制外设的IO口在哪里基地址是什么,然后再...
寄存器点亮LED流水
啥也不懂的博客
10-24 1396
本文介绍了STM32F103系列芯片的地址映射和寄存器映射原理,使用寄存器点亮LED流水。 文章目录一、STM32F103C8T6单片机1. 简介2. 映射3. 时钟4. GPIO(通用I/O)输入输出二、点亮LED1. 创建工程2. 代码编写3. 波形观察4. 烧录三、总结四、参考文献 一、STM32F103C8T6单片机 1. 简介 STM32是一个微控制器产品系列的总称,目前这个系列中已经包含了多个子系列,分别是:STM32小容 量产品、STM32中容量产品、STM32大容量产品和STM32互.
随机控制LED驱动程序实现交替闪烁效果
资源摘要信息:"该压缩包子文件包含了实现随机点亮单片机上两个不同位置的LED驱动程序。该程序能够控制LED进行位置切换并以大约一秒的间隔闪烁。文件列表中的01.c文件很可能包含了C语言编写的源代码,而01.hex...
写文章

热门文章

  • ubantu22手把手教你安装VMware Tools(详细图文) 19652
  • 手把手教你安装ubantu22(详细图文) 10736
  • ubantu22与windows相互复制粘贴(详细图文) 10178
  • 简语RAM、ROM、flash、eMMC(通俗易懂) 7055
  • UART 串口通信实验 4786

分类专栏

  • 单片机
  • stm32f103c8t6 8篇
  • alientek alpha(imx6ull)
  • IMX6ULL驱动 37篇
  • 移植IMX6ULL官方的uboot/Linux 9篇
  • IMX6ULL应用开发 11篇
  • LINUX系统编程 11篇
  • IMX6ULL裸机开发 7篇

最新评论

  • ubantu22与windows相互复制粘贴(详细图文)

    小白不想画工图: 20之前的有点难受啊

  • ubantu22与windows相互复制粘贴(详细图文)

    芯的一天: 是的,剪切板可以复制粘贴了,但是无法拖拽文件

  • Linux socket聊天室

    嵌入式小白哈哈: 不用,你有试过用数据库存储吗?不知道为啥我的数据库和服务器连接不上去

  • ubantu22设置自适应分辨率(详细图文)

    Vaooooo1: 麻烦问下,安装open-vm-tools后,退出vmeare17.5全屏模式,会改变ubuntu22的分辨率,你的也是这样吗

  • Linux socket聊天室

    The_TOP_: 不用到数据库吗?

大家在看

  • 酒吧收银系统解决方案——未来之窗行业应用跨平台架构
  • 解决idea配置文件加载超大的问题 23

最新文章

  • 定时器PWM输出
  • stm32 定时器中断
  • stm32 ADC
2023年93篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家银川人物玻璃钢雕塑设计南京节日商场美陈2米高玻璃钢佛像雕塑玻璃钢雕塑卡通专业厂家白山玻璃钢雕塑制造厂家西兰花玻璃钢雕塑韶关人像雕塑玻璃钢商场美陈装饰图片淮北大型玻璃钢雕塑制作淮南卡通玻璃钢雕塑公司山东户外玻璃钢雕塑方法玻璃钢西餐厅人物雕塑鄂尔多斯玻璃钢雕塑厂家巩义大型玻璃钢雕塑长沙肖像玻璃钢雕塑衡水玻璃钢雕塑公司梅州玻璃钢卡通雕塑有哪些黄山学校玻璃钢雕塑定做价格湖南玻璃钢雕塑灯价格水晶玻璃钢雕塑批发北京常见商场美陈费用玻璃钢景观雕塑生产商南平玻璃钢牛雕塑诸暨玻璃钢雕塑厂制作玻璃钢仿铜雕塑商场门头美陈叫什么商场室内美陈布置图商场美陈在国外玻璃钢骆驼雕塑选哪家杭州商场美陈布置高空安装香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化