1、* 1 个 LED 指示灯,对应的 GPIO 为 : PC0 输出为 1 点亮 LED 输出为 0 关闭 LED另外 PC1 为外部中断触发:按键按下时为低电平,即可设置为低电平触发/* GPIO 配置函数 */void GPIO_Configuration(void)/*定义 2 个结构体变量 */GPIO_InitTypeDef GPIO_InitStructure;/*开启 GPIOB,GPIOC ,复用口时钟的 时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2
2、Periph_GPIOC, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/*给 GPIOC_Pin_1 一个初始值 */ GPIO_ResetBits(GPIOC, GPIO_Pin_0);配置 IO 口,初始化 IO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; / 将连接 LED 的 GPIO 设置为推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /设置为 2MHZ 的速度,响应时间,没要求越小越好 GPIO_Mod
3、e_IPU 为输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;/初始化 GPIOCGPIO_Init(GPIOC, /*给 KEY_InitStructure.GPIO_Pin KEY_InitStructure.GPIO_Mode KEY_InitStructure.GPIO_Speed付初始值*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;/设置为上拉输入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU ;/设置为 2MHZ 的速度GPIO_InitStructure.
4、GPIO_Speed = GPIO_Speed_2MHz;/初始化 GPIOBGPIO_Init(GPIOC, /设置 GPIOC 的中断标志位GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource1);/*配置 EXTI*/void EXTI_Configuration(void) /定义一个结构体EXTI_InitTypeDef EXTI_InitStructure;/设置中段线EXTI_InitStructure.EXTI_Line = EXTI_Line1;/使能中断线EXTI_InitStructure.EXTI_LineCm
5、d = ENABLE ;/设置中断模式EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /设置中断触发方式EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;/初始化中断EXTI_Init( /*配置优先级*/void NVIC_Configuration(void) /定义一个结构体NVIC_InitTypeDef NVIC_InitStructure;/设置优先级组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0) ;/设置存入寄存器NVI
6、C_SetVectorTable (NVIC_VectTab_FLASH ,0x0);/设置 外部中断 1 线这里对应的是外部中断 1 因为我选的是之前的 PC1 来触发另外 EXTI5_9_IRQn 则表示外部中断 5-9 线。NVIC_InitStructure.NVIC_IRQChannel =EXTI1_IRQn;/使能优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/配置抢断优先级这个是决定中断跳转可否嵌套的依据*非常重要NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
7、/配置响应优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;/初始化优先级NVIC_Init( /主函数int main(void)/*/调用初始化 GPIO 函数GPIO_Configuration ();EXTI_Configuration ();NVIC_Configuration ();while(1) ;在 it.c 中的程序:void EXTI1_IRQHandler(void) delay_GSM(10000);if( EXTI_GetITStatus (EXTI_Line1) = 1 ) EXTI_ClearITPendingBit (EXTI_Line1); send_gprs_data(GPRMC,1);GPIO_WriteBit(GPIOC,GPIO_Pin_1,Bit_SET);delay_GSM(100000);GPIO_WriteBit(GPIOC,GPIO_Pin_1,Bit_RESET);