芯片的外设一般按照这么几个流程来进行,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驱动的更多相关文章

  1. Linux下GPIO驱动(三) ----gpio_desc()的分析

    上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...

  2. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二

    /** ****************************************************************************** * @author    暴走的小 ...

  3. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一

    /** ****************************************************************************** * @author    暴走的小 ...

  4. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三

    /** ****************************************************************************** * @author    暴走的小 ...

  5. 基于STM8的GPIO操作---STM8-第一章

    1. 综诉 也许单片机在你看来是一件不太容易的事,但据我所知,单片机,无非就是控制它的GPIO口,所以可以看出,学会如何操作控制GPIO口对使用单片机来说是很重要的一件事. 在装载STM8的单片机中, ...

  6. 开发GPIO驱动的基本套路

    最近完成了基于AR9331的GPIO驱动的开发,主要包括:控制一个连接GPIO的灯控:接收一个连接GPIO的按键事件:以及接收一个连接GPIO的脉冲事件. 这里,结合开发实践,总结一下GPIO驱动开发 ...

  7. [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...

  8. uboot的GPIO驱动分析--基于全志的A10芯片【转】

    本文转载自:http://blog.csdn.net/lw2011cg/article/details/68954707 uboot的GPIO驱动分析--基于全志的A10芯片 转载至:http://b ...

  9. MM32F0020 GPIO驱动LED灯(MM32F0020 GPIO Toggle)

    目录: 1.MM32F0020简介 2.MM32F0020系统时钟配置 3.MM32F0020的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0020 GPIO驱 ...

随机推荐

  1. GUI矩形、椭圆、线、框架

    所有的Swing组件必须由时间调度线程(event dispatch thread)进行配置,线程将鼠标点击和键盘敲击控制转移到用户接口组件.下面的代码片段是事件调度线程中的执行代码: EventQu ...

  2. asp 特殊字符替换

    <%Function specialstr(yourstring)find= "¿,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,Ø,Ù, ...

  3. 最短路径算法专题2----Dijkstra

    这个算法适用于求单源最短路径,从一点出发,到其余个点的最短路径. 算法要点: 1.用二维数组存放点到点的距离-----不能相互到达的点用MAX代替距离 2.用dis数组存放源点到任意其他一点的距离-- ...

  4. HTML5来了:5个好用的混合式App开发工具

    在残酷的移动互联网竞争环境下, HTML5技术一直受到各方关注,“HTML5颠覆原生 App”的争论也从未停止过,不管怎样HTML5生态的构建方兴未艾.不过对于移动开发者来说更关心的问题是如何低成本. ...

  5. mysql 查询 字段的类型

    select column_name,data_type from information_schema.columnswhere table_name = '表名'

  6. 关于MyEclipse不停报错multiple problems have occurred 或者是内存不足 的解决办法

    这是因为 worksapace与svn代码不一样,要更新! 一更新就好了,困扰死我了,卧槽,搞了2个小时,难怪svn一提交就卡死人,原来还就是svn的问题,更新一下就行.

  7. android脚步---自动完成文本框

    自动完成文本框AutoCompleteTextView,当用户输入一定字符时,自动完成文本框会显示一个下拉菜单,供用户选择,设置一个Adapter,该Adapter中封装了AutoCompleteTe ...

  8. KVO & 通知 小记

    KVO的全称是Key-Value Observing,它实现了一种机制,对所关心的属性对象添加观察者,当属性值发生变化时会得到通知,我们可以对变化做相应的处理.看过设计模式的同学应该知道,这是一种典型 ...

  9. libevent和libev的区别对比(二)

    之前有一篇文章描述过一些对比: http://www.cnblogs.com/charlesblc/p/6078029.html 这里在代码和应用方面再说一下. 看一下两边的Helloworld基本就 ...

  10. mysql优化---优化sql

    一.通过show status和应用特点了解各种SQL的执行频率 通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得.SHOW S ...