你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
外中断唤醒
zhuoyemp4 发表于 2015-8-5 11:11 进入halt前开启外部中断,唤醒后或者进入唤醒源中断服务函数时关掉外部中断 ...
风-417456 发表于 2015-8-5 13:00 一开始就是这样写的,但是也会出问题,后人说是中断重入了,所以把关总中断给去掉了 ...
zhuoyemp4 发表于 2015-8-5 13:27 总中断开启就没必要关了
测试标签123
IAR FOR ARM和IAR FOR STM8无法共存,
STM8L052,液晶内部电源怎么用?
STM8S103飞线外接芯片,I2C不能得到slaveAddress应答,通讯失败。
STM8S105C6T6 UART2串口,能接收数据,不能发送数据
STM8S105K4 串口2 无奇偶校验,也能接收 偶校验的 数据
在STM8S的IAP使用中断和APP使用中断问题
STM8L151 SMBUS设计
STM8S103F复位异常
STM8L的LCD调试时不亮
没人知道吗?自己顶一下。以下是中断配置
void Interrupt_init(void)
{
// EXTI_CR3 = 0x02;
EXTI_CR1 |= 0x80;
ITC_SPR3 |= 0x40;
}
程序连续运行就会出现第二次唤醒失败。但是在中断程序174行设断点仿真运行的话是每次都可以正常唤醒的
外中断唤醒
实现功能:T2每进中断让PD口输出翻转,10次后进入halt,PB1外部中断唤醒,唤醒时让PC口翻转。看到的现象就是LED以1s间隔闪烁,闪10次后停机,用PB1按键唤醒后PC口输出取反,PD口LED接着闪烁。
void initcpu();
void Init_GPIO(void);
void delay(unsigned char ms);
void Tim2INIT(void);
unsigned int i;
u8 TIM1S;
int main()
{
Init_GPIO();
initcpu();
Tim2INIT();
enableInterrupts();
while(1)
{
if(TIM1S>10)
{
TIM1S=0;
GPIOD->ODR=0x08;//进入Halt前关掉LED
GPIOB->CR2=0x02; //PB1使能外部中断
halt(); //进入halt模式
}
}
}
void Init_GPIO(void)
{
GPIOB->DDR=0x00;
GPIOB->CR1=0x02; //PB1上拉输入
GPIOB->CR2=0x00; //PB禁止外部中断
EXTI->CR1 = 0x08; //PB1下降沿触发
GPIOC->DDR=0x08;
GPIOC->CR1=0x08;
GPIOC->CR2=0x00;
GPIOC->ODR=0x00;
GPIOD->DDR=0x08;
GPIOD->CR1=0x08;
GPIOD->CR2=0x00;
GPIOD->ODR=0x00; //LED低亮
}
void initcpu()
{
//CLK->CKDIVR&= (uint8_t)(~0x18);/*时钟复位*/
CLK->CKDIVR= (uint8_t)0x01; /*设置时钟为内部16M高速时钟*/
disableInterrupts(); //close all interrupt
}
void delay(unsigned char i)
{
unsigned int j;
j=65535;
while(i--)
{
while(j--);
}
}
void Tim2INIT(void)
{
CLK->PCKENR1|=0x20;
TIM2->ARRH=0xf4;
TIM2->ARRL=0x24;
TIM2->CNTRH=0x00;
TIM2->CNTRL=0x00;
TIM2->PSCR=0x08;//256分频
TIM2->CR1=0x80;
TIM2->EGR=0x00;
TIM2->IER|=0x01;
TIM2->CR1|=0x01;
}
INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler,13)
{
TIM2->SR1 &= 0xfe;
TIM1S++;
GPIOD->ODR=~GPIOD->ODR;
return;
}
INTERRUPT_HANDLER(EXTI1_IRQHandler,4) //PB1外部中断
{
GPIOB->CR2=0x00; //PB禁止外部中断
GPIOC->ODR=~GPIOC->ODR;
return;
}
一开始就是这样写的,但是也会出问题,后人说是中断重入了,所以把关总中断给去掉了
总中断开启就没必要关了
现在好了,不知道算不算解决了。
之前都是清中断标志位后才关引脚中断,现在调换一下,先关引脚中断后清中断标志位正常了。还是没有搞清楚具体原因