资源描述
* 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_APB2Periph_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_Mode_IPU为输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//初始化GPIOC
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*给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.GPIO_Speed = GPIO_Speed_2MHz;
//初始化GPIOB
GPIO_Init(GPIOC, &GPIO_InitStructure);
//设置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_LineCmd = ENABLE ;
//设置中断模式
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
//设置中断触发方式
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
//初始化中断
EXTI_Init(&EXTI_InitStructure);
}
/********配置优先级*****************/
void NVIC_Configuration(void)
{
//定义一个结构体
NVIC_InitTypeDef NVIC_InitStructure;
//设置优先级组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0) ;
//设置存入寄存器
NVIC_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;
//配置响应优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
//初始化优先级
NVIC_Init(&NVIC_InitStructure);
}
//主函数
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);
}
}
展开阅读全文