STM8的GPIO驱动
芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写
首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO的复用功能才能使用,看这张表
DDR决定输入输出方向,CR1 CR2决定输入输出模式,上拉,下拉,推挽,开漏等
主要依靠这几个寄存器
还有一个控制寄存器2,懒得传了
按照这张表,输出写输出寄存器,输入读输入寄存器,就能完成GPIO的操作了
以下是操作代码
#include "key.h" u8 keyValue = 0;
#define KEY1_IN (GPIOD->IDR&0X80)
#define KEY2_IN (GPIOE->IDR&0X08) static void Delay(u16 nCount)
{
/* Decrement nCount value */
while (nCount != 0)
{
nCount--;
} } void KeyInit(void)
{
//D7初始化
GPIOD->DDR &= ~(1<<7);//设置为输入
GPIOD->CR1 |= (1<<7);
GPIOD->CR2 &= ~(1<<7);//10 上拉输入 //E3初始化
GPIOE->DDR &= ~(1<<3);//设置为输入
GPIOE->CR1 |= (1<<3);
GPIOE->CR2 &= ~(1<<3);//10 上拉输入
} u8 KeyScan(void)
{
if(KEY1_IN == 0)
{
Delay(16000);
if(KEY1_IN == 0)
{
keyValue = KEY_VALUE1;
return KEY_VALUE1;
}
}
if(KEY2_IN == 0)
{
Delay(16000);
if(KEY2_IN == 0)
{
keyValue = KEY_VALUE2;
return KEY_VALUE2;
}
}
return 0;
}
#ifndef __KEY_H_
#define __KEY_H_
#include "stm8s.h" //按键使用D7 E3
//按键按下低电平,按键松开高电平 #define KEY_VALUE1 1
#define KEY_VALUE2 2 extern u8 keyValue; void KeyInit(void); u8 KeyScan(void); #endif
#include "led.h" void LedInit(void)
{ //D1初始化
GPIOD->DDR |= (1<<1);//设置为输出
GPIOD->CR1 |= 1<<1;
GPIOD->CR2 &= ~(1<<1);//10 推挽输出 //d0
GPIOD->DDR |= (1<<0);//设置为输出
GPIOD->CR1 |= 1<<0;
GPIOD->CR2 &= ~(1<<0);//10 推挽输出 //c3
GPIOC->DDR |= (1<<3);//设置为输出
GPIOC->CR1 |= 1<<3;
GPIOC->CR2 &= ~(1<<3);//10 推挽输出
LedSet(1,1);
LedSet(2,1);
LedSet(3,1);
} void LedSet(u8 ch,u8 value)
{ switch(ch)
{
case 1:
if(value)GPIOD->ODR |= 1<<1;
else GPIOD->ODR &= ~(1<<1);
break;
case 2:
if(value)GPIOD->ODR |= 1<<0;
else GPIOD->ODR &= ~(1<<0);
break;
case 3:
if(value)GPIOC->ODR |= 1<<3;
else GPIOC->ODR &= ~(1<<3);
break;
}
}
#ifndef __LED_H_
#define __LED_H_
#include "stm8s.h" //led1 PD1 swim
//led2 pd0
//led3 pc3 d12_cs void LedInit(void); void LedSet(u8 ch,u8 value); #endif
STM8的GPIO驱动的更多相关文章
- Linux下GPIO驱动(三) ----gpio_desc()的分析
上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/** ****************************************************************************** * @author 暴走的小 ...
- 基于STM8的GPIO操作---STM8-第一章
1. 综诉 也许单片机在你看来是一件不太容易的事,但据我所知,单片机,无非就是控制它的GPIO口,所以可以看出,学会如何操作控制GPIO口对使用单片机来说是很重要的一件事. 在装载STM8的单片机中, ...
- 开发GPIO驱动的基本套路
最近完成了基于AR9331的GPIO驱动的开发,主要包括:控制一个连接GPIO的灯控:接收一个连接GPIO的按键事件:以及接收一个连接GPIO的脉冲事件. 这里,结合开发实践,总结一下GPIO驱动开发 ...
- [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】
本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...
- uboot的GPIO驱动分析--基于全志的A10芯片【转】
本文转载自:http://blog.csdn.net/lw2011cg/article/details/68954707 uboot的GPIO驱动分析--基于全志的A10芯片 转载至:http://b ...
- MM32F0020 GPIO驱动LED灯(MM32F0020 GPIO Toggle)
目录: 1.MM32F0020简介 2.MM32F0020系统时钟配置 3.MM32F0020的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0020 GPIO驱 ...
随机推荐
- lucene-SpanFirstQuery 和SpanNearQuery 跨度查询
1.SpanFirstQuery查询 对出现在一个域中前n个位置的跨度查询. public void testSpanFirstQuery() throws Exception{ SpanzFirts ...
- HDU 1232 畅通工程(最小生成树+并查集)
畅通工程 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- list遍历
一.对List的遍历有三种方式 List<String> list = new ArrayList<String>(); ...
- java中list的使用方法
LIST是个容器接口,可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数, 用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据 ...
- ubuntu上的mysql数据库双机备份设置
配置环境: myslq 5.5.3 + ubuntu server 12.04 一.配置MySQL主服务器(192.168.0.1) 1.增加一个账号专门用于同步 1 mysql>grant r ...
- STM32F2系列时钟的配置
前一节详细介绍了系统默认的时钟配置,及各路时钟输出是多少,这是默认配置的,但实际使用的时钟默认的时钟并不符合要求,所以就得知道如何调用库函数进行配置. 最好的资料就是查阅stm32f2xx_rcc.c ...
- 解决phpmyadmin上传文件大小限制的配置方法(转)
phpmyadmin导入SQL文件时涉及到phpmyadmin上传文件大小限制问题,默认phpmyadmin上传文件大小为2M,如果想要 phpmyadmin上传超过2M大文件,就需要修改phpmya ...
- Java与C#的比较学习
http://www.cnblogs.com/javathread/archive/2012/08/11/2634893.html 我在大学学的是C语言,自学和选修的是C++,刚毕业也搞过几天Jsp, ...
- abstract class 与interface
一.抽象类(absteact class) 特点: 1.抽象方法只作说明,而不包含实现,可以看成是没有实现体的虚方法 2.抽象类不能被实例化.除此之外,具有类的其他特性 3.抽象类可以但不是必须有抽象 ...
- memcache command
http://www.cnblogs.com/jeffwongishandsome/archive/2011/11/06/2238265.html