STM8S系列基于IAR开发外部中断(EXTI)按键检测示例

STM8S系列基于IAR开发外部中断(EXTI)按键检测示例

  • 📌相关篇《STM8S903K3T6C基于ST Visual Develop开发外部中断示例》

📓功能说明

🎉PC1作为按键外部中断输入引脚,PD7作为LED指示灯。通过控制PC1按键来控制LED亮灭。

  • 🔰 STM8 I/O 口引脚配置表

在这里插入图片描述

  • 📖外部中断端口以及引脚
    在这里插入图片描述
  • 📜外部中断向量表
    在这里插入图片描述

注意事项

IAR开发环境下,中断向量地址需要+2

🌴功能函数实现

  • 🌿按键配置函数
/*************************************************************************** 函数名:Buttom_conf* 描述  :按键配置函数* 输入  :无* 输出  :无* 返回  :无 * 调用  :外部调用 *************************************************************************/
void Buttom_conf(void)
{PC_DDR &=0xFD;/*设置PC1数据方向寄存器 1为输出,0为输入*/PC_CR1|=0x02;/*设置PC1上拉输入*/PC_CR2|=0x02;/*设置PC1中断*/EXTI_CR1 &= (uint8_t)(~MASK_EXTI_CR1_PDIS);EXTI_CR1 |= 0x20;/*设置为下降沿触发中断*/
}
  • 🌿led输出引脚
/*************************************************************************** 函数名:LED_conf* 描述  :STM8S* 输入  :无* 输出  :无* 返回  :无 * 调用  :外部调用 *************************************************************************/
void LED_conf(void)
{PD_DDR|=0x80;   /* 设置PD7数据方向寄存器 1为输出,0为输入*/PD_CR1|=0x80;   /* 设置PD7推挽输出 */ 
}
  • 🌿中断服务函数
#pragma vector=7
__interrupt void EXTI_PORTC_IRQHandler(void)
{if(PC1_In == 0)PD7_out =~PD7_out;//PC1外部中断输入引脚
}
  • 📑main函数
/* Includes ------------------------------------------------------------------*/
#include "clk_conf.h"
#include "led.h"
#include "key_exti.h"/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/int main(void)
{/* Infinite loop */__disable_interrupt();/*设置内部高速时钟16M为主时钟*/ Clk_conf();LED_conf();Set_Led_On();Buttom_conf();EnableInterrupt;while(1){/* 添加你的代码  */ }
}

📚程序源码

链接:https://pan.baidu.com/s/188ydSgGG14mUGZW9MMZxMg 
提取码:4arl


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部