关于树莓派和stm32串口传输问题
时间: 2019-03-22来源:博客园
前景提要
关于树莓派和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 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题

清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行