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

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

首先是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



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

ST公司的STM8AF5286是用于汽车的8位MCU,配置了多达128KB闪存,数据EEPROM,10位ADC,计时器,LIN,CAN,USART,SPI,I2C等接口,工作电压3-5.5V,

关键字: st stm8

你知道STM8 Nucleo开发板吗?意法半导体新推出的两款STM8* Nucleo开发板,让8位开发社区也能体验到STM32 * Nucleo系列开发板久经验证的易用性和可扩展功能。

关键字: Nucleo stm8 意法

折腾了两天了,一直没解决问题。短路计算机这边的串口收和发,自收自发一切正常,这说明计算机这边的串口没问题。短路stm8s的收和发,自收自发也正常,那就是stm8s这边的串口也没问题。怀疑是波特率误差比

关键字: stm8 串口通信

前一段时间画了一个CC1101收发小板子,但是一直没有成功,最后发现把27nH的电感焊接成了27uH,最终导致失败.现在更换之后可以覆盖我们公司所有的角落,已经够用了.下面是STM8程序CC1101.

关键字: cc1101 stm8 433无线模块

发布至今已十年,STM8将华丽转身,延续传奇。

关键字: 8位 MCU stm8 意法半导体 技术专访

在使用MDK5编译STM32时,新增的.c文件需要添加到 include Paths 处,否则编译时会报错。使用STM8时,用的是IAR,新增的.c文件需要添加头文件路径到 options->c/c++ Compi...

关键字: stm8 错误

在讲PWM之前,大家先做以下5个实验。1、LED1循环亮300ms,灭700ms;2、LED1循环亮30ms,灭70ms;3、LED1循环亮3ms,灭7ms;4、循环以下步骤1)LED1循环亮3ms,灭7ms;执行一百次...

关键字: stm8 单片机 机器人

最近希望恢复性学习一下STM8的相关知识,于是我选择了从头开始写温湿度传感器DHT11驱动代码的方式。其中遇到一些问题,也有一些收获,希望会帮助到遇到类似问题的朋友,也希望不足之处得到大家的指导 首先介绍一下

关键字: dht11 stm8 温湿度传感器

舵机如上图所示,左图为9g舵机,右图为55g舵机,与直流减速电机不同,它的工作方式是根据脉冲宽度转到对应的角度,转角范围是180度。PWM波控制信号的脉冲宽度对应的舵机转角如下图所示。舵机有一个三线的接口。脉冲信

关键字: stm8 单片机 机器人 舵机
关闭
关闭