首页 新闻 会员 周边 捐助

关于树莓派和stm32串口传输问题

0
悬赏园豆:50 [待解决问题]

树莓派上允许的python代码

'''

#!/usr/bin/python3.5
# -*- coding=utf8 -*-

import time
import os
import serial
import json

if __name__ == "__main__":


    ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.2)

    while True:
        # 发送现在时间
        data = time.strftime("%X")
        # /r/n是标识一个数据传输完成
        ser.write((data + "t\r\n").encode("utf8"))

        # 发送现在CPU温度
        temp = os.popen("vcgencmd measure_temp").readline()
        temp = temp.replace("temp=","").replace("'C\n","")
        ser.write(("CPU temp:" + temp + "T\r\n").encode("utf8"))

        # 读取数据
        data = ser.read(100)

'''

stm32单片机上的程序
'''

/**************在OLED上显示时间和CPU温度*******************/
#include "stm32f10x.h"
#include "delay.h"
#include "LED.h"
#include "oled.h"
#include "usart.h"

int main(void)
{   

    u8 buff[200] = {0,0};
    u8 single = 0;
    int len, t;


    delay_init();
    delay_ms(500);
    OLED_Init();
    delay_ms(100);
    delay_ms(100);
    uart_init(115200);
    while(1)
    {

        if(USART_RX_STA&0x8000)
        {           
            len=USART_RX_STA&0x3fff;//得到接收到的数据的长度
            single = USART_RX_BUF[len-1];//得到传输的数据的最后一位判断是传的时间还是温度
            for(t=0;t<len;t++)
            {
                buff[t] = USART_RX_BUF[t];
            }
            buff[len-1] = '\0';     
            USART_RX_STA=0;     

        }
        switch(single)
        {
            /*********显示时间*********/
            case 't': OLED_ShowString(15,12,buff,24);
                break;
            /*********显示温度*****/
            case 'T': OLED_ShowString(20,40,buff,12);
                break;
            default : break;
        }

        OLED_Rec(0, 0, 128, 64, 5);     

    }

}

'''

单片机是通过 传输的数据中 /r/n来判断是否一个数据传输完成,如果不是连续的/r/n则不接收该数据,如果超过200个字符串也把该数据丢弃

现在的问题是如果去掉python中的
'''

        # 读取数据
        data = ser.read(100)

'''
单片机还是可以接收到数据,但是数据会出现错误,不去掉是正常的,这是为什么?

开心的小草的主页 开心的小草 | 菜鸟二级 | 园豆:243
提问于:2019-03-22 11:15
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册