根据您提供的代码,可以通过修改中断处理函数和LED控制函数来实现所需功能。以下是修改后的代码示例:
#include "stm32f10x.h"void nvic_init(void){NVIC_InitTypeDef nvic_struct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);nvic_struct.NVIC_IRQChannel = EXTI0_IRQn;nvic_struct.NVIC_IRQChannelPreemptionPriority = 1;nvic_struct.NVIC_IRQChannelSubPriority = 0;nvic_struct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_struct);}void exti_init(void){EXTI_InitTypeDef exti_struct;GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);exti_struct.EXTI_Line = EXTI_Line0;exti_struct.EXTI_Mode = EXTI_Mode_Interrupt;exti_struct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;exti_struct.EXTI_LineCmd = ENABLE;EXTI_Init(&exti_struct);}void gpio_init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef gpio_init_struct;// 配置按键KEY1对应的引脚PA0gpio_init_structure.GPIO_Pin = GPIO_Pin_0;gpio_init_structure.GPIO_Mode = GPIO_Mode_IPD; // 按下为高电平GPIO_Init(GPIOA, &gpio_init_structure);// 配置按键KEY2对应的引脚PC13gpio_init_structure.GPIO_Pin = GPIO_Pin_13;gpio_init_structure.GPIO_Mode = GPIO_Mode_IPD; // 按下为高电平GPIO_Init(GPIOC, &gpio_init_structure);// 配置LEDR对应的引脚PB0gpio_init_struct.GPIO_Pin = GPIO_Pin_0;gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz;gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &gpio_init_struct);// 配置LEDB对应的引脚PB1gpio_init_struct.GPIO_Pin = GPIO_Pin_1;gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz;gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &gpio_init_struct);}void LEDR_On(void){GPIO_SetBits(GPIOB,GPIO_Pin_0); // 设置LEDR引脚为高电平,点亮LED灯}void LEDR_Off(void){GPIO_ResetBits(GPIOB,GPIO_Pin_0); // 设置LEDR引脚为低电平,熄灭LED灯}void LEDB_On(void){GPIO_SetBits(GPIOB,GPIO_Pin_1); // 设置LEDB引脚为高电平,点亮LED灯}void LEDB_Off(void){GPIO_ResetBits(GPIOB,GPIO_Pin_1); // 设置LEDB引脚为低电平,熄灭LED灯}// 中断处理函数void EXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 判断是否产生中断线0的中断请求{if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) // 判断KEY1按键是否按下(高电平){LEDR_On(); // 点亮LEDR}EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断线0的中断标志位}}void task3_4(void){nvic_init();exti_init();gpio_init();while(1){// 在这里进行其他任务处理}}
请注意,在以上示例代码中,我们添加了LED控制函数和GPIO初始化函数,并将LEDR和LEDB的引脚分别连接到了PB0和PB1。当KEY1按下时,LEDR会常亮;当KEY2按下时,LEDB会常亮。您可以根据需要进行进一步修改和优化。
内容由零声教学AI助手提供,问题来源于学员提问




