串口

难道有环形队列串口发送数据就万事大吉了吗

此生再无相见时 提交于 2019-12-03 00:48:38
1.问个问题,下面程序有没有BUG 2.环形队列虽然解决了一开始的中断发送数据覆盖问题,但是呢却引入了新的问题 3.然后看看中断发送 4.想没想明白是什么问题 5.发送数据1 和发送数据2 之间没有延时...... 咱做程序的时候经常碰到各个地方都需要发送串口的数据,但是如果两个发送函数一个先发送完,另一个紧接着就发送了....... 这时候就有问题了,发给一个设备,本来都是正确的数据,但是由于这么一整,数据便成了错的了. 好现在解决这个问题 主要目的就是发送的数据还需要管理一下,让发送的数据之间有时间间隔 好,再加个环形队列 这个环形队列呢,记录要发送的数据个数 现在就有两个环形队列, 一个环形队列数存储数据,就是咱一开始用的 另一个环形队列是存储这次要发送的数据个数 那么每次发送数据变为 然后中断发送里面 Usart1ManageSendDatLen记录的是这次发送的数据个数 发送的时候Usart1ManageSendDatLen -- , 变为0,就说明发完了现在的数据了 发送的数据个数是在定时器里面获取 if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) { if(Usart1ManageSendDatLen>0 && rbCanRead(&Uart1rb)>0)//发送的数据个数大于0 ,环形队列可以读出来数据 {

N76E003之串口

匿名 (未验证) 提交于 2019-12-03 00:39:02
N76E003包含两个具备增强的自动地址识别和帧错误检测功能的全双工串口。由于两个串口的控制位是一样的,为了区分两个串口控制位,串口1的控制位以“_1”结尾(例如SCON_1)。下述详例以串口0为例。 每个串口都有一种同步工作模式:模式0。三种全双工异步模式:模式1,2,和3,这意味着收发可以同时连续进行。串口接收带有接收缓存,意味着在接收的前一个数据在被读取之前,串口就能接收第二个数据。接收和发送都是对SBUF进行操作访问,写入SBUF数据将直接传到发送寄存器,而读取SBUF是访问一个具有独立物理地址的接收寄存器。串口共有4种操作模式,任何一种模式,任何以操作SBUF的指令都将开始一次传输。注意,在使用串口功能前,串口所用管脚P0.7及 P0.6 (RXD 及 TXD引脚) 或者 P0.2及 P1.6 (RXD_1 及 TXD_1)必须先置1。N76E003提供更灵活的管脚配置,可将串口0的TXD及RXD通过UART0PX (AUXR1.2)更改位置。 13.1 ģʽ 0 模式0是与外部设备进行同步通信的方式。在该模式下,串行数据由RXD脚进行收发,而TXD 脚用于产生移位时钟。这种方式下是以半双工的形式进行通信,每帧接收或发送8位数据。数据的最低位被最先发送或接收,波特率设置为FSYS/12(SM2 (SCON.5) 为 0) 或 FSYS/2 (SM2 为 1)

HI3536 启动串口3作为调试串口 其他串口或者海思其他芯片类似处理

匿名 (未验证) 提交于 2019-12-03 00:34:01
由于在项目中 串口0与级联复用,现在需要级联输出,占用了uart0,需要改别的串口作为调试串口 使用单CPU模式下,在主CPU内中启用 uart 2和 uart3 ,‘+’部分为新增内容 1、kernel/linux-3.10.y/arch/arm/mach-hi3536/core.c static struct amba_device *amba_devs[] __initdata = { }; static struct clk_lookup lookups[] = { + /////////////////////////////////新增//////////////////////////////// ///////////////////////////////////////////////////////////////////// kernel/linux-3.10.y/arch/arm/mach-hi3536/include/mach/platform.h kernel/linux-3.10.y/include/linux/amba/bus.h struct clk; struct amba_device { }; 转:http://www.ebaina.com/forum.php?mod=viewthread&tid=23671&highlight=uart

C#串口SerialPort常用属性方法

匿名 (未验证) 提交于 2019-12-03 00:32:02
.BaudRate;获取或设置波特率 .BytesToRead;得到 接收到数据的字节数 .BytesToWrites;得到送往串口的字节数 .DataBits;获取或设置数据位 .IsOpen;获取一个值,判断串口是否打开 .Pariy;获取或设置校验位 .PortName;串口名称 .ReadBufferSize;获取或设置读取数据的缓存大小 .ReadTimeout;读取超时时间 .StopBits;ֹͣλ .NewLine;用于解释通过ReadLine()与WriteLine()的值 .WriteBufferSize;与ReadBufferSize相对 .WriteTimeout;与ReadTimeout相对 方法: .Close();判断串口 .Open();打开串口 .Read(Byte[], int32, int32);读取数据 .Read(Char[], int32, int32); .ReadByte();读取一个字节的数据 .ReadChar();读取一个字符的数据 .ReadLine();一直读取到输入缓冲区的NewLine值:返回string类型 .ReadExisting();读取可用的字节 .ReadTo(string value);读取数据,直到读到该value时停止。 .Write(string);写入数据 .Write(byte[], int32,

windows下打开串口COM10的坑

匿名 (未验证) 提交于 2019-12-03 00:30:01
windows系统下,打开COM10及以上的串口,居然遇到找不到硬件资源的错误,但是同样的代码打开COM1-COM9是没有任何问题的。 用CreateFile()打开串口,如果串口号大于9,会返回INVALID_HANDLE_VALUE错误。 原来打开10以上的COM口,传参数是有讲究的。 HANDLE hCom = CreateFile("\\\\.\\COM10", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); 串口号应修改为"\\\\.\\COM10", 这样的问题在linux系统是没有的。 文章来源: windows下打开串口COM10的坑

arduino串口读取字符串

匿名 (未验证) 提交于 2019-12-03 00:22:01
问题: 想用蓝牙app或者其他传感器 连接到arduino串口,可是串口传来的却是一堆看不懂的数字(图一)怎么办呢? (图一) 解答: 因为发送端发过来的是 UTF-8 字符串,串口每次只读一个字节就打印出来了,所以就出现这种情况,我们要做的就是吧第一次读到的值,和下一次读到值叠加起来,以此类推直到没有数据可读,再打印出来这样我们就能得到想要的数据了!! 例程: 图片版&效果: 文本版: int x ; //缓存函数 String comdata = "" ; //字符串函数 void setup () { Serial . begin ( 9600 ); //打开串口波特率9600 } void loop () { if ( Serial . available () > 0 ) //判读是否串口有数据 { String comdata = "" ; //缓存清零 while ( Serial . available () > 0 ) //循环串口是否有数据 { comdata += char ( Serial . read ()); //叠加数据到comdata delay ( 2 ); //延时等待响应 } if ( comdata . length () > 0 ) //如果comdata有数据 { Serial . println ( comdata ); /

串口通信实现两个单片机之间简单数据数据收发

匿名 (未验证) 提交于 2019-12-03 00:22:01
使用两个单片机开发版,串口3.0与3.1交叉互接,两个开发版分别烧写串口接收,串口发送的单片机程序观察P0端口输出值的变化 ============接收串口的单片机程序=========== #include <reg52.h> #define uchar unsigned char uchar recieve; //接收到的数据存放在该变量中 void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } void UART_init() { TH1 = 0xfd; TL1 = 0xfd; //比特率9600 TR1 = 1; //启动T1定时器 SM0 = 0; SM1 = 1; //串口工作方式1,10位异步,一位起始位,一位停止位,8位数据位 REN = 1; //串口允许接收 //开总中断 //串口中断打开 } /*至此串口配置完成*/ void main() { { recieve=SBUF; //将接收的数据传递给recieve } } ==================发送串口=================== #include <reg52.h> #define uchar unsigned char uchar num=1; //存放要发送的数据 /

C# 串口通讯SerialPort

匿名 (未验证) 提交于 2019-12-03 00:22:01
这个只是对SerialPort进行简单的使用,对串口设备进行简单数据的发送和数据的接收,调用几个方法就可以完成串口的通讯,但是没有设备去实验还是感觉不好的。这里我使用了虚拟串口软件和串口调试助手(用来验证串口是否接收到数据) 使用软件: 虚拟串口软件Virtual Serial Port Driver 7.2 友善串口调试助手 Virtual Serial Port Driver 7.2 这里简单说下虚拟串口软件和串口调试助手的简单使用虚拟串口软件生成串口都是成对生成的,例如生成COM2和COM3两个串口,当对COM2写入数据时,COM3就会接收到写入的数据。对COM3写入数据时COM2也会接收到写入的数据。这样串口的虚拟才有意义。点击Add pair 便可生成虚拟串口。 用户可在串口设置中选择端口,选择好端口后点击开始按钮,便可以对串口进行调试。这里我对生成的两个接口都进行开始调试,以验证实验环境是否搭建成功。 这里可以看到COM2发送消息COM3可接收,COM3发送消息COM2也可以接收到,说明实验环境搭建成功 SerialPort 使用串口最重要的设置就是串口名称PortName和串口波特率BaudRate和绑定串口接收到数据的事件DataReceived。 下来我用串口助手监控COM3串口,用程序实现对COM2串口进行控制。我使用一个线程定时向COM2口发送数据

CH340G U-BOOT阶段乱码

匿名 (未验证) 提交于 2019-12-03 00:22:01
硬件:MT7628 系统:OpenWrt 15.05 串口:CH340G 在硬件重启后进入到U-BOOT阶段串口输出的全部都是乱码,但是进入到内核后串口输出有全部正常了。 在github上看见其他开发者也遇到同样的问题, https://github.com/pepe2k/u-boot_mod/issues/21 CH340这款芯片的波特率有一点点小小偏差,解决方法 方法1、修改u-boot源码 文章来源: CH340G U-BOOT阶段乱码