基于TQ2440的嵌入式linux步进电机驱动

本文档介绍了如何在基于TQ2440的Linux系统上编写步进电机驱动,包括硬件环境、内核函数、GPIO控制以及驱动代码和测试程序的详细步骤。涉及的知识点包括Linux内核模块编程、步进电机原理和51单片机驱动。
摘要由CSDN通过智能技术生成

在此文档的指导下写出linux步进电机驱动的前提是:

1、懂得linux内核模块编程。

2、明白步进电机的原理及驱动电路。

3、能在51单片机(或其他的CPU)下驱动步进电机。

 

 

 

 

一:运行环境

 

硬件平台:tq2440开发板(CPU,s3c2440)

软件平台:linux2.6.30.4内核

编译工具:arm-linux-gcc交叉编译器

 

 

二:跟驱动相关的基本内核函数

 

1、动态分配设备号

Int alloc_chrdev_region(dev_t *dev,  unsigned int baseminor,  unsigned int count,  const char *name)

dev:用于存放分配到的设备号

baseminor:要注册的次设备号的起始值

count:要注册的设备号个数

name:设备名称

返回值:0表示成功,负数为错误码

 

2、注销设备号

Void unregister_chrdev_region(dev_t from,  unsigned int count)

from:要注销的设备号的起始值

count:要注销的设备号个数

 

3、创建字符设备并初始化

在驱动中,字符设备其实就是个结构体,如下

struct cdev {

const struct file_operations *ops; //指向对该设备的操作结构体

/*其结构体成员有很多,这里只列出其中很重要的一个*/

}

struct file_operations {

struct module *owner; //一般为THIS_MODULE

ssize_t (*read)(struct file *,  char __user *,  size_t, loff_t *);

ssize_t (*write)(struct file *,  char __user *,  size_t, loff_t *);

int (*open)(struct inode *,  struct file *);

int (*release)(struct inode *,  struct file *);

int (*ioctl)( struct inode *,  struct file *,  unsigned int, long );

/*这里知识列出部分成员*/

}

void cdev_init(struct *cdev,  const struct file_operations *fops)

cdev:指向被初始化的字符设备

fops:指向字符设备支持的一系列文件操作

 

4、注册字符设备

int cdev_add(struct cdev *p,  dev_t dev, unsigned count)

p:指向要注册的字符设备

dev:此字符设备要绑定的设备号的起始值

count:此字符设备要绑定的设备号的个数

返回值:0表示注册成功,负数表示错误码

 

5、注销字符设备

void cdev_del(struct cdev *p)

p:指向被注销的字符设备

 

6、struct file_operations成员函数与应用层的联系

当应用程序调用open(),close(),read(),write(),ioctl()等时,系统调用会转去调用对应驱动的struct file_operations中的open(),release(),read(),write(),ioctl()等。

 

三、操作ARM的GPIO的内核函数

 

在步进电机驱动(驱动电路方案是L297+L298)中,引脚使用情况是GPF3对应着驱动电路的时钟口,GPF4对应着驱动电路的使能口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值