小弟正在使用comport控件制作一个软件
主要的功能是使用串口发送图片数据到一个LCD上
现在在115200的波特率上已经可以使用了,但速度有一点慢
LCD的厂家有提供一个软件,支持USB转串口,因为屏上有一个CP210x芯片
在电脑上安装举动后,可以支持921600的波特率,可是那个软件经常死掉,所以我尝试自己写一个
现在我写的软件在115200上是可以使用的,但到了921600后,看到LCD屏上显示图片的进度
竟然比115200还要慢,我看了CP210x芯片的资料,说安装那个驱动后,那个虚拟的串口
可以像正常的串口那样使用的,但我做出来的速度竟然比115200还慢,请各位帮忙看看,写屏的代码如下
for j:=0 to Bitmap.Height-1 do
begin
p := Bitmap.ScanLine[j]; {读取当前行的像素颜色}
k := 0;
while k < Bitmap.Width do
begin
Comport1.WriteStr(HexStrToStr('AA 72'+IntToHex(j*800+k,6))); {计算显存首地址}
for l:=k to k+100 do {一祯发送100个像素}
begin
if l >= Bitmap.Width then
break;
Comport1.WriteStr(HexStrToStr(IntToHex((((p[l].rgbtRed shr 3) shl 11)+((p[l].rgbtGreen shr 2) shl 5)+(p[l].rgbtBlue shr 3)),4))); {转换成RGB565}
end;
Comport1.WriteStr(HexStrToStr('CC 33 C3 3C')); {祯结束符}
k := l;
end;
end;
14 个解决方案
#1
1. for l:=k to k+100 do {一祯发送100个像素}
k to k+100, 这发送的不是100个像素, 而是101个像素
2. HexStrToStr函数是怎么写的? 是如何处理 'AA 72'+IntToHex(j*800+k,6)))这样的字符串的?
3. 你给出的代码和串口通讯的波特率没什么关系。
k to k+100, 这发送的不是100个像素, 而是101个像素
2. HexStrToStr函数是怎么写的? 是如何处理 'AA 72'+IntToHex(j*800+k,6)))这样的字符串的?
3. 你给出的代码和串口通讯的波特率没什么关系。
#2
jadeluo你好
1.LCD屏一次可以接收128个像素,所以这里功能上是没有问题,这是我一个低级的错误,
2.代码如下,是串口调试助手DELPHI版里的代码,在这里感谢作者公布代码
3.我使用serialtrace去跟踪过厂家的软件与我的软件,在串口设置上是基本一致的
我的代码如下
1.LCD屏一次可以接收128个像素,所以这里功能上是没有问题,这是我一个低级的错误,
2.代码如下,是串口调试助手DELPHI版里的代码,在这里感谢作者公布代码
function HexStrToStr(const S:string):string;
//16进制字符串转换成字符串
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin //xlh 2006.10.21
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
ts:='$'+S[t]
else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code);
if Code=0 then
Result:=Result+Chr(M);
inc(t,2);
end;
end;
3.我使用serialtrace去跟踪过厂家的软件与我的软件,在串口设置上是基本一致的
我的代码如下
procedure TForm1.Button1Click(Sender: TObject);
begin
ComPort1.ShowSetupDialog;
if Comport1.BaudRate = brCustom then
Comport1.CustomBaudRate := 921600;
Comport1.Timeouts.ReadTotalMultiplier := -1;
Comport1.Timeouts.ReadTotalConstant := -2;
Comport1.Timeouts.WriteTotalMultiplier := 0;
Comport1.Timeouts.WriteTotalConstant := 0;
Comport1.Buffer.InputSize := 4096;
Comport1.Buffer.OutputSize := 2048;
Comport1.EventChar := #26 ;
Comport1.FlowControl.XonChar := #17 ;
Comport1.FlowControl.XoffChar := #19 ;
end;
#3
comport已经不支持这个波特率,即使你改了它的源码,也可能还是不支持。波特率太高的话,可能用到其他一些特别的API。
#4
跟踪,对串口比较关注,虽然没用这个控件。
#5
波特率太高了吧,
把串口当网口用了?
把串口当网口用了?
#6
115200已经很高了!! 再高,RS232传送数据就不太可靠了,极易受干扰了。
再说,COMPORT的确不支持这么高的波特率。
再说,COMPORT的确不支持这么高的波特率。
#7
也在用cport3.1
921600这个波特率的确没用过,倒是用过230400这个波特率,再高就通信不上了
可能跟我下位机有关系.可以修改cport.pas的,我用的结论是ok!
usb转232应该是可以用到460800的,再高可能就不好说了!
921600这个波特率的确没用过,倒是用过230400这个波特率,再高就通信不上了
可能跟我下位机有关系.可以修改cport.pas的,我用的结论是ok!
usb转232应该是可以用到460800的,再高可能就不好说了!
#8
如果芯片支持,还是可以的!
楼主加QQ:272324946
注明:串口
楼主加QQ:272324946
注明:串口
#9
楼主改下cport.pas
在里面的br256000换成br921600
下面的所有出现256000的地方都换成921600
一共好象三处
红色的是其中一处!
最后再把波特率改成921600
ComPort1.BaudRate := br921600;
另我是这样改的
230400测试过,能跟我的下位机通信上,稳定!
在里面的br256000换成br921600
下面的所有出现256000的地方都换成921600
一共好象三处
CBaudRate: array[TBaudRate] of Integer =
(0, CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600,
CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200,
CBR_128000, 921600);
红色的是其中一处!
最后再把波特率改成921600
ComPort1.BaudRate := br921600;
另我是这样改的
230400测试过,能跟我的下位机通信上,稳定!
#10
学习!!!佩服
#11
trlsmax:comport控件哪有。并告诉小弟怎么安装,多谢!!
#12
cport3.1 怎样安装啊?
#13
波特率太高的话要用示波器查你的电脑串口输出信号是否变形了,比如用串口发送$55,用示波器看。
#14
串口通讯,本人比较熟悉。但不熟悉楼主所说的控件。
图片有多大?如果不超过1M,应该很快吧,定义到byte动态数组里面,就是一二秒就传过去了。
图片有多大?如果不超过1M,应该很快吧,定义到byte动态数组里面,就是一二秒就传过去了。
#1
1. for l:=k to k+100 do {一祯发送100个像素}
k to k+100, 这发送的不是100个像素, 而是101个像素
2. HexStrToStr函数是怎么写的? 是如何处理 'AA 72'+IntToHex(j*800+k,6)))这样的字符串的?
3. 你给出的代码和串口通讯的波特率没什么关系。
k to k+100, 这发送的不是100个像素, 而是101个像素
2. HexStrToStr函数是怎么写的? 是如何处理 'AA 72'+IntToHex(j*800+k,6)))这样的字符串的?
3. 你给出的代码和串口通讯的波特率没什么关系。
#2
jadeluo你好
1.LCD屏一次可以接收128个像素,所以这里功能上是没有问题,这是我一个低级的错误,
2.代码如下,是串口调试助手DELPHI版里的代码,在这里感谢作者公布代码
3.我使用serialtrace去跟踪过厂家的软件与我的软件,在串口设置上是基本一致的
我的代码如下
1.LCD屏一次可以接收128个像素,所以这里功能上是没有问题,这是我一个低级的错误,
2.代码如下,是串口调试助手DELPHI版里的代码,在这里感谢作者公布代码
function HexStrToStr(const S:string):string;
//16进制字符串转换成字符串
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin //xlh 2006.10.21
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
ts:='$'+S[t]
else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code);
if Code=0 then
Result:=Result+Chr(M);
inc(t,2);
end;
end;
3.我使用serialtrace去跟踪过厂家的软件与我的软件,在串口设置上是基本一致的
我的代码如下
procedure TForm1.Button1Click(Sender: TObject);
begin
ComPort1.ShowSetupDialog;
if Comport1.BaudRate = brCustom then
Comport1.CustomBaudRate := 921600;
Comport1.Timeouts.ReadTotalMultiplier := -1;
Comport1.Timeouts.ReadTotalConstant := -2;
Comport1.Timeouts.WriteTotalMultiplier := 0;
Comport1.Timeouts.WriteTotalConstant := 0;
Comport1.Buffer.InputSize := 4096;
Comport1.Buffer.OutputSize := 2048;
Comport1.EventChar := #26 ;
Comport1.FlowControl.XonChar := #17 ;
Comport1.FlowControl.XoffChar := #19 ;
end;
#3
comport已经不支持这个波特率,即使你改了它的源码,也可能还是不支持。波特率太高的话,可能用到其他一些特别的API。
#4
跟踪,对串口比较关注,虽然没用这个控件。
#5
波特率太高了吧,
把串口当网口用了?
把串口当网口用了?
#6
115200已经很高了!! 再高,RS232传送数据就不太可靠了,极易受干扰了。
再说,COMPORT的确不支持这么高的波特率。
再说,COMPORT的确不支持这么高的波特率。
#7
也在用cport3.1
921600这个波特率的确没用过,倒是用过230400这个波特率,再高就通信不上了
可能跟我下位机有关系.可以修改cport.pas的,我用的结论是ok!
usb转232应该是可以用到460800的,再高可能就不好说了!
921600这个波特率的确没用过,倒是用过230400这个波特率,再高就通信不上了
可能跟我下位机有关系.可以修改cport.pas的,我用的结论是ok!
usb转232应该是可以用到460800的,再高可能就不好说了!
#8
如果芯片支持,还是可以的!
楼主加QQ:272324946
注明:串口
楼主加QQ:272324946
注明:串口
#9
楼主改下cport.pas
在里面的br256000换成br921600
下面的所有出现256000的地方都换成921600
一共好象三处
红色的是其中一处!
最后再把波特率改成921600
ComPort1.BaudRate := br921600;
另我是这样改的
230400测试过,能跟我的下位机通信上,稳定!
在里面的br256000换成br921600
下面的所有出现256000的地方都换成921600
一共好象三处
CBaudRate: array[TBaudRate] of Integer =
(0, CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600,
CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200,
CBR_128000, 921600);
红色的是其中一处!
最后再把波特率改成921600
ComPort1.BaudRate := br921600;
另我是这样改的
230400测试过,能跟我的下位机通信上,稳定!
#10
学习!!!佩服
#11
trlsmax:comport控件哪有。并告诉小弟怎么安装,多谢!!
#12
cport3.1 怎样安装啊?
#13
波特率太高的话要用示波器查你的电脑串口输出信号是否变形了,比如用串口发送$55,用示波器看。
#14
串口通讯,本人比较熟悉。但不熟悉楼主所说的控件。
图片有多大?如果不超过1M,应该很快吧,定义到byte动态数组里面,就是一二秒就传过去了。
图片有多大?如果不超过1M,应该很快吧,定义到byte动态数组里面,就是一二秒就传过去了。