按键中断程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
* 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中的程序: