编写基于stm32f407-uclinux下的led灯驱动

       在前文已经成功移植好linux内核在stm32中稳定地运行,下面是要编写简单的驱动程序,先选择写最简单的led灯驱动。

       led灯驱动归属于linux驱动的字符驱动这一类,而参考Uclinux源代码中usart设备驱动发现其采用的是平台设备驱动,不同于编写字符驱动。

       于是找编写字符驱动的资料,这在网上一抓一大把,对于这个led灯驱动的底层关键是各种GPIO寄存器的设置,通过查阅stm32f407的数据手册可知,需要设置GPIOx_MODER、OTYPER、OSPEEDR、PUPDR这几个寄存器,注意到的是我现在用的是stm32f407,与网上大把部分的s3c2440寄存器设置是大不一样的,因为平台的不同,需要根据实际参照数据手册来进行你的设置。 我的板子只有一个led灯,输出gpio口为PC0,于是参照手册先设置GPIOC_MODER,查到寄存器地址为0x40020808,如下图:


这里写图片描述

       直接取地址进行设置:

*#define GPIOC_MODER 0x40020800

((volatile unsigned )GPIOC_MODER) |= 0xffffff11;

其它寄存设置也是作类似的修改,以下是代码:

/*

 * Simple character interface to GPIOs.  Allows you to read/write values and

 * control the direction.  Maybe add wakeup when gpio framework supports it ...

 *

 * based on the work of "Mike Frysinger <vapier@gentoo.org>"

 * 

 * Adapted to drive the STM32 MCU, GPIO Port F PINs

 *

 * Copyright 2008 Analog Devices Inc.

 * Licensed under the GPL-2 or later.

 */



#ifndef __CONFIG_H

#define __CONFIG_H



#include <linux/cdev.h>

#include <linux/device.h>

#include <linux/errno.h>

#include <linux/fs.h>

#include <linux/kernel.h>

#include <linux/module.h>

#include <linux/platform_device.h>

#include <linux/types.h>





#include<linux/module.h>  

#include<linux/init.h>  

#include<linux/cdev.h>  

#include<linux/fs.h>  

#include<linux/io.h> /* writel */ 



#includ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值