串口调试助手发送数据显示不出来,求大神帮我看看哪里有问题

2019-08-20 18:16发布

头文件
#ifndef __UART_H
#define __UART_H
#include "sys.h"

#define USART_REC_LEN                          200

extern u8  USART_RX_BUF[USART_REC_LEN];
extern u16 USART_RX_STA;
void UART_Init(u32 bound);
#endif
源文件
#include "uart.h"
u8 USART_RX_BUF[USART_REC_LEN];
u16 USART_RX_STA=0;              

void UART_Init(u32 bound)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;       
  NVIC_InitTypeDef NVIC_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,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_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA,&GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate = bound;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_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_Init(USART1,&USART_InitStructure);

        USART_Cmd(USART1, ENABLE);

        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;               
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                       
        NVIC_Init(&NVIC_InitStructure);       
}

void USART1_IRQHandler(void)
{
  u8 Res;
        if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)
        {
          Res=USART_ReceiveData(USART1);
                if((USART_RX_STA&0x8000)==0)
                {
                  if(USART_RX_STA&0x4000)
                        {
                          if(Res!=0x0a)USART_RX_STA=0;
                                else USART_RX_STA|=0x8000;
                       
                        }else  
                        {
                                USART_RX_BUF[USART_RX_STA&0x3FFF]=Res;
                                USART_RX_STA++;
                                if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
                        }
               
                }
       
        }
}

#include "uart.h"
#include "delay.h"
#include "led.h"

int main(void)
{
        u8 t;
        u8 len;
        u16 times=0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init(168);
        UART_Init(115200);
        LED_Init();

        while(1)
        {
          if(USART_RX_STA&0x8000)
                {
                  len=USART_RX_STA&0x3FFF;
                        for(t=0;t<len;t++)
                        {
                          USART_SendData(USART1,USART_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }
                    USART_RX_STA=0;
                }else
                {
                  times++;
                        if(times%300==0)LED0=!LED0;
                        delay_ms(20);
                }
        }

}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。