ZBLOG

void task2_2() { uint8_t status1 = 0; uint8_t status2 = 0; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); gpio_in(GPIOA, G...

下面是使用中断来实现任务2_2的示例代码:

#include "stm32f10x.h"

uint8_t status1 = 0;
uint8_t status2 = 0;

void EXTI0_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line0) != RESET)
	{
		status1 = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
		EXTI_ClearITPendingBit(EXTI_Line0);
	}
}

void EXTI15_10_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line13) != RESET)
	{
		status2 = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13);
		EXTI_ClearITPendingBit(EXTI_Line13);
	}
}

void LED_Control()
{
	if(status1 == 1 && status2 == 1)
	{
        // 控制LED灯亮/灭
        // LED_R_ON();
        // LED_G_OFF();
        // LED_B_ON();	
    }
    else if(status1 == 1)
    {
    	// 控制LED灯亮/灭
        // LED_R_ON();
        // LED_G_OFF();
        // LED_B_OFF();
    }
    else if(status2 == 1)
    {
    	// 控制LED灯亮/灭
        // LED_R_OFF();
        // LED_G_ON();
        // LED_B_OFF();	
    }
    else
    {
    	// 控制LED灯亮/灭
        // LED_R_OFF();
        // LED_G_OFF();
        // LED_B_ON();		
    }
}

int main()
{	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	gpio_in(GPIOA, GPIO_Pin_0);
	gpio_in(GPIOC, GPIO_Pin_13);
	
	gpio_out(GPIOB, GPIO_Pin_0);
	gpio_out(GPIOB, GPIO_Pin_1);
	gpio_out(GPIOB, GPIO_Pin_5);

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); 
	EXTI_InitTypeDef EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	EXTI_InitStructure.EXTI_Line = EXTI_Line0; //对应按键
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);

	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;   
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;  
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;  
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); 

	// 配置中断线,下降沿触发中断
	EXTI_StructInit(&EXTI_InitStructure);
    EXTI_ClearITPendingBit( EXTI_Line13 );
    EXTI_InitStruct . EXTI_Line= EXTI _ Line13 ;
    EXTI_InitStruct . E XTI _ Mode= E XTI _Mode_Falling ;
    EXT I_InitStruct . E XTI _ Trig ger= E X TI_Trigger_Falling ;
    EXT I_InitStruct . EXTI _LineCmd = ENABLE ; 
    EX T I_I nit (&E XT I_I nitStruct );

	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;   
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;  
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;  
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	while(1)
	{
		LED_Control();
	}
}

上述代码通过配置外部中断和相应的中断处理函数来实现了任务2_2的要求。具体的 LED 控制操作需要根据您的硬件和函数定义进行修改。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9236

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?