求助CH372芯片的程序設(shè)計

那是當然的,不同的下位機程序?qū)纳衔粰C程序操作是不一樣的,你還是好好檢查下你的程序吧,如果你要實現(xiàn)和TEST.C一樣的例子程序的話,建議你還是跟蹤下你單片機的程序,不要盲目的修改程序。


當然不是盲目的在修改程序,

目前修改的程序只是將中斷的方式修改為查詢的方式來實現(xiàn)數(shù)據(jù)上傳, 對于這樣的改動,上位機的操作應該是一樣的。


/* CH375中斷服務(wù)程序,使用寄存器組1 */ void __attribute__((interrupt, auto_psv)) _INT1Interrupt(void) { unsigned char InterruptStatus; unsigned char i, length; unsigned char buffer[ 64 ]={0}; xWriteCH376Cmd( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請求 */ InterruptStatus = xReadCH376Data( ); /* 獲取中斷狀態(tài) */ switch ( InterruptStatus ) { /* 分析中斷狀態(tài)處理 */ case USB_INT_EP2_OUT: { /* 批量端點下傳成功 */ xWriteCH376Cmd( CMD_RD_USB_DATA ); /* 從當前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ length = xReadCH376Data( ); /* 首先讀取后續(xù)數(shù)據(jù)長度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = xReadCH376Data( ); /* 接收數(shù)據(jù)包 */ FLAG_SEND_WAIT = 1; /* 測試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機 */ // xWriteCH376Cmd( CMD_WR_USB_DATA7 ); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ // xWriteCH376Data( length ); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ // for ( i = 0; i < length; i ++ ) xWriteCH376Data( ~ buffer[ i ] ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */ break; } case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ xWriteCH376Cmd( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ // FLAG_SEND_WAIT = 1; // xWriteCH376Cmd( CMD_WR_USB_DATA7 ); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ // xWriteCH376Data( 60 ); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ // for ( i = 0; i < 60; i ++ ) xWriteCH376Data( i ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */

break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ xWriteCH376Cmd( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ break; } } }

void main() { unsigned char i; CH376DeviceInit( ); /* 初始化USB設(shè)備模式 */ FLAG_SEND_WAIT = 0; mDelaymS(100); // while(1); while(1) { if(FLAG_SEND_WAIT) { xWriteCH376Cmd( CMD_WR_USB_DATA7 ); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ xWriteCH376Data( 60 ); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ for ( i = 0; i < 60; i ++ ) xWriteCH376Data( i ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */ FLAG_SEND_WAIT = 0; } } }

這個為什么就不能上傳數(shù)據(jù), 我只是更改了數(shù)據(jù)上傳的方式,將在中斷程序里上傳的放到主程序中采用查詢方式進行數(shù)據(jù)上傳,怎么就不行呢


S1-T2-C3250 return data error at 26: 13H (C7H) S1-T2-C3250 return data error at 27: 78H (5DH) S1-T2-C3250 return data error at 28: BFH (9AH) S1-T2-C3250 return data error at 29: 1AH (13H) S1-T2-C3250 return data error at 30: C6H (8AH) S1-T2-C3250 return data error at 31: 9DH (32H) S1-T2-C3250 return data error at 32: 54H (FEH) S1-T2-C3250 return data error at 33: 0CH (7FH) S1-T2-C3250 return data error at 34: A1H (C0H) S1-T2-C3250 return data error at 35: BAH (66H) S1-T2-C3250 return data error at 36: B5H (28H) S1-T2-C3250 return data error at 37: 80H (F7H) S1-T2-C3250 return data error at 38: 40H (B8H) S1-T2-C3250 return data error at 39: A8H (95H) S1-T2-C3250 return data error at 40: 46H (8EH) S1-T2-C3250 return data error at 41: 79H (24H) S1-T2-C3250 return data error at 42: 0BH (4CH) S1-T2-C3250 return data error at 43: E3H (C8H) S1-T2-C3250 return data error at 44: 84H (6CH) S1-T2-C3250 return data error at 45: B4H (6AH) S1-T2-C3250 return data error at 46: 3DH (1EH) S1-T2-C3250 return data error at 47: 65H (A4H) S1-T2-C3250 return data error at 48: 6FH (1FH) S1-T2-C3250 return data error at 49: 60H (BEH) S1-T2-C3250 return data error at 50: B6H (22H) S1-T2-C3250 return data error at 51: 45H (E1H) S1-T2-C3250 return data error at 52: B5H (CEH) S1-T2-C3250 return data error at 53: 9FH (B7H) S1-T2-C3250 return data error at 54: 81H (5DH) S1-T2-C3250 return data error at 55: 0DH (FEH) S1-T3-C3251 return length error: 0 (58),DAH,66H... S1-T0-C3252 return data error at 20: F9H (00H)H... S1-T0-C3252 return data error at 21: 19H (00H) S1-T0-C3252 return data error at 23: 89H (00H) S1-T0-C3252 return data error at 24: 09H (00H) S1-T0-C3252 return data error at 25: C1H (00H) S1-T0-C3252 return data error at 26: 3DH (00H) S1-T0-C3252 return data error at 27: EDH (00H) S1-T0-C3252 return data error at 28: 43H (00H) S1-T0-C3252 return data error at 29: A4H (00H) S1-T0-C3252 return data error at 30: A5H (00H) S1-T0-C3252 return data error at 31: 44H (00H) S1-T0-C3252 return data error at 32: 56H (00H) S1-T0-C3252 return data error at 33: E1H (00H) S1-T0-C3252 return data error at 34: 4AH (00H) S1-T0-C3252 return data error at 36: E0H (00H) S1-T0-C3252 return data error at 37: D3H (00H) S1-T0-C3252 return data error at 38: 8DH (00H) S1-T0-C3252 return data error at 39: B3H (00H) S1-T0-C3252 return data error at 40: 13H (00H) S1-T0-C3252 return data error at 41: 0DH (00H) S1-T0-C3252 return data error at 42: 21H (00H) S1-T0-C3252 return data error at 43: F1H (00H) S1-T0-C3252 return data error at 44: 29H (00H) S1-T0-C3252 return data error at 45: 18H (00H) S1-T0-C3252 return data error at 46: DCH (00H) S1-T0-C3252 return data error at 47: E9H (00H) S1-T0-C3252 return data error at 48: 88H (00H) S1-T0-C3252 return data error at 49: EEH (00H) S1-T0-C3252 return data error at 50: 43H (00H) S1-T0-C3252 return data error at 51: BDH (00H) S1-T3-C3255 return length error: 0 (13),0CH,EDH... S1-T1-C3261 return data error at 32: FFH (FFH)H... S1-T1-C3261 return data error at 33: FFH (FFH) S1-T1-C3261 return data error at 34: FFH (FFH) S1-T1-C3261 return data error at 35: FFH (FFH) S1-T1-C3261 return data error at 36: FFH (FFH) S1-T1-C3261 return data error at 37: FFH (FFH) S1-T1-C3261 return data error at 38: FFH (FFH) S1-T1-C3261 return data error at 39: FFH (FFH) S1-T1-C3261 return data error at 40: FFH (FFH) S1-T1-C3261 return data error at 41: FFH (FFH) S1-T1-C3261 return data error at 42: FFH (FFH) S1-T1-C3261 return data error at 43: FFH (FFH) S1-T1-C3261 return data error at 44: FFH (FFH) S1-T1-C3261 return data error at 45: FFH (FFH) S1-T1-C3261 return data error at 46: FFH (FFH) S1-T1-C3261 return data error at 47: FFH (FFH) S1-T3-C3263 return length error: 0 (26),DAH,6BH... S1-T1-C3265 return data error at 10: FFH (FFH)H... S1-T1-C3265 return data error at 11: FFH (FFH) S1-T1-C3265 return data error at 12: FFH (FFH) S1-T1-C3265 return data error at 13: FFH (FFH) S1-T1-C3265 return data error at 14: FFH (FFH)

我用TEST.EXE程序測試, 這個數(shù)據(jù)可以說明什么問題?


我們TEST例程的功能是:單片機收到PC下傳的數(shù)據(jù)后,把數(shù)據(jù)取反再回傳給PC,你現(xiàn)在程序是這么做的么?你的程序是先下傳,置FLAG_SEND_WAIT為1,然后只會在主程序中上傳一次,因為上傳成功后FLAG_SEND_WAIT沒有置1


SCM 程序就是你說的這樣,先下傳,然后置FLAG_SEND_WAIT為1,然后主程序完成數(shù)據(jù)的上傳,然后再點DEBUG372下傳再下傳一組數(shù)據(jù),再置FLAG_SEND_WAIT為1,繼續(xù)上傳數(shù)據(jù),程序流程就是這樣,應該很清楚吧 但是結(jié)果是 不能完成數(shù)據(jù)的上傳。。 程序的修改唯一的就在于我將中斷服務(wù)程序中取反再上傳的屏蔽了 “ // xWriteCH376Cmd( CMD_WR_USB_DATA7 ); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ // xWriteCH376Data( length ); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ // for ( i = 0; i < length; i ++ ) xWriteCH376Data( ~ buffer[ i ] ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */ ” 而將上傳數(shù)據(jù)修改后放在判斷FLAG_SEND_WAIT為1的程序中, 這樣的程序有問題? if(FLAG_SEND_WAIT) { xWriteCH376Cmd( CMD_WR_USB_DATA7 ); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ xWriteCH376Data( 60 ); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ for ( i = 0; i < 60; i ++ ) xWriteCH376Data( i ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */ FLAG_SEND_WAIT = 0; }


我將下位機程序修改為 TEST.C 一樣的了 用TEST.EXE程序 測試結(jié)果如下: S1-T1-C2485 return data error at 56: FFH (FFH) S1-T1-C2485 return data error at 57: FFH (FFH) S1-T1-C2485 return data error at 58: FFH (FFH) S1-T1-C2485 return data error at 59: FFH (FFH) S1-T1-C2485 return data error at 60: FFH (FFH) S1-T1-C2485 return data error at 61: FFH (FFH) S1-T1-C2485 return data error at 62: FFH (FFH) S1-T1-C2485 return data error at 63: FFH (FFH) S1-T2-C2490 return length error: 0 (19),71H,89H... S1-T1-C2493 return length error: 0 (2)H,FFH,FFH... S1-T2-C2494 return length error: 0 (47),5FH,45H... S1-T3-C2495 return data error at 1: 32H (85H)1H... S1-T3-C2495 return data error at 2: 7FH (27H) S1-T3-C2495 return data error at 3: 24H (72H) S1-T3-C2495 return data error at 4: A0H (2EH) S1-T3-C2495 return data error at 5: BAH (91H) S1-T3-C2495 return data error at 6: 4FH (52H) S1-T3-C2495 return data error at 7: 32H (3FH) S1-T3-C2495 return data error at 8: B4H (16H) S1-T3-C2495 return data error at 9: 7BH (27H) S1-T3-C2495 return data error at 10: CEH (E5H) S1-T3-C2495 return data error at 11: 30H (C7H)

這些是什么意思? 說明什么問題嗎?希望能夠指點


這些說明數(shù)據(jù)或讀取長度出錯,先用DEBUG372調(diào)試,這個調(diào)不通,TEST肯定也調(diào)不通。


我修改為TEST.C程序后,能用DEBUG372調(diào)試通過,端點2上傳和下傳都沒有問題,

但TEST.EXE 是不通的。

還有你忘記回復21樓的問題了


在20樓已經(jīng)說了TEST例程的功能,而你的程序:for ( i = 0; i < 60; i ++ ) xWriteCH376Data( i ); 這是把接收到數(shù)據(jù)取反回傳么?


我說過,已經(jīng)修改為TEST.C的程序 取反回傳了。 并且 DEBUG372調(diào)試上傳和下傳都能通過,數(shù)據(jù)也是取反回傳的正確值。 程序如下: /* CH375中斷服務(wù)程序,使用寄存器組1 */ void __attribute__((interrupt, auto_psv)) _INT1Interrupt(void) { unsigned char InterruptStatus; unsigned char i, length; unsigned char buffer[ 64 ]={0}; xWriteCH376Cmd( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請求 */ InterruptStatus = xReadCH376Data( ); /* 獲取中斷狀態(tài) */ switch ( InterruptStatus ) { /* 分析中斷狀態(tài)處理 */ case USB_INT_EP2_OUT: { /* 批量端點下傳成功 */ xWriteCH376Cmd( CMD_RD_USB_DATA ); /* 從當前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ length = xReadCH376Data( ); /* 首先讀取后續(xù)數(shù)據(jù)長度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = xReadCH376Data( ); /* 接收數(shù)據(jù)包 */ FLAG_SEND_WAIT = 1; /* 測試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機 */ xWriteCH376Cmd( CMD_WR_USB_DATA7 ); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ xWriteCH376Data( length ); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ for ( i = 0; i < length; i ++ ) xWriteCH376Data( ~ buffer[ i ] ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */ break; } case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ xWriteCH376Cmd( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ xWriteCH376Cmd( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ break; } } }

void main() { unsigned char i; CH376DeviceInit( ); /* 初始化USB設(shè)備模式 */ FLAG_SEND_WAIT = 0; mDelaymS(100); while(1); }

但TEST.EXE是不通 現(xiàn)象是22樓。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频