您现在的位置: 主页 > 嵌入式开发入门到精通 > 单片机技术进阶 > STM8的GPIO驱动 -
本文所属标签:
为本文创立个标签吧:

STM8的GPIO驱动 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写 首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO的复用功能才能使用,看这张表DDR决定输入

芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写

本文引用地址: http://www.21ic.com/app/mcu/201808/782881.htm

首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO的复用功能才能使用,看这张表



DDR决定输入输出方向,CR1 CR2决定输入输出模式,上拉,下拉,推挽,开漏等

主要依靠这几个寄存器



还有一个控制寄存器2,懒得传了




按照这张表,输出写输出寄存器,输入读输入寄存器,就能完成GPIO的操作了

以下是操作代码

#include"key.h"

u8keyValue=0;

#defineKEY1_IN(GPIOD->IDR&0X80)

#defineKEY2_IN(GPIOE->IDR&0X08)

staticvoidDelay(u16nCount)

{

/*DecrementnCountvalue*/

while(nCount!=0)

{

nCount--;

}

}

voidKeyInit(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上拉输入

}

u8KeyScan(void)

{

if(KEY1_IN==0)

{

Delay(16000);

if(KEY1_IN==0)

{

keyValue=KEY_VALUE1;

returnKEY_VALUE1;

}

}

if(KEY2_IN==0)

{

Delay(16000);

if(KEY2_IN==0)

{

keyValue=KEY_VALUE2;

returnKEY_VALUE2;

}

}

return0;

}


#ifndef__KEY_H_

#define__KEY_H_

#include"stm8s.h"

//按键使用D7E3

//按键按下低电平,按键松开高电平

#defineKEY_VALUE11

#defineKEY_VALUE22

externu8keyValue;

voidKeyInit(void);

u8KeyScan(void);

#endif


#include"led.h"

voidLedInit(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);

}

voidLedSet(u8ch,u8value)

{

switch(ch)

{

case1:

if(value)GPIOD->ODR|=1<<1;

elseGPIOD->ODR&=~(1<<1);

break;

case2:

if(value)GPIOD->ODR|=1<<0;

elseGPIOD->ODR&=~(1<<0);

break;

case3:

if(value)GPIOC->ODR|=1<<3;

elseGPIOC->ODR&=~(1<<3);

break;

}

}



#ifndef__LED_H_

#define__LED_H_

#include"stm8s.h"

//led1PD1swim

//led2pd0

//led3pc3d12_cs

voidLedInit(void);

voidLedSet(u8ch,u8value);

#endif





              查看评论 回复



 

"STM8的GPIO驱动 -"的相关文章

网站地图

围观()