将PB6设置为输入模式(当然你想用外部中断也行),用杜邦线将PB6分别于高低电平相接,若接高电平(3.3v),LED灯就亮,接低电平LED灯就灭
时间: 2023-05-29 17:07:44 浏览: 42
。以下是代码示例:
```c
#include "stm32f10x.h"
void GPIO_Configuration(void);
void EXTI_Configuration(void);
void LED_On(void);
void LED_Off(void);
int main(void)
{
GPIO_Configuration();
EXTI_Configuration();
while(1)
{
// do nothing
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// Enable GPIOB clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// Configure PB6 as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// Enable AFIO clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// Configure EXTI line 6
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource6);
EXTI_InitStructure.EXTI_Line = EXTI_Line6;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
// Enable and set EXTI line 6 interrupt to the lowest priority
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
{
// Check PB6 state
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) == Bit_SET)
{
LED_On();
}
else
{
LED_Off();
}
// Clear interrupt flag
EXTI_ClearITPendingBit(EXTI_Line6);
}
}
void LED_On(void)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
void LED_Off(void)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
```
注意,上述代码使用了外部中断,需要连接PB6到中断线,否则无法触发中断。如果只是简单的检测PB6的电平,可以不使用外部中断,直接轮询GPIO的状态即可。