Art_Wanger
2016-08-02 03:53
采纳率: 66.7%
浏览 5.0k
已采纳

上位机串口与stm32连接,如何编写上位机代码

想要实现在pc上用串口传递信息给stm32板子,不想用串口调试助手,想直接在dev c++或者vc,vs上运行程序,然后
直接把想要传递的字符串串口传递给板子。希望大神可以帮忙指导,不胜感激,如果能很快解决的话悬赏增加,学生党,求大神指导。也可以发邮箱a4507408789@163.com

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 鱼弦 2016-08-02 04:01
    已采纳
    点赞 打赏 评论
  • 鱼弦 2016-08-02 04:00

    基本功能描述:
    上位机发送指令控制STM32
    情况一:命令为3个字符
    起始符 命令符 结束符 功能
    0x2f 0x34 0xcc 温度数据返回
    0x2f 0x32 0xcc led亮
    0x2f 0x33 0xcc led灭

    我是通过串口中断来实现串口数据的接收的。
    中断程序如下:如果接收到的指令正确,改变全局变量USART_RX_STA 的值,让它等于0x80。
    if(USART_RX_STA != 0x80)
    {
    if(data == 0x2f) //起始符
    {
    memset(RecvBuf, 0, sizeof(RecvBuf));
    RecvBuf[0] = data;
    USART_RX_STA = 0;
    USART_SendData(USART1, data);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
    }
    else if(data == 0x39) //结束符
    {
    if(RecvBuf[0] != 0x2f)
    {
    memset(RecvBuf, 0, sizeof(RecvBuf));
    return;
    }
    RecvBuf[2] = data;
    USART_RX_STA = 0x80;
    USART_SendData(USART1, data);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
    }

    else
    {
    RecvBuf[1] = data;
    USART_SendData(USART1, data);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
    }
    }

    主函数程序:
    while(1)
    {
    if(USART_RX_STA == 0x80)
    {
    switch(RecvBuf[1])
    {
    case 0x30:

       break;
      case 0x31: 
    
      break;
     case 0x32: 
      GPIO_SetBits(GPIOD, GPIO_Pin_2);
     break;
    case 0x33: 
    GPIO_ResetBits(GPIOD, GPIO_Pin_2);
    

    break;
    case 0x34:
    temp=DS18B20_Get_Temp();
    memset(SendBuf, 0, sizeof(SendBuf));
    SendBuf[0] = 0x2f;
    SendBuf[1] = 0x34;
    if(temp<0)
    {
    temp=-temp;
    SendBuf[2] = Number[11];
    }
    else
    {
    SendBuf[2] = Number[10];
    }
    SendBuf[3] = Number[temp/100%10];
    SendBuf[4] = Number[temp/10%10];
    SendBuf[5] = '.';
    SendBuf[6] = Number[temp%10];
    SendBuf[7] = 0x04;
    SendBuf[8] = 0xcc;
    for(i = 0; i < 9; ++i)
    {
    USART_SendData(USART1, SendBuf);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
    }
    break;
    default:
    break;
    }
    USART_RX_STA = 0;
    }
    else
    {
    delay_ms(200);
    }
    }
    }

    
    
    点赞 打赏 评论
  • yuezhu165 2016-08-02 06:14

    以前写的串口程序,可以直接运行,http://download.csdn.net/detail/yunda333/6864449

    点赞 打赏 评论
  • yuezhu165 2016-08-02 06:31

    static char status = 0x00;

    switch(status)
    {
    case 0x00:
        if(0x2F == data)
        {
            recvBuf[0] = 0x2F;
            status = 0x01;
        }
    
        break;
    case 0x01:
        if(0xCC == data)
        {
            status = 0x00;
        } else
        {
            recvBuf[1] = data;
            status = 0x02;
        }
    
        break;
    case 0x02:
        if(0xCC == data)
        {
            recvBuf[2] = 0xCC;
            USART_RX_STA = 0x80;
    
            //data parse
    
            status = 0x00;
        }
        break;
    default:
        break;
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题