串口接收数据失败

2019-07-14 20:33发布

用USART1进行串口收发数据,始终收不到数据,mcu始终处于闲的状态,我初始化的代码 和main函数代码在下面,望大神指教到底是啥问题???
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_Init(USART1, &USART_InitStructure);        //根据参数初始化串口寄存器
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);       //使能串口中断接收
USART_Cmd(USART1, ENABLE);                //使能串口外设
}
int main(void)
{
SystemInit();     //系统时钟配置
Init_LED();      //各个外设引脚配置
Init_Usart();     //串口引脚配置
Usart_Configuration(115200); //串口配置 设置波特率为115200
while(1)            
{  
  printf("%d",USART1_Receive_Byte());   
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
meimengxing2014
1楼-- · 2019-07-16 00:39
这样肯定是不行的,接收要放到中断里,用一个数组把数据接收下来,然后需要的话把数组读出来,或者不用数组,把接收的数据直接再发回串口
魏小延
2楼-- · 2019-07-16 05:42
 精彩回答 2  元偷偷看……
魏小延
3楼-- · 2019-07-16 06:39
本帖最后由 魏小延 于 2016-8-3 15:12 编辑
meimengxing2014 发表于 2016-8-3 13:54
这样肯定是不行的,接收要放到中断里,用一个数组把数据接收下来,然后需要的话把数组读出来,或者不用数组,把接收的数据直接再发回串口

void Init_NVIC(void)
{         
          NVIC_InitTypeDef NVIC_InitStructure;
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);               
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         
        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);                                                        
}
不知道是哪里的问题始终不进中断??
meimengxing2014
4楼-- · 2019-07-16 10:04
在stm32fxxx.it中添加这个函数,或是在其他文件中添加这个函数,函数名必须是这个,函数内容自己写,注意必须是void返回void参数
void USART1_IRQHandler(void)
{

    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)      
    {
        ComRev_ISR();
    }

    if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
    {   
        USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
    }
}
魏小延
5楼-- · 2019-07-16 14:38
meimengxing2014 发表于 2016-8-3 15:38
是stm32fxxx_it.c,刚才写错了

这个函数我写了,现在的问题是,我检测了一下中断进入状态,始终返回0,但是当我吧RX线拔下来是,就进中断了!而且出不来始终在中断里!

一周热门 更多>