2)停机模式设置

STM8S单片机有停机模式,在停机模式下,单片机功耗降到最低,所有时钟停止工作,但可以保留RAM和寄存器的值,停机模式只能可以通过下面几种方式退出:

-外部中断(GPIO)

-CAN接收中断

-SPI传输结束

-I2C中断(从地址匹配)

-复位

通过执行HALT指令,也就是执行库函数的halt()函数进入停机模式。

3)设置外部中断

外部中断通过SetExtIntSensitivity函数设置:

void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue)

其中Port是要设置外部中断的端口,取值有GPIOA、GPIOB、GPIOC、GPIOD,分别对应单片机的PAx、PBx、PCx、PDx端口;

SensitivityValue是外部中断类型,有以下几种取值,分别表示下降沿和低电平触发中断、上升沿触发中断、下降沿触发中断、上升沿和下降沿触发中断:

EXTI_SENSITIVITY_FALL_LOW Interrupt on Falling edge and Low level

EXTI_SENSITIVITY_RISE_ONLY Interrupt on Rising edge only

EXTI_SENSITIVITY_FALL_ONLY Interrupt on Falling edge only

EXTI_SENSITIVITY_RISE_FALL Interrupt on Rising and Falling edges

在这个应用中,按钮按下是产生下降沿,要选取EXTI_SENSITIVITY_FALL_ONLY模式。

设置中断模式后,还需要启用中断,使用enableInterrupts()函数启用。

4)外部中断处理程序

在ST官方提供的STM8S_StdPeriph_Lib库自带的模板中,中断处理程序都在stm8s_it.c中实现。stm8s_it.c中已经根据中断向量设置好了每种中断处理程序的入口函数。只需在相应函数中填入内容即可。

这个应用中是要编写GPIOD端口的外部中断处理函数,所以要在这个中

这个应用中是要编写GPIOD端口的外部中断处理函数,所以要在这个中断处理函数中增加开关机的内容:

INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)

{

}

5)整体程序设计和源代码

单片机程序流程图如下,包含主程序main()的流程和stm8s_it.c的外部中断处理程序流程:

如何利用STM8S单片机实现一键式的开关机功能

具体源代码如下,关键点前面已经介绍,就不再详细说明了:

A)main.c的源代码:

void Delay(uint16_t nCount)//定义延时函数,FFFF大约是0.2s

{

while (nCount != 0)

{

nCount--;

}

}

bool fPowerOn_flag =FALSE;//定义开关机标志

void main(void)

{

GPIO_Init(GPIOD,GPIO_PIN_4,GPIO_MODE_IN_PU_IT);

EXTI_SetExtIntSensitivity(EXTI_PORT_POWER_KEY,EXTI_SENSITIVITY_FALL_ONLY);

enableInterrupts();

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查