EDA365电子论坛网
标题:
串口c程序接收数据长度总是为0
[打印本页]
作者:
niubility
时间:
2023-3-14 14:10
标题:
串口c程序接收数据长度总是为0
#define _CRT_SECURE_NO_WARNINGS
' ^5 H( T- m; Y% K5 q
#include
- X) A1 b# C; z: M; X6 O6 x9 v" m1 B
#include
7 a1 x1 m( l- \
#include "tchar.h"
& ?# b6 ]4 s0 ~$ [/ {/ S
( m2 V, }4 b3 I. E
#include
6 L( Y) Y- ^+ ?, U& P; r5 j
#include
" a- Q8 V2 c% _2 o- G# K" b
( z) C% ], f0 U0 e4 j
7 a- ?5 D# ], e, p1 \, I1 a& u
int mAIn()
6 |. M: i$ O" ~2 o2 I
{
# E2 ^3 a% ^! x" b5 {
HANDLE hCom1;
$ k9 ]$ D6 ?" s9 A6 q; Q) \4 n }
COMMtiMEOUTS TimeOuts;
6 K1 `( x. h. _1 K
DCB dcb1;
g# z$ u2 V1 }9 F" L6 @
DWORD i ;
/ P1 Z( X3 D; l8 }- |6 d
DWORD wCount =4;
# l. u' N+ P* f0 ]
DWORD wCount1;
6 {+ _2 e5 O: ^; h8 m0 e
0 |: i1 X$ p" |" X9 i% a
0 s6 h2 d: }! O4 x. f$ h
. Q `/ O+ ]$ E6 K* y$ m( I
unsigned char str[8];
6 m; |2 i' K2 `7 o7 }6 d, d- K- C
: e5 G U; N n5 r
hCom1 = CreateFile("COM4",
" D' ]% Q% |6 d S0 Q% L' z
GENERIC_READ | GENERIC_WRITE,
7 J9 k: w- B* i
0,
1 c- T8 m$ b: A4 D# Z
NULL,
% Z! a0 [5 ~: t; I0 g1 ]
OPEN_EXISTING,
; | q& N9 e& ?
0,
2 P5 S3 a$ [: ?7 ]9 n6 Q; L
NULL);
& R( Y2 z- d$ n* Z, J2 D
* ^ U" B1 ^7 t+ E$ w0 F0 {
, ~1 k& ]% p0 D* u- D: B) R
if (hCom1==INVALID_HANDLE_VALUE )
. a3 e) C8 c/ `) b0 J) s) c4 |
{
$ m8 s% `# _3 @! ]
printf("read open failed\n");
( [. u6 D8 R4 x$ ?
6 x; G3 M+ d. _* s8 K
}
! p! V% j, A7 P0 q
else
! t' v1 L% o0 |1 e {
{
# T3 O4 }/ n) t
printf("read open successed\n");
' c6 `( k. i G. l9 |4 r$ o
}
; q! ]% l# ?; i% X9 q
SetupComm(hCom1, 20480, 20480);
( S" ^0 y0 N6 X; |8 {9 m
! Y# Q! N4 S3 L; h' j
//COMMTIMEOUTS TimeOuts;
- a1 I& G2 h' [# R/ f
TimeOuts.ReadIntervalTimeout =100;
6 e: z4 t$ ?* M2 w$ f
TimeOuts.ReadTotalTimeoutMultiplier =500;
% T# b" [# I( C6 e S, k
TimeOuts.ReadTotalTimeoutConstant = 5000;
# t6 e7 @. ^( T9 x3 u' m! G
TimeOuts.WriteTotalTimeoutMultiplier = 500;
' H/ E; p$ M# w" \3 n
TimeOuts.WriteTotalTimeoutConstant = 2000;
* R8 l5 n1 v' N. R7 O; C( J; L
SetCommTimeouts(hCom1, &TimeOuts);
0 _6 o1 r o* ^
) l1 e( L. y L- e- S; T* Z+ E
//DCB dcb1;
3 G. u) y- C* G( }8 T
GetCommState(hCom1, &dcb1);
C9 W9 Q% f- R" P" g, U
dcb1.BaudRate = 115200;
2 t/ [3 d+ t) a0 ]1 c2 }5 E/ q6 B! b/ T
dcb1.ByteSize = 8;//一个字节8bit
& K1 a. E* K8 A% @0 b3 p
dcb1.Parity = NOPARITY;//无校验
( N- m1 r o2 y2 [
dcb1.StopBits = ONESTOPBIT;//1位停止位
9 L+ R8 M; l8 G+ y3 n* Y7 }
dcb1.fParity = FALSE;
; |3 m0 W" J' `9 ^
dcb1.fNull = FALSE;
" P2 ^' X+ [& I0 q# o1 `1 p
SetCommState(hCom1, &dcb1);
! v3 R3 v1 |3 X/ N$ [- W. y, O! y5 v
9 U8 ]' ]; [/ _6 z, o. F
PurgeComm(hCom1, PURGE_TXCLEAR|PURGE_RXCLEAR);
7 v; ^9 j/ Y+ w1 \! t
) x" P0 j0 l2 v; z v! F" A
3 k# a9 v# T. D% M# A# I
if(!ReadFile(hCom1, str, wCount, &wCount1, NULL))
$ t$ }% L: [! W2 m* d/ [
{
' h, P! ]' |# Y- K3 s$ K! [+ M
printf("read failed!");
6 @- C* y% ^9 \
! D6 U0 p) X% Y+ g2 b. s
}
* ]. C0 D, q% T+ y6 i5 W: T
else
/ B% Y8 l6 W" }2 R
{
4 ^) ]) \- R8 ]1 J3 u6 F$ i
printf("read successed!");
+ o+ F2 k) \+ g" e& {1 c6 M
/ ~5 a: A2 E4 ^( Q O: h2 G
7 r& {8 n9 b+ j A
printf("wCount1:%d\n", wCount1);
' K8 S1 q3 K9 r3 ?, I1 \ k, f
8 o+ d( l0 J& W
& B) B5 t4 J1 I9 F8 t! B- t
printf("read data is");
: }/ z4 V: Z3 T
for(i=0;i {
# d9 t' {$ L1 [% G6 b$ K W
/ F$ Z% d6 r0 r7 t
printf("%02X", str);
$ [5 e& U7 B# t
}
" y8 I+ ?+ Q8 U& E1 c
}
+ Y. A' V' {' t* m" g
) G; d ` i) O) V% u8 F
: u$ }" V0 J6 v a
9 a/ }! h5 c5 E' s3 S
1 |- w2 F M# ~
CloseHandle(hCom1);
; l% R S& n- K+ L
+ A' D5 r2 l8 y D
// system("pause");
* e- l7 n( Y; i
: d: L4 I7 j& q$ V9 e* F/ Y2 f
}
7 n3 u; {( B! Q" s6 h: {3 ]5 [
代码贴上来了,wCount1总是为0,不知道哪里出了问题,有没有大佬帮忙看下,感谢。
3 A2 v e4 ~1 C
( w' y: N+ q4 M3 d
* g4 c* b+ {7 o* c+ n
作者:
zhi_hui_zhou
时间:
2023-3-14 15:34
先确定能不能发送数据和接收数据。
作者:
Maskman
时间:
2023-3-14 15:58
想问一下波特率是多少,然后你发的什么数据呢?
作者:
风吹过后
时间:
2023-3-14 16:14
把它和发送代码合成一个c文件它就可以接收,单独的c就不能接收。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2