嵌入式基于Linux电机控制,嵌入式linux下控制电机运动
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下控制电机运动相关推荐
- 嵌入式linux下控制电机运动
1.使用串口GPP8,GPP12口控制电机运转引脚(1-1:停止:1-0:正转:0-1:反转) 驱动代码: #include <linux/module.h> //kernel.h以便使用 ...
- Linux移动机器人硬件部分,基于ORB-SLAM的移动机器人嵌入式实现与优化
林连秀,叶芸,姚剑敏,郭太良 (福州大学 物理与信息工程学院, 福建 福州 350002) 摘要:ORB-SLAM(基于ORB特征识别的同时定位与地图构建系统)的源代码无法在嵌入式开发板运行,其构建的 ...
- 能装linux的嵌入式,试试一张软盘可装下Linux(嵌入式Linux)
嵌入式Linux由一个几百KB的kernel(内核)和一些根据需要进行定制的系统模块组成.由于Linux是开放源代 码的操作系统,因此,其在嵌入式领域有其不可替代的成本和高度灵活性等优势. 将Linu ...
- 《嵌入式Linux应用开发完全手册》——1.2 基于ARM处理器的嵌入式Linux系统
本节书摘来自异步社区<嵌入式Linux应用开发完全手册>一书中的第1章,第1.2节,作者 韦东山,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.2 基于AR ...
- 嵌入式Linux串口终端的定制,基于PC/104平台嵌入式Linux系统定制方法
基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统的研制,详细 ...
- 嵌入式linux gprs,在嵌入式Linux下GPRS上网方案[zt]
在嵌入式Linux下GPRS上网方案[zt] 硬/软件环境 基于S3C2410的嵌入式系统,COM1连接PC,COM2连接SIM300 GPRS模块.该系统运行在Linux 2.6.14操作系统下,使 ...
- Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)
文章目录 全系列传送门 引言 什么是unlocked_ioctl接口? unlocked_ioctl和read/write函数有什么相同和不同 unlocked_ioctl接口命令规则 命令的合成宏与 ...
- 嵌入式linux在windows,在Windows下启动Linux-嵌入式系统-与非网
在Windows me下: 首先: 启动Windows me,假定光驱为g:,Linux安装在/dev/hda3,将Linux安装光盘放入光驱,在窗口DOS提示符下运行以下几条命令(注意内核文件vml ...
- 基于Cortex-A7架构的嵌入式linux ARM驱动开发<1>——字符设备驱动开发
一.什么是字符设备 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的.比如我们最常见的点灯.按键.IIC.SPI, L ...
- 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤
最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...
最新文章
- P3085,jzoj3234-[USACO13OPEN]阴和阳【点分治】
- tiger4444/rabbit4444后缀勒索病毒怎么删除 能否百分百恢复
- Mac os区别_SN及Mac地址烧录
- go get如何删除_Go 每日一库之 xorm
- Supervisor-类unix系统下的进程控制工具
- android蓝牙串口通讯
- jq写的项目如何部署到静态服务器_如何在阿里云服务器上部署一个Web项目
- Redis——持久化RDB和AOF
- AI 垃圾分类指日可待?
- ISCW实验8:配置Cisco与Windows进行IPSec通信
- 网站禁止复制类型的属性
- C# Winform 开发框架
- ubuntu mysql卸载教程_ubuntu下安装mysql及卸载mysql详细教程/方法
- matlab柱状图填充不同的颜色不同,使用matlab绘画柱状图,且使用不同的图案填充...
- 计算机网络二进制计算题
- Android 系统(44)---多语言
- 重装系统(超详细教程)----大白菜教程
- 服务器appcrash的问题怎么修复,APPCRASH问题如何解决
- 在我的计算机看不到移动硬盘,移动硬盘在我的电脑中显示容量但不能显示内容 – 手机爱问...
- 模拟量输入输出模块的用途是什么?