芯片的外设一般按照这么几个流程来进行,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. CDockablePane 关闭的问题

    显示或者隐藏 当点击CDockablePane上的关闭按钮时,并不能将其关闭,知识将其隐藏了起来,如果需要重新显示或隐藏,则相关命令的响应函数如下: if(m_Panes.GetSafeHwnd()) ...

  2. HDU 1232 畅通工程(最小生成树+并查集)

    畅通工程 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  3. HDU 2209 翻纸牌游戏

    翻纸牌游戏 Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

  4. material design 的android开源代码整理

    material design 的android开源代码整理 1 android (material design 效果的代码库) 地址请点击:MaterialDesignLibrary 效果: 2 ...

  5. 微信小程序Server端环境配置

    主要内容:1. SSL免费证书申请步骤2. Nginx HTTPS 配置3. TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请 ...

  6. Android Studio的使用(九)--设置IDE编码格式

    1.打开设置 2.勾选编码格式,在这里可以设置分别设置IDE.Project.File等级别的编码格式. 3.查看.修改各个文件的编码 4.当右击编辑界面时,可以直接设置当前文件的编码

  7. php使用curl提交xml数据

    $xml_data ='<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_ ...

  8. struts2语法--error页面如何捕获?

    如果地址栏输入了不带后缀或者action为后缀, 不存在的页面跳转到error.jsp: struts.xml配置" <package name="default" ...

  9. 浅谈Android五大布局

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...

  10. docker入门实战笔记

    1.什么是docker: docker翻译为搬运工,在这里应该可以理解为搬运应用的工具,也就是云.先了解其运用场景之后更容易对他形成深刻理解. Docker提供了一种可移植的配置标准化机制,允许你一致 ...