请问,我在串口中断函数里面加了led的函数,让它发送数据回电脑前led闪烁一下,可电脑发送后只有led亮没有闪,还收不到数据

2019-07-20 19:12发布

请问,我在串口中断函数里面加了led的函数,让它发送数据回电脑前led闪烁一下,可电脑发送后只有led亮没有闪,还收不到数据,仿佛程序就卡在串口中断函数中的GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10)这一行,是怎么回事?是程序问题吗还是别的。想了很久都没想出来,求助。


#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "fengminqi.h"

//ALIENTEK ì½Ë÷ÕßSTM32F407¿a·¢°å êμÑé0
//STM32F41¤3ìÄ£°å-¿aoˉêy°æ±¾
//¼¼êõÖ§3Ö£owww.openedv.com
//ìÔ±|μêÆì£ohttp://eboard.taobao.com
//1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾  
//×÷ÕߣoÕyμãÔ-×ó @ALIENTEK


void My_USART1_Init(void)
{
          GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//ê1ÄüUSART1ê±Öó
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate=115200;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
       
        USART_Init(USART1,&USART_InitStructure);
        USART_Cmd(USART1 ,ENABLE);

        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
       
        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);
       
       
}

void USART1_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART1,USART_IT_RXNE))
        {
                GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
               
                delay_ms(200);
                GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
               
                delay_ms(200);
               
                res=USART_ReceiveData(USART1);
                USART_SendData(USART1,res);

        }

}
int main(void)
{  
        LED_Init();
        FENGMINQI_Init();
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        My_USART1_Init();
        while(1);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
绵延的山峰
1楼-- · 2019-07-21 18:52
对贴友反映强烈的回复,表示高兴,可毕竟我刚学习中断不久,难免懵懵懂懂,中断里面延时的确是找死,我知道错了,我接受,可死也要有个死因啊。毕竟我还是第一次在论坛发帖,不周到之处还请包涵。
Nqsoon
2楼-- · 2019-07-21 21:00
本帖最后由 Nqsoon 于 2016-10-30 12:42 编辑
绵延的山峰 发表于 2016-10-29 16:53
对贴友反映强烈的回复,表示高兴,可毕竟我刚学习中断不久,难免懵懵懂懂,中断里面延时的确是找死,我知道 ...

把自己当成傻子,不懂就问,才能学得更多。

一周热门 更多>