串口接收函数全是"?"请问是怎么回事?

2019-07-21 00:30发布

 请教大家一个问题,在调STM32F407的串口4,接收到的数据全是?,请问怎么回事?用的是原子的程序改的 
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
布沙尼神甫
2019-07-22 03:13
1201yuge 发表于 2015-12-28 12:16
应该没什么区别的,把你的程序贴出来看看

#include "sys.h"
#include "usart.h"       
#include <string.h>

#if 1
#pragma import(__use_no_semihosting)            
           
struct __FILE
{
        int handle;

};

FILE __stdout;      

_sys_exit(int x)
{
        x = x;
}

int fputc(int ch, FILE *f)
{      
        while((UART4->SR&0X40)==0);
        UART4->DR = (u8) ch;      
        return ch;
}
#endif
//end
//////////////////////////////////////////////////////////////////



u8 USART_RX_BUF[USART_REC_LEN];   
u16 USART_RX_STA=0;     
  
void UART4_IRQHandler(void)
{
        u8 res;       
        if(UART4->SR&(1<<5))
        {         
                res=UART4->DR;
                if((USART_RX_STA&0x8000)==0)
                {
                        if(USART_RX_STA&0x4000)
                        {
                                if(res!=0x0a)USART_RX_STA=0;
                                else USART_RX_STA|=0x8000;       
                        }else
                        {       
                                if(res==0x0d)USART_RX_STA|=0x4000;
                                else
                                {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
                                }                 
                        }
                }                 
        }
}
#endif                                                                                 

//pclk1
//bound
void uart_init(u32 pclk1,u32 bound)
{           
        float temp;
        u16 mantissa;
        u16 fraction;          
        temp=(float)(pclk1*1000000)/(bound*16);
        mantissa=temp;                               
        fraction=(temp-mantissa)*16;
  mantissa<<=4;
        mantissa+=fraction;
       
        RCC->AHB1ENR|=1<<0;          
        RCC->APB1ENR|=1<<19;                        //U4ê±&#214;óê1&#196;ü
        GPIO_Set(GPIOA,PIN0|PIN1,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA0,PA1,&#184;′ó&#195;1|&#196;ü,é&#207;à-ê&#228;3&#246;
       
        GPIO_AF_Set(GPIOA,0,8);        //PA9,AF7
        GPIO_AF_Set(GPIOA,1,8);//PA10,AF7  
       

        UART4->BRR=mantissa;        
        UART4->CR1&=~(1<<15);
        UART4->CR1|=1<<3;         
#if EN_UART4_RX                         

        UART4->CR1|=1<<2;  
        UART4->CR1|=1<<5;         
        MY_NVIC_Init(3,3,UART4_IRQn,2);
#endif
        UART4->CR1|=1<<13;  
}

void SendString(u8*data)
{
        int t;
        int i;
        t=strlen((const char*)data);
        for(i=0;i<t;i++)
        {
                UART4->DR=data;
                while((UART4->SR&0X40)==0);
        }
}






重新贴了一个干净的






一周热门 更多>