金牌会员
 
- 积分
- 1312
- 金钱
- 1312
- 注册时间
- 2017-3-1
- 在线时间
- 259 小时
|

楼主 |
发表于 2018-7-16 21:37:33
|
显示全部楼层
不好意思,最近有点急事所以耽误了,现在把代码贴出来,然后我把做出的改动说明一下。如下代码红色部分为改变代码,唯一区别在于把红色代码放在函数体外和函数体内而已,但是
实验结果完全不同,所以路过的各位帮忙看看谢谢!
[mw_shl_code=c,true]
int main(void)
{
u16 data_len = 0; //接收的数据长度
u8 i;
//u8 key_select;
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2,只设置一次
uart_init(19200);
//KEY_Init(); //NOTOK 灯只能闪一下
EXIT_Init();
//KEY_Init(); //NOTOK 灯只能闪一下
while(1)
{
}
}
void EXIT_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
KEY_Init(); //OK
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //AFIO 复用IO功能
//KEY_Init(); //OK
//PC5
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
EXTI_InitStructure.EXTI_Line = EXTI_Line5;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//PA15
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);
EXTI_InitStructure.EXTI_Line = EXTI_Line15;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//PA0
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//上升沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//优先级值越小,优先级越高
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //External Line 5 - 9 Interrupts
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //External Line 10 - 15 Interrupts
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //External Line0 Interrupts
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道
NVIC_Init(&NVIC_InitStructure);
//KEY_Init(); //OK
}
void EXTI9_5_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY0 == 0)
{
LED0 = !LED0;
}
EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5上的中断标志位
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY1 == 0)
{
LED1 = !LED1;
}
EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE15上的中断标志位
}
void EXTI0_IRQHandler(void)
{
delay_ms(10); //消抖
if(WK_UP == 1)
{
LED0 = !LED0;
LED1 = !LED1;
}
EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位
}
//PC5 PA15 PA0
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);
//KEY1占用了JTDI
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //JTAG-DP Disabled and SW-DP Enabled
//输入模式不设置速度
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //输入下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
[/mw_shl_code]
|
|