1.初始化代码
代码如下(示例):
void exit_qt_init()
{
//PC5
//PA15
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);
EXTI_InitStruct.EXTI_Line=EXTI_Line5;
EXTI_InitStruct.EXTI_LineCmd= ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);
EXTI_InitStruct.EXTI_Line=EXTI_Line15;
EXTI_InitStruct.EXTI_LineCmd= ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStruct.NVIC_IRQChannel= EXTI9_5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel= EXTI15_10_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0;
NVIC_Init(&NVIC_InitStruct);
}
2.中断代码
代码如下(示例):
void EXTI9_5_IRQHandler(void)
{
u8 ITStatus;
ITStatus= EXTI_GetITStatus(EXTI_Line5);
if(ITStatus==1)
{
//点灯
//led 亮
GPIO_SetBits( GPIOA, GPIO_Pin_1);
EXTI_ClearITPendingBit(EXTI_Line5);
}
}
void EXTI15_10_IRQHandler(void)
{
u8 ITStatus;
ITStatus= EXTI_GetITStatus(EXTI_Line15);
if(ITStatus==1)
{
//点灯
//led 亮
GPIO_SetBits( GPIOA, GPIO_Pin_1);
EXTI_ClearITPendingBit(EXTI_Line15);
}
}
3.完整代码
#include<stm32f10x.h>
#include <key.h>
void led_init()
{
//LED 指示用
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_1;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void exit_init()
{
//PC5
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
EXTI_InitStruct.EXTI_Line=EXTI_Line5;
EXTI_InitStruct.EXTI_LineCmd= ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStruct.NVIC_IRQChannel= EXTI9_5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0;
NVIC_Init(&NVIC_InitStruct);
}
void exit_qt_init()
{
//PC5
//PA15
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);
EXTI_InitStruct.EXTI_Line=EXTI_Line5;
EXTI_InitStruct.EXTI_LineCmd= ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);
EXTI_InitStruct.EXTI_Line=EXTI_Line15;
EXTI_InitStruct.EXTI_LineCmd= ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStruct.NVIC_IRQChannel= EXTI9_5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel= EXTI15_10_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0;
NVIC_Init(&NVIC_InitStruct);
}
int main()
{
u8 temp;
led_init();
// key_init();
exit_qt_init();
// exit_init();
// GPIO_InitTypeDef GPIO_InitStruct;
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);
// //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
// GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
// GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
// GPIO_Init(GPIOC, &GPIO_InitStruct);
//
LED 指示用
//
// GPIO_InitStruct.GPIO_Pin= GPIO_Pin_1;
// GPIO_InitStruct.GPIO_Mode= GPIO_Mode_Out_PP;
// GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
// GPIO_Init(GPIOA, &GPIO_InitStruct);
while(1)
{
//led 灭
GPIO_ResetBits( GPIOA, GPIO_Pin_1);
// temp=GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_5);
//
// if(temp==0) {
//
// //led 亮
// GPIO_SetBits( GPIOA, GPIO_Pin_1);
//
// }
// else{
//
// //led 灭
//
//
// }
// temp=KEY_Scan(1);
// if(temp==0)
// {
// GPIO_SetBits( GPIOA, GPIO_Pin_1);
// }
//
}
}
void EXTI9_5_IRQHandler(void)
{
u8 ITStatus;
ITStatus= EXTI_GetITStatus(EXTI_Line5);
if(ITStatus==1)
{
//点灯
//led 亮
GPIO_SetBits( GPIOA, GPIO_Pin_1);
EXTI_ClearITPendingBit(EXTI_Line5);
}
}
void EXTI15_10_IRQHandler(void)
{
u8 ITStatus;
ITStatus= EXTI_GetITStatus(EXTI_Line15);
if(ITStatus==1)
{
//点灯
//led 亮
GPIO_SetBits( GPIOA, GPIO_Pin_1);
EXTI_ClearITPendingBit(EXTI_Line15);
}
}
//#include <stm32f10x.h>
//#define BIT(n) (1<<n)
//int main()
//{
// //PC1 配置为推挽输出
// *((unsigned int*)(0x40021000+0x18)) |= 0X00000010;
//
RCC->APB2ENR |= 0X00000010;
// RCC->APB2ENR |= 0X00000020;
//
GPIOC->CRL &= 1111 1111 1111 1111 1111 1111 1111 0000 1111 0X FFFF FF0F
// GPIOC->CRL &= 0XFFFFFF0F;
GPIOC->CRL &= 0000 0000 0000 0000 0000 0000 0011 0000 0X 0000 0030
// GPIOC->CRL |= 0X00000030;
//
// GPIOD->CRL &= 0XFF0FFFFF;
// GPIOD->CRL |= 0X00300000;
//
//
//
// while(1)
// {
//
GPIOC->ODR |= 0X00000002; //给高电平的
GPIOC->ODR &=~ 0X00000002; //给低电平的
GPIOC->ODR &= 0XFFFFFFFD; //给低电平的
//
//
GPIOC->ODR |= 1<<1; //给高电平的 PC1
GPIOC->ODR &= ~(1<<1); //给高电平的 PC1
//
// GPIOC->ODR |= BIT(1); //给高电平的 PC1
// GPIOC->ODR &= ~BIT(1); //给高电平的 PC1
//
// GPIOD->ODR |= BIT(5); //给高电平的 PD1
// GPIOD->ODR &= ~BIT(5); //给高电平的 PD1
//
//
// }
//
//}