这块三合一的开发板上有且只有一个按键,没办法,就拿这唯一的按键来用吧。吸取前面UART3的教训,先看开发板的原理图吧。这个按键被接到了STM8S207SB的PD7上,已做了上拉处理。为了简单明了,还是点LED1吧。按一下LED1亮,再按一下LED1灭。好了,写程序吧。
#i nclude
#define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // 开发板上的LED1接在PD3上
void GPIO_init(void)
{
PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出
PD_CR1 = 0x08; // 设置PD3为推挽输出
PD_CR2 = 0x80; // 使能PD7外部中断
}
void EXTI_init(void)
{
EXTI_CR1 = 0x80; // PD口下降沿触发中断
}
#pragma vector=0x02 // 这里很关键!看下面说明。
__interrupt void EXTI_PD7_TLI(void)
{
LED1_FLASH;
}
void init_devices(void)
{
asm("sim"); // 关全局中断
GPIO_init();
EXTI_init();
asm("rim"); // 开全局中断
}
void main( void )
{
init_devices();
// 主循环里没有程序需要执行
while(1);
}
这里着重要说明的一点是PD7的外部中断程序。看了一下芯片手册,PD口外部中断EXTI3的中断向量号是6,想当然,又是想当然,按IAR的规矩中断向量要加2,就这样写#pragma vector=0x08,结果就是按下按键,程序没响应了,一直在中断里不出来。接下来只能另想办法,仔细翻了资料后发现,PD7和PD其他端口不一样,PD7后面拖了个小尾巴TLI,再看手册上的TLI描述,乖乖,TLI拥有芯片最高级别中断,享有独立专用的中断向量号0,这下就好办了,按IAR的规矩,向量号加2,程序改成#pragma vector=0x02,重新来一遍编译、下载、运行,按键终于听话了。
关键字:IAR STM8 EXTI 外部中断 控制寄存器
引用地址:
IAR+STM8——EXTI外部中断控制寄存器
推荐阅读最新更新时间:2024-03-16 15:20
AVR单片机中断的学习探究(外部中断与内部中断)
最开始的一点,所有中断的配置都必须要打开全局中断控制#asm(“sei”) //打开SREG的全局使能I置位 首先博主先探究了一下AVR单片机的外部中断。 外部中断需要用的必须先看原理图的INT0 INT1的引脚。因为外部中断是通过这两个引脚来触发,只要使能引脚,而且配置引脚为输出方式,电平如果发生合适的变化(具体通过高低电平还是上升沿下降沿控制是通过MCUCR寄存器来控制),中断便会触发。 配置外部中断相应的寄存器初始化的步骤--写在init.c中: (1)还是第一点,打开全局中断使能位; (2)配置MCUCR寄存器,通过控制寄存器的位数来控制具体由什么信号来触发中断; (3)配置通用中断控制寄存器 GICR:控制哪一个外部中
[单片机]
STM8 EEPROM心得
对于STM8来说,其内部的EEPROM确实是个不错的东西,而且STM8S103/105价格已经非常便宜了,当然也可以用STM8S003/005代替,而且价格更便宜,大概在,1.2/2.0元左右,比103/105的便宜1元左右,而且有网友说,其实这两个系列的晶圆完全是一样的(这个是秘密哦),至于ST为什么要这样做,我们就不去猜了,大家应该都知道。 对于EEPROM的读写时间比较长,特别是写入的时间,都是在ms级的,想必大家都知道。但是对于单片机内置EEPROM来说,由于其内部特性,导致单片 机在操作EEPROM时,不能产生中断,当然这个问题一般来说是没有问题的。但是像有数码管扫描的产品来说,这个就是问题了,一般来说,3位数码管扫
[单片机]
STM8 IO输入之独立按键检测程序
系统功能 使用STM8检测三个独立按键,一旦检测到按键被按,立刻做出指示! 硬件设计 关于STM8的I/O结构及相关介绍详见Datasheet,这里仅对作部分简单介绍,下面是STM8的I/O引脚配置表: STM8 I/O 口引脚配置表 Px_DDR Px_CR1 Px_CR2 I/O 方式 引脚状态说明 0 0 0 输入 悬浮输入 0 0 1 输入 上拉输入 0 1 0 输入 中断悬浮输入 0 1 1 输入 中断上拉输入 1 0 0 输出 开漏输出 1 1 0 输出 推挽输出 1 X 1 输出
[单片机]
嵌入式开发之STM32开发之EXTI中断使用及踩坑
关键点 中断配置,中断触发 中断配置 中断必然要绑定一个触发中断的外部I/O口,这里我选PA0,对应EXIT0,因为PA0正好对应我板子上的K3键,我需要K3键去触发这个中断 GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* config the extiline(PB0) clock and AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);//GPIOA根据你自己板子设定
[单片机]
iar输出s19用于stvp下载的设置方法
iar输出s19用于stvp下载的设置方法
[单片机]
基于STM8的电容感应式触摸按键方案在电磁炉中的应用
1 引言
相较于机械式按键和电阻式触摸按键,电容式触摸按键不仅耐用,造价低廉,机构简单易于安装,防水防污,而且还能提供如滚轮、滑动条的功能。但是电容式触摸按键也存在很多的问题,因为没有机械构造,所有的检测都是电量的微小变化,所以对各种干扰敏感得多。ST针对家电应用特别是电磁炉应用,推出了一个基于 STM8系列8位通用微控制器平台的电容式触摸感应方案,无需增加专用触摸芯片,仅用简单的外围电路即可实现电容式触摸感应功能,方便客户二次开发。
2 方案介绍
ST的电容式触摸按键方案通过一个电阻和感应电极的电容CX构成的阻容网络的充电/放电时间来检测人体触摸所带来的电容变化。如图1所示,当人手按下时相当于感应电极
[嵌入式]
IAR环境下基于SemiHost机制实现printf功能
我们在MCU的开发调试过程中,有时希望将一些信息输出以便观察。通常我们可以将标准C库中Printf相关实现函数进行重定向,通过UART串口输出,或者利用ITM机制通过SWO输出。这里将简单演示IAR环境下基于SemiHost机制实现printf功能。 下面使用的开发板STM32F4DISCOVERY板,硬件调试器为STLINK。稍作配置后即可使用。注意在代码里将stdio.h包含进去。 演示代码: 在调试状态下,点击view菜单下面的Terminal I/O子菜单即可出现输出窗口。 配置过程很简单,实现起来也挺方便的,需要的时候我们可以加以灵活选用。
[单片机]