开发环境:IAR for STM8
芯片:STM8S105K4
内容:在程序中写了一个关于GPIOC下降沿中断内容如下
结果就是进不去中断。
//按键引脚与寄存器定义
#define KEY1_PIN (0x01 << 3)
#define KEY1_DDR (GPIOC->DDR)
#define KEY1_CR1 (GPIOC->CR1)
#define KEY1_CR2 (GPIOC->CR2)
#define KEY1_IN() (GPIOC->IDR & KEY1_PIN)
#define KEY1_ON() (GPIOC->ODR |= KEY1_PIN)
#define KEY1_OFF() (GPIOC->ODR &=~KEY1_PIN)
#define KEY2_PIN (0x01 << 2)
#define KEY2_DDR (GPIOC->DDR)
#define KEY2_CR1 (GPIOC->CR1)
#define KEY2_CR2 (GPIOC->CR2)
#define KEY2_IN() (GPIOC->IDR & KEY2_PIN)
#define KEY2_ON() (GPIOC->ODR |= KEY2_PIN)
#define KEY2_OFF() (GPIOC->ODR &=~KEY2_PIN)
#define KEY3_PIN (0x01 << 1)
#define KEY3_DDR (GPIOC->DDR)
#define KEY3_CR1 (GPIOC->CR1)
#define KEY3_CR2 (GPIOC->CR2)
#define KEY3_IN() (GPIOC->IDR & KEY3_PIN)
#define KEY3_ON() (GPIOC->ODR |= KEY3_PIN)
#define KEY3_OFF() (GPIOC->ODR &=~KEY3_PIN)
//初始化函数
void KEY_Init(void)
{
KEY1_DDR &=~KEY1_PIN;
KEY1_CR1 |= KEY1_PIN;
KEY1_CR2 |= KEY1_PIN;
KEY2_DDR &=~KEY2_PIN;
KEY2_CR1 |= KEY2_PIN;
KEY2_CR2 |= KEY2_PIN;
KEY3_DDR &=~KEY3_PIN;
KEY3_CR1 |= KEY3_PIN;
KEY3_CR2 |= KEY3_PIN;
//GPIOC 下降沿中断
EXTI->CR1 |= 0x20;
}
//中断函数
#pragma vector = 0x07
__interrupt void EXTI_PORTC_IRQHandler(void)
{
if(KEY1_IN() != KEY1_PIN)LED1_ON();else LED1_OFF();
if(KEY2_IN() != KEY2_PIN)LED2_ON();else LED2_OFF();
if(KEY3_IN() != KEY3_PIN)LED3_ON();else LED3_OFF();
}
原因:
将文件从/A文件下复制到/B文件下。在/B文件下进行开发。结果在/B下修改了/A文件的内容。程序对的,没错,是/A文件下的修改了,/B文件下的文件并没有修改。
将close和close all but this 都点击,然后重新打开。你就会发现你之前修改的内容一点就没修改。重新修改一下就好了,可以进入中断了。
另外KEIL跟这个IAR for STM8也一样,也会出现这样的事。