打印

外部上升沿后3uS以上的时间才进中断

[复制链接]
1454|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lium|  楼主 | 2014-10-30 09:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32L151,IO从示波器是可以以33ns的速度翻转,也就是MCU以及IO的总线速度是32MHZ
按道理应该33nS*12=396nS再加上各种RP值,怎么也应该也小于1uS吧,但使用实际示波器观测,发现在外部上升沿后3uS以上的时间才进中断!
沙发
lium|  楼主 | 2014-10-30 09:14 | 只看该作者
不知道是否是没配置好

使用特权

评论回复
板凳
guoyt| | 2014-10-30 09:16 | 只看该作者
中断的周期是多少

使用特权

评论回复
地板
hanwe| | 2014-10-30 09:16 | 只看该作者
还有其他中断吗

使用特权

评论回复
5
lium|  楼主 | 2014-10-30 09:18 | 只看该作者
guoyt 发表于 2014-10-30 09:16
中断的周期是多少

中断的周期是10uS

使用特权

评论回复
6
lium|  楼主 | 2014-10-30 09:18 | 只看该作者
hanwe 发表于 2014-10-30 09:16
还有其他中断吗

除了这个外部中断没有用到其他中断。

使用特权

评论回复
7
yufe| | 2014-10-30 09:19 | 只看该作者
初始化设置发上来看看

使用特权

评论回复
8
lium|  楼主 | 2014-10-30 09:21 | 只看该作者
//BUSY_IO中断配置

void BUSY_I0_Config(void)

{

        GPIO_InitTypeDef   GPIO_InitStructure1;

        NVIC_InitTypeDef   NVIC_InitStructure1;

        EXTI_InitTypeDef   EXTI_InitStructure1;

        /* Configure PA0 pin as input floating */

        GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_IN;

        GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_UP;

        GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_40MHz;

        GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_2;

        GPIO_Init(GPIOA, &GPIO_InitStructure1);

        /* Enable SYSCFG clock */

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

        /* Connect EXTI0 Line to PA0 pin */

        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);

        /* Configure EXTI0 line */

        EXTI_InitStructure1.EXTI_Line = EXTI_Line2;

        EXTI_InitStructure1.EXTI_Mode = EXTI_Mode_Interrupt;

        EXTI_InitStructure1.EXTI_Trigger = EXTI_Trigger_Rising;  

        EXTI_InitStructure1.EXTI_LineCmd = ENABLE;

        EXTI_Init(&EXTI_InitStructure1);

        /* Enable and set EXTI0 Interrupt to the lowest priority */

        NVIC_InitStructure1.NVIC_IRQChannel = EXTI2_IRQn;

        NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 0;

        NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 0;

        NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;

        NVIC_Init(&NVIC_InitStructure1);

}

使用特权

评论回复
9
lium|  楼主 | 2014-10-30 09:21 | 只看该作者
中断服务如下,也就是靠示波器观察IO跳变来判断什么时候进入中断

使用特权

评论回复
10
lium|  楼主 | 2014-10-30 09:21 | 只看该作者
void EXTI2_IRQHandler(void)

{

  GPIOA->BSRRH = GPIOA->BSRRL = (1<<8);

  if(EXTI->PR & EXTI_Line2)

  {

        EXTI->PR = EXTI_Line2;//清中断

  }

}

使用特权

评论回复
11
llia| | 2014-10-30 09:24 | 只看该作者
接错线,现在是八百纳秒进中断

使用特权

评论回复
12
wangpe| | 2014-10-30 09:24 | 只看该作者
LZ最好把示波器图片贴出来,这样才好判断。

使用特权

评论回复
13
wangpe| | 2014-10-30 09:25 | 只看该作者
llia 发表于 2014-10-30 09:24
接错线,现在是八百纳秒进中断


差不多了。
但感觉应该在600ns左右或者更少:进中断+翻IO的时间。

使用特权

评论回复
14
langgq| | 2014-10-30 09:25 | 只看该作者
才接触,刚刚试了,IO翻转速度为2us左右,怎么提高啊

使用特权

评论回复
15
wangzsa| | 2014-10-30 09:27 | 只看该作者
管脚接错   这个是有可能的    楼主  

使用特权

评论回复
16
lium|  楼主 | 2014-10-30 09:28 | 只看该作者
那我检查下。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

915

主题

9578

帖子

3

粉丝