-
串口传输数据
2018-07-11 10:25:02使用WPF开发的利用串口接收数据程序,接收到的串口信息可以使用TTS语音播报出来,解决了串口接收数据不完整的问题。 -
Android USB串口传输数据
2019-06-21 20:02:56之前介绍了485串口传输数据,使用了https://github.com/cepr/android-serialport-api,本节课我们介绍usb串口数据传输。 使用usb串口传输数据的第三方库:https://github.com/mik3y/usb-serial-for-android 一、...前言:
之前介绍了485串口传输数据,使用了https://github.com/cepr/android-serialport-api,本节课我们介绍usb串口数据传输。
使用usb串口传输数据的第三方库:https://github.com/mik3y/usb-serial-for-android
一、集成
1、首先我们下载下来demo,然后找到里面的usbSerialForAndroid这个库,我们可以源码依赖。
2、新建你自己的项目, 然后倒入usbSerialForAndroid这个module,然后在app底下的build.gradle中加入:
compile project(':usbSerialForAndroid')
这时候库就倒进来了, 不过不要忘记改掉库中的compileSdkVersion和buildToolsVersion两个变量,改成跟你建的app下的版本相同。
3、删掉库中作者上传至自己私有服务器的代码, 留以下代码即可:
4、在工程的res下建目录xml, device_filter.xml文件复制到自己的工程, 这一步直接从demo里复制过来就好了
5、在AndroidManifest.xml中添加如下代码:
第一个是添加操作usb串口的权限, 第二个是添加在你要操作usb串口的界面中,意思是当一个usb设备插入后,会通知此activity
二、使用
1、读写
// Find all available drivers from attached devices. UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager); if (availableDrivers.isEmpty()) { return; } // Open a connection to the first available driver. UsbSerialDriver driver = availableDrivers.get(0); UsbDeviceConnection connection = manager.openDevice(driver.getDevice()); if (connection == null) { // You probably need to call UsbManager.requestPermission(driver.getDevice(), ..) return; } // Read some data! Most have just one port (port 0). UsbSerialPort port = driver.getPorts().get(0); try { port.open(connection); port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); byte buffer[] = new byte[16]; int numBytesRead = port.read(buffer, 1000); Log.d(TAG, "Read " + numBytesRead + " bytes."); } catch (IOException e) { // Deal with error. } finally { port.close(); }
2、监听usb
private final ExecutorService mExecutor = Executors.newSingleThreadExecutor(); private SerialInputOutputManager mSerialIoManager; private final SerialInputOutputManager.Listener mListener = new SerialInputOutputManager.Listener() { @Override public void onRunError(Exception e) { Log.d(TAG, "Runner stopped."); } @Override public void onNewData(final byte[] data) { //TODO 新的数据 } }; mSerialIoManager = new SerialInputOutputManager(sPort, mListener);//添加监听 //在新的线程中监听串口的数据变化 mExecutor.submit(mSerialIoManager);
注意:
如果需要接受比较大的数据,有可能会遇到一个问题:数据缓存和接收时间不够,导致数据被覆盖或者丢失,我们就需要修改串口读取缓存了,把 SerialInputOutputManager 中的 READ_WAIT_MILLIS 和 BUFSIZ 改成合适的大小就可以了
-
ADC0832转换代码以及实现串口传输数据代码
2019-05-03 15:28:37ADC0832转换代码以及实现串口传输数据代码 -
python 中Arduino串口传输数据到电脑并保存至excel表格
2020-09-18 13:45:26主要介绍了python Arduino串口传输数据到电脑并保存至excel表格,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 -
串口传输数据通信
2014-08-12 15:42:39操作stm8s 实现串口数据传输便于pc机演示通信和仿真调试操作,提高程序的设计完成效率。 -
python操控串口传输数据
2018-12-07 21:50:09本文档一共整理了六种方案操纵串口数据,希望对大家有所帮助 -
STM32 LoRa无线数传模块 PC通过串口传输数据到单片机
2020-08-16 18:51:59STM32F1单片机,烧录代码后,连接LoRa无线数传模块,在PC上面使用串口助手,通过串口传输数据到单片机串口1,并在LCD显示屏显示STM32 PC通过串口助手无线传输数据到单片机
之前学习了STM32单片机,使用正点原子的精英板、两个TTL 转LoRa 半双工无线数传模块,通过PC机串口助手,向32单片机传输数据,接收数据使用串口1。
无线数传模块
模块的无线通讯部分基于Semtech Sx1276或Sx1278 的LoRa扩频调制技术,内部自动扩频计算和前导CRC 纠错处理。具有超高接收灵敏度和超强抗干扰能力,同等发射功率下比其他无线数传方案通讯距离更远,表现出更低的功耗。
无线数传模块采用STM8L低功耗单片机处理器,用户不需要对模块进行二次开发。支持广播透明传输模式和一对多星型协议组网模式。
引脚说明:
连线架构简图
串口调试助手发送数据
开发板LCD显示:
KEIL工程:
串口初始化函数:
void uart_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟 //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9 //USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 //USART 初始化设置 USART_InitStructure.USART_BaudRate = bound;//串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 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); //初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断 USART_Cmd(USART1, ENABLE); //使能串口1 }
串口1中断处理函数:
void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Res; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { Res =USART_ReceiveData(USART1); //读取接收到的数据 if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(Res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } } } } }
主函数:
#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" int main(void) { u16 t; u16 len; u8 lcd_id[12]; //存放LCD ID字符串 delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为115200 LED_Init(); //LED端口初始化 LCD_Init(); //KEY_Init(); //初始化与按键连接的硬件接口 POINT_COLOR=RED; sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。 LCD_Clear(WHITE); POINT_COLOR=RED; LCD_ShowString(30,40,210,24,24,"Elite STM32F1 ^_^"); LCD_ShowString(30,70,200,16,16,"LoRa"); //低耗远距数传模块 LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,lcd_id); //显示LCD ID LCD_ShowString(30,130,200,12,12,"2020/08/06"); while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 // printf("\r\n您发送的消息为:\r\n\r\n"); // for(t=0;t<len;t++) // { // USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据 // while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 // } // printf("\r\n\r\n");//插入换行 LCD_ShowString(30,150,200,16,16,USART_RX_BUF); USART_RX_STA=0; for(t=0;t<len;t++) { USART_RX_BUF[t]=' '; } } } }
-
串口传输数据的时候为什么传一个AA, 收到的却是2A
2020-05-23 11:44:06一、目的+问题: 1、发现在MFC串口通信模拟按键抬起+对串口进行了封装能检查是否和配置文件的串口信息匹配...1、在串口传输数据的时候为什么传一个0xAA, 收到的却是0x2A????急啊~ https://bbs.csd..目录
①运行发现:当我配置文件中的有了AA串口信号,在MFC中读取时候变为了2A
1、在串口传输数据的时候为什么传一个0xAA, 收到的却是0x2A????急啊~
1、因为之前发现的文章中,代码有缺陷,请参考我另一篇mfc显示串口输入信息
一、目的+问题+解答:
1、发现在MFC串口通信模拟按键抬起+对串口进行了封装能检查是否和配置文件的串口信息匹配https://blog.csdn.net/qq_40544338/article/details/106052715,时候发现:串口传输数据的时候传一个AA, 收到的却是2A
①运行发现:当我配置文件中的有了AA串口信号,在MFC中读取时候变为了2A
②答:
①最终进行判断输入的是不是“2A ”如果是就换成“AA ”,记得有空格
②问了同事,同事大致推导出出可能是超过了某个范围导致的
二、参考:
1、在串口传输数据的时候为什么传一个0xAA, 收到的却是0x2A????急啊~
https://bbs.csdn.net/topics/70283232?list=202511
①总结:待检测
三、总结
1、因为之前发现的文章中,代码有缺陷,请参考我另一篇mfc显示串口输入信息
-
ARM LPC2129 串口传输数据C和汇编程序.rar
2009-04-29 18:08:18ARM LPC2129 串口传输数据C和汇编程序.rar -
51单片机串口传输数据
2020-05-14 23:25:44本次应用两块单片机,互相传输数据,使得各自数码管显示0=F 电路: P30和P31引脚分别为输入输出引脚,P1各引脚分别连接共阴数码管 #include"reg52.h" typedef unsigned char u8; typedef unsigned int u16; u8 smg...本次应用两块单片机,互相传输数据,使得各自数码管显示0=F
电路:
P30和P31引脚分别为输入输出引脚,P1各引脚分别连接共阴数码管#include"reg52.h" typedef unsigned char u8; typedef unsigned int u16; u8 smg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 i) { for(i;i>0;i--){}; } void Usart() { EA=1; ES=1; TR1=1; TMOD=0X20; TH1=0XF3; TL1=0XF3; SCON=0X50; PCON=0X80; } void main() { Usart(); while(1) { u8 i; for(i=0;i<16;i++) { SBUF=smg[i]; while(!TI); TI=0; delay(5000); } } } void Usart_() interrupt 4 { u8 date; date=SBUF; RI=0; P1=date; }
此程序用到串口方式1(八位)中断。单片机接收数据,达到八位,将得到的数据存入SBUF缓存器,并将SCON中的RI位,置1,进入中断。在中断程序中,让P1响应得到的SBUF信号。发送数据为主动发送,只需将需要的数据储存在SBUF中,就可自动发送。(切记TI,RI中断请求需要软件置0)
-
FPGA串口传输数据出现问题。
2019-04-11 17:48:22自己跑了一个别人的代码,通过串口传输到串口助手上。正常应该得到的数据是 如图这样14组计数值。 但我跑出的结果却是 ![图片... -
android usb host实现串口传输数据
2012-07-03 20:13:123.1版本之后支持的usb host API。可以通过usb接口让安卓设备作为主设备来接收来自usb的数据,比如平板上插个单片机,就可以接收单片机的数据了。该程序封装了多个包,实现了该功能。 -
stm32串口传输数据第一个数据被吞_stm32串口发送数据,丢失字节问题分析
2020-12-29 18:54:10STM32 串口 发送 必须 先检测 状态,否则 第一个 字节 无法 发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 ... -
android设备使用usb串口传输数据
2018-06-07 11:19:53https://code.google.com/archive/p/android-serialport-api/另一个是我们这次介绍的开源项目:https://github.com/mik3y/usb-serial-for-android 第一步:获取所有的已插入的串口驱动1 UsbManager manager = ... -
Windows Mobile 6.1通过蓝牙串口传输数据
2014-11-10 20:22:41在开发通过Mobile连接蓝牙串口传输GPS数据时遇到的问题记录一下。 一、蓝牙串口的建立 想在mobile平台上通过蓝牙串口发送数据,遇到过一些问题,在此记录一下,由于在mobile上无法像CE上直接通过代码操作蓝牙去... -
python串口数据采集 保存_python 中Arduino串口传输数据到电脑并保存至excel表格
2021-02-03 12:20:57起因:学校运河杯报了个项目,...因此我用python写了个上位机程序,用pyserial模块实现arduiho和电脑的串口通讯,再用xlwt模块写入excel表格,用time模块获取时间作为excel的文件名。 import xlwtimport timeimpo... -
串口传输数据问题?
2012-03-28 19:26:41单片机用串口传输数据,不加帧头和帧尾,是不是有数据丢失的现象,如果加上帧头和帧尾,是不是就可以解决丢包或者错位的现象了。 -
串口传输数据卡死问题解决方案
2017-06-29 16:06:49http://blog.csdn.net/wuyazhe/article/details/5606276 膜拜大神 -
stm32串口传输数据第一个数据被吞_STM32串口第一个字节丢失问题的分析过程
2020-12-19 10:28:59否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x010x020x030x04..接收端收到的数据为:0x020... -
学习笔记:openmv与STM32串口传输数据的解析程序
2019-10-19 21:37:08学习笔记:openmv与STM32串口传输数据的解析程序 学习初衷 大四毕业设计需要用到openmv与STM32之间的数据传输 由于之前没有学过Python,所以在openmvide编写程序时遇到很多问题。但是不得不说Python是真的好用... -
Windows将下位机串口传输数据存储在txt文件并显示的VS2010工程及exe程序
2018-05-22 20:12:36这是用VS2010+Mscomm控件编程实现了串口调试助手的代码,并能把下位机串口通过串口发送过来的数据存储在电脑F盘的data.txt文件中(具体位置和文件名可自己改),具体一步一步是怎么实现的,可以参考我的博客:... -
python-Arduino串口传输数据到电脑并保存至excel表格
2019-10-15 21:35:19起因:学校运河杯报了个项目...因此我用python写了个上位机程序,用pyserial模块实现arduiho和电脑的串口通讯,再用xlwt模块写入excel表格,用time模块获取时间作为excel的文件名。 复制代码 1 import xlwt 2 impor... -
串口传输数据,带包头,包尾为校验和
2010-04-06 16:04:25内容为ADUC841通过串口与PC机通信。 PC机向单片机发送一组数据,包括包头(55+aa)单片机处理后回传PC机 -
stm32串口传输数据第一个数据被吞_stm32串口中断丢失数据,情况如下,请帮忙解决啊!!!...
2021-01-15 00:36:13想写一个简单的串口通信程序(中断接收pc发送的数据,并随之发送给pc),大概内容如下:初始化USART1和NVIC,USART1_Config();NVIC_Config();中断函数如下:voidUSART1_IRQHandler(vo...想写一个简单的串口通信程序... -
串口传输数据时拔掉串口会有几率导软件崩溃,请教大神!
2018-04-03 21:29:20目前做的软件是通过串口传输数据的,但在传输数据时拔出串口有时会导致软件异常退出,已经加了接收超时处理以及try catch public void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) ...