stm32f207 串口USART无法接收数据

2019-07-21 07:09发布

大家好,我最近在学习STM32f207,最近用到USART,由于板子上只有USART6,所以只能用USART6 ,做实验的时候能发数据,但用超级终端和SSCOM3.2的时候都不能将数据传送给STM32,请问这是怎么回事,下面是代码,我用了查询方式和中断方式都不能让STM32接收数据。
1.主函数部分:
int main(void)
{
         vu16 i = 0;
   RCC_Configuration();
       
         Usart_GPIO_Configuration();
         USART_Configuration();
       
        for(i=0;Txbuffer != ''; i++)
        {
                USART_SendData(USART6, Txbuffer);
                while(USART_GetFlagStatus(USART6, USART_FLAG_TC) == RESET);
        }
       
   while        (1)
         {
                 /* 等待USART6接收数据完毕 */
                 if(USART_GetFlagStatus(USART6, USART_IT_RXNE)  == SET)
                 {
                         /* 向串口发送接收到的数据 */
                         USART_SendData(USART6, USART_ReceiveData(USART6));//
                         while(USART_GetFlagStatus(USART6, USART_FLAG_TC) == RESET);
                         /* 延时短,保证收发稳定性 */
                         for(i=0; i<100; i++);//500
                 }
          }               
}
2.配置部分:
#include "usart.h" void Usart_GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6 , ENABLE);
 
  /* GPIOG Periph clock enable */  
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG, ENABLE);  /*USARTx_TX -> PC6  , USARTx_RX -PC7*/
 GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);//GPIO_Pin_6//GPIO_PinSource6
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6);//GPIO_PinSource7  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 ;
 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(GPIOC, &GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//GPIO_OType_OD;//
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//NOPULL;
 GPIO_Init(GPIOC, &GPIO_InitStructure);
} void USART_Configuration(void)

 /*定义USART初始化结构体 USART_InitStructure*/
 USART_InitTypeDef USART_InitStructure;
 
   USART_InitStructure.USART_BaudRate   = 115200;//;
   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; // Receive and transmit enabled
  
  USART_Init(USART6, &USART_InitStructure);  USART_Cmd(USART6, ENABLE);//使能USART6
 USART_ClearFlag(USART6, USART_FLAG_TC);
}

就是这样,后面调试的时候发现把主函数部分的“ if(USART_GetFlagStatus(USART6, USART_IT_RXNE)  == SET) “改成“ if(USART_GetFlagStatus(USART6, USART_IT_RXNE)  != SET)”时,通过SSCOM3.2可以看到stm32在不停的发送数据,可能是由于收到的空数据,所以发的时候也是空白的,
我在一些地方上能到说是由于要用“回车”作为结束符,但在超级终端里面试了没有效果,请高人指点这是怎么回事
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-21 12:47
代码看似ok哦。
just0511
2楼-- · 2019-07-21 13:03
 精彩回答 2  元偷偷看……
pybieku
3楼-- · 2019-07-21 14:47
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//GPIO_OType_OD;//
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//NOPULL; 

    既然你选择了串口输入(GPIO的AF模式),你就应该讲该管脚设定为GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    试试吧,能收到数据的。
阝东
4楼-- · 2019-07-21 17:18
你好,在吗,我有一些串口的问题想向你请教

一周热门 更多>