1)引脚工作模式设置

首先要做的,就是设置单片机引脚的工作模式,把PD4设置为输入模式,D3设置为输出模式。

在STM8S_StdPeriph_Lib库中,可以使用这个函数进行设置:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)

GPIOx是端口编号,取值有GPIOA、GPIOB、GPIOC、GPIOD,分别对应单片机的PAx、PBx、PCx、PDx端口,GPIO_Pin是引脚编号,取值有GPIO_PIN_1~GPIO_PIN_7,函数通过GPIOx和GPIO_Pin两个参数指定一个唯一的引脚。

GPIO_Mode是工作模式了。表示输入模式的取值有四种,分别是要不要上拉,要不要中断的四种组合:

GPIO_MODE_IN_FL_NO_IT Input floating, no external interrupt

GPIO_MODE_IN_PU_NO_IT Input pull-up, no external interrupt

GPIO_MODE_IN_FL_IT Input floating, external interrupt

GPIO_MODE_IN_PU_IT Input pull-up, external interrupt

要上拉的话,单片机内部会自动为引脚提供一个上拉电流,在没有外部输入的情况下,引脚就是高电平了。

表示输出模式的取值有8种,分别是是否开漏输出、输出高低电平、是否高速输出的组合:

GPIO_MODE_OUT_OD_LOW_FAST Output open-drain, low level, 10MHz

GPIO_MODE_OUT_PP_LOW_FAST Output push-pull, low level, 10MHz

GPIO_MODE_OUT_OD_LOW_SLOW Output open-drain, low level, 2MHz

GPIO_MODE_OUT_PP_LOW_SLOW Output push-pull, low level, 2MHz

GPIO_MODE_OUT_OD_HIZ_FAST Output open-drain, high-impedance level,10MHz

GPIO_MODE_OUT_PP_HIGH_FAST Output push-pull, high level, 10MHz

GPIO_MODE_OUT_OD_HIZ_SLOW Output open-drain, high-impedance level, 2MHz

GPIO_MODE_OUT_PP_HIGH_SLOW Output push-pull, high level, 2MHz

在这个应用中,需要把PD4设置为带上拉(因为按钮未按下时要呈高电平)、有中断的输入模式。开机时,PD3要设置为低电平的输出模式(低电平才能让Q1导通)。关机时PD3要设置为不带上拉的输入模式,所以这部分代码要这样写:

GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_IN_PU_IT); //PD4设置为带上拉、有中断的输入模式

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST); //开机时把PD3设置低电平的输入模

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//关机时把PD3设置低电平的输入模式

额外提一下,除了GPIO_Init函数可以设置引脚是输出高电平还是低电平,还可以用下面四个函数继续引脚的高低电平:

void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal) //输出PortVal指定的电平

void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) //输出高电平

void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) //输出低电平

void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) //高低电平翻转一次