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

[复制链接]
1462|4
 楼主| any012 发表于 2016-8-19 16:57 | 显示全部楼层 |阅读模式
本来是PC6是外部来的一个脉冲信号,PC7想输出个相位相反的信号。
想着把PC6设为上升/下降沿中断,然后在中断里判断PC6的状态,以此决定PC7输出是高或低。
结果PC7引脚始终是低电平。已排除PC7引脚配置错误的可能,用定时器中断使PC7一秒反转一次,波形是正常的。

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








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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配置时,没有配置速度...
 楼主| any012 发表于 2016-8-20 11:34 | 显示全部楼层
本帖最后由 any012 于 2016-8-20 11:36 编辑

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

本版积分规则

35

主题

232

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部
0