1、使用串口GPP8,GPP12口控制电机运转引脚(1-1:停止;1-0:正转;0-1:反转)

驱动代码:

#include //kernel.h以便使用printk()等函数

#include //fs.h包含常用的数据结构,如struct file等

#include //uaccess.h 包含copy_to_user(),copy_from_user()等函数

#include //io.h 包含inl(),outl(),readl(),writel()等IO口操作函数

#include #include #include //init.h来指定你的初始化和清理函数,例如:module_init(init_function)、module_exit(cleanup_function)

#include #include #include #include #include

//irq.h中断与并发请求事件

#include //下面这些头文件是IO口在内核的虚拟映射地址,涉及IO口的操作所必须包含

//#include #include #include #include #include

#define DEVICE_NAME     "motor"

#define MOTOR_MAJOR        240                    /*主设备号*/

enum ENUM_MOTOR_MOVE_TYPE

{

ENUM_MOTOR_STOP,

ENUM_MOTOR_FORWARD,

ENUM_MOTOR_BACK

};

int motor_open(struct inode *inode,struct file *file)

{

s3c_gpio_cfgpin(S3C64XX_GPP(8),S3C_GPIO_OUTPUT);

s3c_gpio_cfgpin(S3C64XX_GPP(12),S3C_GPIO_OUTPUT);

return 0;

}

static long motor_ioctl ( struct file *file, unsigned int temp, unsigned long cmd)

{

printk("<0>" "cmd:%d\r\n", cmd);

printk("<0>" "back:%d\r\n", ENUM_MOTOR_BACK);

switch(cmd) {

case ENUM_MOTOR_STOP:

{

gpio_set_value(S3C64XX_GPP(8),0);

gpio_set_value(S3C64XX_GPP(12),0);

}

break;

case ENUM_MOTOR_FORWARD:

{

gpio_set_value(S3C64XX_GPP(8),1);

gpio_set_value(S3C64XX_GPP(12),0);

}

break;

case ENUM_MOTOR_BACK:

{

gpio_set_value(S3C64XX_GPP(8),0);

gpio_set_value(S3C64XX_GPP(12),1);

}

break;

default:

break;

}

return 0;

}

int motor_release(struct inode *inode,struct file *file)

{

return 0;

}

struct file_operations motor_fops = {

.owner          = THIS_MODULE,

.open           = motor_open,

.unlocked_ioctl = motor_ioctl,

.release        = motor_release,

};

int __init motor_init(void)

{

int rc;

rc = register_chrdev(MOTOR_MAJOR, DEVICE_NAME,&motor_fops);

if (rc < 0)

{

return -1;

}

return 0;

}

void __exit motor_exit(void)

{

unregister_chrdev(MOTOR_MAJOR, DEVICE_NAME);

}

MODULE_LICENSE("GPL");

module_init(motor_init);

module_exit(motor_exit);

应用程序代码:

#include #include #include #include #include

#include

enum ENUM_MOTOR_MOVE_TYPE

{

ENUM_MOTOR_STOP,

ENUM_MOTOR_FORWARD,

ENUM_MOTOR_BACK

};

int main (int argc, char **argv)

{

int fd;

char buf[10]={0,1};

int motorMove = ENUM_MOTOR_STOP;

fd = open("/dev/motor", 2, 0777);

if (fd < 0)

{

printf ("Open /dev/motor file error\n");

return -1;

}

motorMove = strtoul(argv[1], 0, 0);

printf("move:%d\r\n", motorMove);

ioctl(fd, 0, motorMove);

close (fd);

return 0;

}

遇到的问题:

1、最开始时在驱动代码motor_ioctl ()函数中使用第二个参数作为控制电机转动方向的参数时,当值为2时,总是不能调用motor_ioctl 函数。后面使用motor_ioctl ()函数的第三个参数作为控制电机转动方向的参数,则问题就解决了。具体原因暂时没有查看。

嵌入式基于Linux电机控制,嵌入式linux下控制电机运动相关推荐

  1. 嵌入式linux下控制电机运动

    1.使用串口GPP8,GPP12口控制电机运转引脚(1-1:停止:1-0:正转:0-1:反转) 驱动代码: #include <linux/module.h> //kernel.h以便使用 ...

  2. Linux移动机器人硬件部分,基于ORB-SLAM的移动机器人嵌入式实现与优化

    林连秀,叶芸,姚剑敏,郭太良 (福州大学 物理与信息工程学院, 福建 福州 350002) 摘要:ORB-SLAM(基于ORB特征识别的同时定位与地图构建系统)的源代码无法在嵌入式开发板运行,其构建的 ...

  3. 能装linux的嵌入式,试试一张软盘可装下Linux(嵌入式Linux)

    嵌入式Linux由一个几百KB的kernel(内核)和一些根据需要进行定制的系统模块组成.由于Linux是开放源代 码的操作系统,因此,其在嵌入式领域有其不可替代的成本和高度灵活性等优势. 将Linu ...

  4. 《嵌入式Linux应用开发完全手册》——1.2 基于ARM处理器的嵌入式Linux系统

    本节书摘来自异步社区<嵌入式Linux应用开发完全手册>一书中的第1章,第1.2节,作者 韦东山,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.2 基于AR ...

  5. 嵌入式Linux串口终端的定制,基于PC/104平台嵌入式Linux系统定制方法

    基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统的研制,详细 ...

  6. 嵌入式linux gprs,在嵌入式Linux下GPRS上网方案[zt]

    在嵌入式Linux下GPRS上网方案[zt] 硬/软件环境 基于S3C2410的嵌入式系统,COM1连接PC,COM2连接SIM300 GPRS模块.该系统运行在Linux 2.6.14操作系统下,使 ...

  7. Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)

    文章目录 全系列传送门 引言 什么是unlocked_ioctl接口? unlocked_ioctl和read/write函数有什么相同和不同 unlocked_ioctl接口命令规则 命令的合成宏与 ...

  8. 嵌入式linux在windows,在Windows下启动Linux-嵌入式系统-与非网

    在Windows me下: 首先: 启动Windows me,假定光驱为g:,Linux安装在/dev/hda3,将Linux安装光盘放入光驱,在窗口DOS提示符下运行以下几条命令(注意内核文件vml ...

  9. 基于Cortex-A7架构的嵌入式linux ARM驱动开发<1>——字符设备驱动开发

    一.什么是字符设备 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的.比如我们最常见的点灯.按键.IIC.SPI, L ...

  10. 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

最新文章

  1. P3085,jzoj3234-[USACO13OPEN]阴和阳【点分治】
  2. tiger4444/rabbit4444后缀勒索病毒怎么删除 能否百分百恢复
  3. Mac os区别_SN及Mac地址烧录
  4. go get如何删除_Go 每日一库之 xorm
  5. Supervisor-类unix系统下的进程控制工具
  6. android蓝牙串口通讯
  7. jq写的项目如何部署到静态服务器_如何在阿里云服务器上部署一个Web项目
  8. Redis——持久化RDB和AOF
  9. AI 垃圾分类指日可待?
  10. ISCW实验8:配置Cisco与Windows进行IPSec通信
  11. 网站禁止复制类型的属性
  12. C# Winform 开发框架
  13. ubuntu mysql卸载教程_ubuntu下安装mysql及卸载mysql详细教程/方法
  14. matlab柱状图填充不同的颜色不同,使用matlab绘画柱状图,且使用不同的图案填充...
  15. 计算机网络二进制计算题
  16. Android 系统(44)---多语言
  17. 重装系统(超详细教程)----大白菜教程
  18. 服务器appcrash的问题怎么修复,APPCRASH问题如何解决
  19. 在我的计算机看不到移动硬盘,移动硬盘在我的电脑中显示容量但不能显示内容 – 手机爱问...
  20. 模拟量输入输出模块的用途是什么?

热门文章

  1. 拜托!这才是分布式系统CAP的正确打开方式!
  2. Github 上热门的 Spring Boot 项目实战推荐
  3. 怎么样才算是精通 JavaScript?
  4. Hadoop框架:HDFS简介与Shell管理命令
  5. Shell脚本语言常用命令总结~
  6. hadoop--Reduce Join
  7. 基于Django实现RBAC权限管理
  8. 各种文件系统支持的最大硬盘容量
  9. 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (组合数学)
  10. java实现rabbitMQ延时队列详解以及spring-rabbit整合教程