测试程序如下:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#define LED0 PBout(0)
#define OUT PBout(1)
void Exti_Init(void)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRL&=0XFF0FFFFF;
GPIOB->CRL|=0X00800000;
GPIOB->ODR|=1<<5;
Ex_NVIC_Config(GPIO_B,5,FTIR);
MY_NVIC_Init(2,1,EXTI9_5_IRQChannel,2);
}
void Led_Init(void)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRL &= 0XFFFFFF00;
GPIOB->CRL |= 0X00000033;
GPIOB->ODR |= 3<<0;
}
// void EXTI9_5_IRQHandler(void)
// {
// EXTI->  R |= 1<<5;
// LED0=!LED0;
// }
void EXTI9_5_IRQHandler(void)
{
LED0=!LED0;
EXTI->  R |= 1<<5;
}
// void EXTI9_5_IRQHandler(void)
// {
// LED0=!LED0;
// delay_us(1);
// EXTI->  R |= 1<<5;
// }
// void EXTI9_5_IRQHandler(void)
// {
// delay_us(1);
// LED0=!LED0;
// EXTI->  R |= 1<<5;
// }
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
Exti_Init();
Led_Init();
while(1)
{
OUT=1;
delay_ms(250);
OUT=0;
delay_ms(250);
}
}
示波器图片说明:上面的测试信号是 LED0 PBout(0),第三张图可以看得出,电平始终为高,大概有3V的样子。
下面的测试信号是OUT PBout(1),由图可知,方波的发生信号没有问题。
持续的高电平说明必定不是每一个下降沿触发一个LED翻转,于是放大观察得到图一、图二,每个下降沿附近还有一个干扰信号触发了中断,连续跳变导致“持续”高电平。
这是我刚才重新再次验证得结果。如果,同一个程序,同样的接线:PB0接led,PB1接PB5,led是常亮的话,示波器就能看到同样的现象。要是led为闪烁的话,就另当别论了,那就只能理解为开发板“区别”了。
|