树莓派上允许的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)
'''
单片机还是可以接收到数据,但是数据会出现错误,不去掉是正常的,这是为什么?