你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
any012 提问时间:2016-8-18 17:15 /
本来是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. void NVIC_Configuration(void)
  2. {
  3.         NVIC_InitTypeDef NVIC_InitStructure;
  4.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  5.         
  6.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  7.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  8.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  9.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  10.         NVIC_Init(&NVIC_InitStructure);
  11.         
  12.         NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;
  13.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  14.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  15.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  16.         NVIC_Init(&NVIC_InitStructure);
  17.         
  18.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  19.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  20.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  21.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  22.         NVIC_Init(&NVIC_InitStructure);
  23.         
  24.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  25.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  26.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  27.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  28.         NVIC_Init(&NVIC_InitStructure);
  29.         
  30.         NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
  31.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  32.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  33.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  34.         NVIC_Init(&NVIC_InitStructure);
  35.         
  36.         NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  37.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  38.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  39.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  40.         NVIC_Init(&NVIC_InitStructure);
  41. }
复制代码



中断程序:
  1. void EXTI9_5_IRQHandler(void)
  2. {
  3.         if(EXTI_GetITStatus(EXTI_Line6) != RESET)
  4.         {
  5. //                if(COMP_OK() != 0)
  6. //                        LVDS_EN(0);
  7. //                else
  8. //                {
  9. //                        SPI_I2S_SendData(SPI2, spi2SendBuff[0]);
  10. //                        LVDS_EN(1);
  11. //                }
  12. //                EXTI_ClearITPendingBit(EXTI_Line6);
  13.                 GPIOC->ODR ^= GPIO_Pin_7;
  14.         }
  15. }
复制代码



-----------------------------20160819-------------------------------------
补上GPIO配置:
  1. void GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, 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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  9.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  10.         
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  13.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  14.         
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  17.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  18.         
  19.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  21.         GPIO_Init(GPIOD, &GPIO_InitStructure);
  22.         
  23.         AD7193_CS(ON);
  24.         ADT7310_CS(ON);
  25.         ADG738_CS(ON);
  26.         
  27.         PC6_ExintConfig();
  28. }
复制代码

----------------------20160819-----------------------------
还是没搞定,新建了个工程,只保留定时器和GPIO,测试定时器控制PA0反转,一秒闪一次,没问题。
然后用PC6外部中断控制PA0反转,其他电路给PC6每秒一个脉冲信号(用示波器捕捉到可,确定拉到PC6了),结果灯不亮...
附件为工程文件。
PB4测试.zip (321.83 KB, 下载次数: 10)
收藏 1 评论17 发布时间:2016-8-18 17:15

举报

17个回答
sunnydevil 最优答案 回答时间:2016-8-19 08:28:26
题主是否使能了AFIO时钟
jackeyt 回答时间:2016-8-19 09:01:04
感觉。。这东西还感觉,直接DEBUG不就知道了吗?
回答时间:2016-8-19 09:09:19
楼主,IO有没有进行配置?
any012 回答时间:2016-8-19 10:40:04
sunnydevil 发表于 2016-8-19 08:28
题主是否使能了AFIO时钟

因为用到了SPI2,所以使能了AFIO时钟。
any012 回答时间:2016-8-19 10:40:21
jackeyt 发表于 2016-8-19 09:01
感觉。。这东西还感觉,直接DEBUG不就知道了吗?

没有仿真器...
any012 回答时间:2016-8-19 10:41:00
安 发表于 2016-8-19 09:09
楼主,IO有没有进行配置?

IO配置了,已补上IO配置函数。
回答时间:2016-8-19 11:15:46
看代码没有什么问题,楼主最好是仿真一下。把触发方式改为边沿触发,看看能否进入中断。
any012 回答时间:2016-8-19 11:18:27
安 发表于 2016-8-19 11:15
看代码没有什么问题,楼主最好是仿真一下。把触发方式改为边沿触发,看看能否进入中断。 ...

奈何没有仿真器...
现在的触发方式就是上升沿触发吧?
回答时间:2016-8-19 15:21:18
改成边沿,不管上升沿或者下降沿都会触发的,有没有ST送的开发板,掰下来就是一个仿真器。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 赞一个!

查看全部评分

12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版