初级会员

- 积分
- 121
- 金钱
- 121
- 注册时间
- 2018-8-31
- 在线时间
- 31 小时
|
2金钱
/**********************************************************
** 函数名:All_GPIO_Config
** 功能描述: 所有的GPIO口配置放在这里
** 输入参数: 无
** 输出参数: 无
***********************************************************/
void All_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);//使能GPIOA、GPIOB口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
/**********************************************************
** 函数名: EXTI_Config
** 功能描述: 外部中断配置
** 输入参数: 无
** 输出参数: 无
***********************************************************/
void EXTI_Config(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);
EXTI_ClearITPendingBit(EXTI_Line15);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_Line = EXTI_Line15;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
EXTI_ClearITPendingBit(EXTI_Line5);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下升沿触发
EXTI_InitStructure.EXTI_Line = EXTI_Line5;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
/**********************************************************
** 函数名: NVIC_Config
** 功能描述: 中断优先级及分组配置
** 输入参数: 无
** 输出参数: 无
***********************************************************/
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //采用组别2
//中断线5至9共用一个中断EXTI9_5_IRQn
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
////中断线10至15共用一个中断EXTI15_10_IRQn
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/**********************************************************
** 函数名: main
** 功能描述:
** 输入参数: 无
** 输出参数: 无
** 说明:
***********************************************************/
int main(void)
{
SystemInit();
All_GPIO_Config();
EXTI_Config();
NVIC_Config();
EXTI_GenerateSWInterrupt(EXTI_Line8);
GPIOA->BRR=GPIO_Pin_8;
GPIOD->BRR=GPIO_Pin_2;
while(1);
}
/**********************************************************
** 函数名:EXTI15_10_IRQHandler
** 功能描述: 串口中断服务程序
** 输入参数: 无
** 输出参数: 无
** 说明:外部中断线10至15共用一个中断
***********************************************************/
void EXTI15_10_IRQHandler(void)
{
if( EXTI_GetITStatus(EXTI_Line11) != RESET )//判断外部中断线11是否有中断
{
EXTI_ClearITPendingBit(EXTI_Line11);//如果有中断,清除中断标志位
GPIOA->BRR=GPIO_Pin_8;//将PB0置0
GPIOD->BRR=GPIO_Pin_2;//将PB1置0
}
}
/**********************************************************
** 函数名:EXTI9_5_IRQHandler
** 功能描述: 串口中断服务程序
** 输入参数: 无
** 输出参数: 无
** 说明:外部中断线5至9共用一个中断
***********************************************************/
void EXTI9_5_IRQHandler(void)
{
if ( EXTI_GetITStatus(EXTI_Line8) != RESET )//判断外部中断线8是否有中断
{
EXTI_ClearITPendingBit(EXTI_Line8);
GPIOA->BSRR=GPIO_Pin_8;//将PB1置1
GPIOD->BSRR=GPIO_Pin_2;//将PB1置1
}
}
|
|