找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2942|回复: 0
打印 上一主题 下一主题
收起左侧

stm32外部中断

[复制链接]
跳转到指定楼层
楼主
ID:82083 发表于 2015-6-9 00:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天搞了一下stm32的外部中断,stm32的外部中断是分组的,PA0,PB0,PC0等为一组,PA1,PB1,PC1等为一组,组0,1,2,3,4为独立组,各自可以独立产生中断(同时只能一路进入中断),5-9为一组共用一个中断入口,10-15为一组共用一个中断入口,下面的为按下GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4对应的按钮,那么对应的GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3就会实现电平翻转。
             关键词以标出
  #include"stm32f10x.h"
EXTI_InitTypeDef  EXTI_InitStructure;
GPIO_InitTypeDef  GPIO_InitStructure;
NVIC_InitTypeDef  NVIC_InitStructure;
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//复用

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//上拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1|GPIO_PinSource2|GPIO_PinSource3|GPIO_PinSource4);

  EXTI_InitStructure.EXTI_Line =EXTI_Line1|EXTI_Line2|EXTI_Line3|EXTI_Line4;
  EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;//下降沿
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置为 1组。
  NVIC_InitStructure.NVIC_IRQChannel =EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;//先占优先级越小越高
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;//从优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//
  NVIC_Init(&NVIC_InitStructure);
  NVIC_InitStructure.NVIC_IRQChannel =EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
  NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  NVIC_InitStructure.NVIC_IRQChannel =EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
  NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  NVIC_InitStructure.NVIC_IRQChannel =EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
  NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  GPIO_SetBits(GPIOC,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);
while(1)
{
}
}
void EXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
  {
GPIO_WriteBit(GPIOC,GPIO_Pin_0,1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_0));//电平翻转
}
EXTI_ClearFlag(EXTI_Line1);//清标志位
}
void EXTI4_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line4) != RESET)
  {
GPIO_WriteBit(GPIOC,GPIO_Pin_3,1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3));
}
EXTI_ClearFlag(EXTI_Line4);
}void EXTI2_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line2) != RESET)
  {
GPIO_WriteBit(GPIOC,GPIO_Pin_1,1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1));
}
EXTI_ClearFlag(EXTI_Line2);
}void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3) != RESET)
  {
GPIO_WriteBit(GPIOC,GPIO_Pin_2,1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_2));
}
EXTI_ClearFlag(EXTI_Line3);
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表