打印

【连载】STM8L051F3_02_EXTI应用

[复制链接]
867|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caijie001|  楼主 | 2018-5-24 18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本章介绍STM8L051F3的EXTI相关知识,内容分为以下几部分:
  • EXTI简介
  • KEY外部中断检测
1、EXTI简介EXTI也是属于GPIO的知识点,应用比较广泛。STM8L051F3每个I/O口在输入模式下都能配置为中断,在这个配置下,一个信号沿或电平输入到I/O口上将产生一个中断请求。外部中断只有在端口的输入模式下才有效。
可通过配置寄存器Px_CR2相应的位来独立地使能或禁能某个端口的外部中断功能。另外,可通过ADC_TDRH和ADC_TDRL寄存器来禁用施密特触发器节省功耗。
2、KEY外部中断检测2.1 KEY的外部中断配置本小节介绍将GPIO配置为外部中断输入模式,并通过KEY(PC4)来触发一个外部中断信号,然后产生中断,然后控制LED1的状态。使用的例程:STM8L051F3_02_EXTI。实现步骤:
1)初始化LED1为推挽输出模式(初始电平高)
2)初始化KEY为上拉输入&中断模式,并配置为下降沿触发
2.2 例程介绍EXTI的初始化在exti.c文件中实现:
void EXTI_Init(void)
{
  // 配置KEY IO口为上拉输入&中断模式
  GPIO_Init(KEY_GPIO_PORT, KEY_GPIO_PINS, GPIO_Mode_In_PU_IT);
  //KEY引脚配置,下降沿触发;
  EXTI_SetPinSensitivity(EXTI_Pin_4, EXTI_Trigger_Falling);
}
EXTI(KEY)的端口定义在exti.h文件下:
#define KEY_GPIO_PORT  (GPIOC)
#define KEY_GPIO_PINS  (GPIO_Pin_4)
主函数中对LED于EXTI进行初始化后开启总中断:
void main(void)
{
  LED_Init();   //初始化LED1
  EXTI_Init();  //初始化KEY
  enableInterrupts();   //开总中断
while(1)
{
;
}
}
中断处理函数在stm8l15x_it.c文件下(该文件下还定义了delay_ms()函数):
INTERRUPT_HANDLER(EXTI4_IRQHandler,12)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
   //延迟消抖
  delay_ms(10);
  //松手检测
while(GPIO_ReadInputDataBit(KEY_GPIO_PORT, KEY_GPIO_PINS)== 0);
  //切换LED1的状态
  GPIO_ToggleBits(LED1_GPIO_PORT, LED1_GPIO_PINS);
  //清除中断标志位
  EXTI_ClearITPendingBit(EXTI_IT_Pin4);
}
使用ST-LINK把程序下载到开发板中,按下KEY可以改变LED1的状态。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:21ic公开课专区:http://open.21ic.com/ 21ic资料下载中心:http://dl.21ic.com/ 21ic项目外包中心:http://project.21ic.com/ 杰杰欢迎大家有空常来赛事专区逛逛

131

主题

3790

帖子

63

粉丝