[求助] STM32串口问题

A永不言弃A   2015-1-5 09:59 楼主
为什么我的串口能发送数据,但是接收不到数据呢,求大神指导,我是新手
这是我的中断程序,怎么接受不到中断呢,灯没有亮,是串口的问题还是中断的问题?
void USART1_IRQHandler(void)
{
        u8 S;
        u8 D;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                GPIO_SetBits(GPIOC, GPIO_Pin_4);
                delay_ms(500);
                if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
                {
                        USART_SendData(USART1, S);
                        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
                        USART_SendData(USART1, D);
                        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
                        GPIO_SetBits(GPIOC, GPIO_Pin_4);
                }
        }
}

下面是我的寄存器配置,哪里出了问题,求指导

void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
        NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        #ifdef  VECT_TAB_RAM  
                NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
        #else   
                NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
        #endif
}

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO|RCC_APB2Periph_SPI1 |RCC_APB2Periph_USART1, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  //USART1 TxD
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //USART1 RxD
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;  
        GPIO_Init(GPIOA, &GPIO_InitStructure);

回复评论 (1)

             delay_ms(500);
                if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
若usart1中断设定没有错,可能是这2行造成的
点赞  2015-2-2 10:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复