USART串口中断插着RX线说啥也不进,一拔下来就进去了
下面是
中断函数
void USART1_IRQHandler()
{
printf("successful!!!!\n");
Delay_Ms(1000);
}
中断配置
void Init_NVIC(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
USART配置void Init_Usart(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE); //使能各个端口时钟,重要!!!
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入(复位状态); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOA, &GPIO_InitStructure); //根据参数初始 PIOA寄存器
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //配置端口速度50M
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用功能输出开漏
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //配置串口接收端口挂接到9端口TX
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据参数初始化GPIOA寄存器
}
void Usart_Configuration(uint32_t BaudRate)
{
USART_InitTypeDef USART_InitStructure; //定义一个串口结构体
USART_InitStructure.USART_BaudRate =BaudRate ; //波特率115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //传输过程中使用8位数据
USART_InitStructure.USART_StopBits = USART_StopBits_1; //在帧结尾传输1位停止位
USART_InitStructure.USART_Parity = USART_Parity_No ; //奇偶失能
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流失能
USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //接收和发送模式
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Init(USART1, &USART_InitStructure); //根据参数初始化串口寄存器
USART_Cmd(USART1, ENABLE); //使能串口外设
}
main函数():
int main(void)
{
SystemInit();
Init_Usart();
Usart_Configuration(115200);
Init_NVIC();
Init_LED();
while(1);
while(1)//只要插着RX就始终在这个循环里,一拔下来就跳到中断里
{
LED1=~LED1;
Delay_Ms(200);
}
}
求大神指教,实在不知道哪里出了问题!! |