打印
[STM32]

写了个STM32的程序,感觉没有进外部中断。

[复制链接]
1260|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
any012|  楼主 | 2016-8-19 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本来是PC6是外部来的一个脉冲信号,PC7想输出个相位相反的信号。
想着把PC6设为上升/下降沿中断,然后在中断里判断PC6的状态,以此决定PC7输出是高或低。
结果PC7引脚始终是低电平。已排除PC7引脚配置错误的可能,用定时器中断使PC7一秒反转一次,波形是正常的。

然后就改PC6为上升沿中断,中断里将PC7反转一次。结果PC7仍未低电平。
求坛友看看PC6的配置程序和中断程序,是否有问题?
PC6配置程序:
void PC6_ExintConfig(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
        EXTI_InitStructure.EXTI_Line = EXTI_Line6;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
}
NVIC配置:
oid NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
中断程序:
void EXTI9_5_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line6) != RESET)
        {
                GPIOC->ODR ^= GPIO_Pin_7;
                GPIOA->ODR ^= GPIO_Pin_1;
                EXTI_ClearITPendingBit(EXTI_Line6);
        }
}
GPIO配置:
void GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        PC6_ExintConfig();
}






PB4测试.zip (321.83 KB)

相关帖子

沙发
xyz549040622| | 2016-8-20 08:49 | 只看该作者
单看程序,没找到错误的地方。你PC6改成上拉或者下拉模式看看。

使用特权

评论回复
板凳
any012|  楼主 | 2016-8-20 08:59 | 只看该作者
xyz549040622 发表于 2016-8-20 08:49
单看程序,没找到错误的地方。你PC6改成上拉或者下拉模式看看。

感谢,现在外部有个10K的上拉电阻,并且可以在PC6引脚上观测到每秒一次的脉冲。
一会去试试把PC6配置成上拉或下拉模式。

使用特权

评论回复
地板
any012|  楼主 | 2016-8-20 11:13 | 只看该作者
和上下拉没关系,现在问题解决了,好象是IO配置时,没有配置速度...

使用特权

评论回复
5
any012|  楼主 | 2016-8-20 11:34 | 只看该作者
本帖最后由 any012 于 2016-8-20 11:36 编辑

在这个页面上传的这个工程,是因为没有配置IO口的输出速度,所以没看到灯的亮灭,其实是进入中断了。
又回到之前的程序,发现IO口配置了输出速度,但还是没输出波形,仔细对比了下两个工程,发现是AFIO时钟没有打开的原因。

使用特权

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

本版积分规则

35

主题

232

帖子

6

粉丝