打印
[STM32F1]

串口只能发送不能接收

[复制链接]
5410|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用芯片:STM32F103C8T6

问题1:  串口助手一打开,IO口变为高电平,而且不能输出正常电平。不知道是不是硬件电路原因。
用的是USB转串口,连接的电路如下:

上图中,TXD和TXD-U相连,RXD 和RXD-U相连,然后再接到分别接到STM32的TXD1 、RXD1,如下


问题2:烧程序进去后,利用串口助手调试,发现串口助手接受到的部分数据有丢失且有乱码,且不STM32无法收到串口发送的数据:
程序如下:
int main(void)
{
#ifdef DEBUG
  debug();
#endif
  RCC_Configuration();   //配置系统时钟
  NVIC_Configuration();         //NVIC配置
  GPIO_Configuration();         //GPIO端口配置

  //串口配置: 波特率 115200 数据位 8 停止位 1  奇偶位 NONE  
  USART_InitStructure.USART_BaudRate = 9600;
  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_ITConfig(USART1,USART_IT_RXNE, ENABLE);
  USART_Cmd(USART1, ENABLE);
  GPIO_Write(GPIOB,0xef0f);
  while (1)
  {  
    Uart1_PutString("ST科技推出ARM/STM32带您进入32位处理世界   " ,42 );
    Delay(0x00ffff);
  }
}

void Delay(u32 nCount)
{
for(; nCount != 0 ; nCount--);
}


/*******************************************************************************
* Name  : Uart1_PutString
* Deion : print a string to the uart1
* Input : buf为发送数据的地址 , len为发送字符的个数
*******************************************************************************/
void Uart1_PutString(u8* buf , u8 len)
{   u8 i;
    for(i=0;i<len;i++)
    {
       USART_SendData(USART1,*buf++);
           while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
           Delay(0x0000ff);
    }
}
串口助手情况:

到这里,可以说STM32能够发给串口助手数据,但是这过程有异常。

接下来,试验串口发送数据给STM32让其返回一个信号。程序改动如下:
int main(void)
{
  RCC_Configuration();   //配置系统时钟      
  NVIC_Configuration();         //NVIC配置
  GPIO_Configuration();         //GPIO端口配置

  //串口配置: 波特率 115200 数据位 8 停止位 1  奇偶位 NONE  
  USART_InitStructure.USART_BaudRate = 9600;
  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_ITConfig(USART1,USART_IT_RXNE, ENABLE);
  USART_Cmd(USART1, ENABLE);
  GPIO_Write(GPIOB,0xef0f);
  while (1)
  {  
        if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=RESET)
        {
        USART_ClearFlag(USART1, USART_FLAG_RXNE);
        USART_SendData(USART1,0x0079);
        GPIO_Write(GPIOB,0xfef0);
         while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        }
  }
}
这次是用串口助手给STM32发数据,但是STM32不能及时将79发给串口小助手了。。。
搞了很长时间,都不明白是怎么回事。不知道是硬件原因还是程序问题。
希望大家帮忙看下,在此谢谢





沙发
guanyanqin1992|  楼主 | 2014-8-23 18:44 | 只看该作者
自顶

使用特权

评论回复
板凳
linxiaotuzi| | 2014-8-24 16:22 | 只看该作者
是不是中断没配置好呀

使用特权

评论回复
地板
guanyanqin1992|  楼主 | 2014-8-24 20:36 | 只看该作者
linxiaotuzi 发表于 2014-8-24 16:22
是不是中断没配置好呀

我是先用查询方法,但是好像收不到数据。。

使用特权

评论回复
5
大帅10001| | 2017-4-19 21:06 | 只看该作者
请问解决了吗?我用串口调试助手发stm32能接到~stm32发的在调试助手中不显示是什么原因~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

275

帖子

4

粉丝