CH376 調(diào)試運行

我是在st開發(fā)板上調(diào)試CH376,用的開發(fā)環(huán)境是IAR 5.3,不知道為什么在調(diào)試模式即debug情況下能夠正常檢測U盤并進行相關(guān)操作,可是一旦把程序下載到開發(fā)板上,直接運行就會有問題,檢測不到外接的U盤?謝謝

補充一下,我采用的是并口方式


在板上直接運行速度應(yīng)該比調(diào)試模式快。 1:檢查讀寫時序,將時序降慢一些 2:檢查中斷引腳的配置


我在直接運行時,第一寫命令CMD11_CHECK_EXIST 0x06,然后讀狀態(tài)值就成了0xFF,后來再寫數(shù)據(jù)0x65,值都直接變成了0xFF,真不知道是啥原因。


先發(fā)0X06命令 再發(fā)0X55數(shù)據(jù) 然后讀數(shù)據(jù)。 讀出的數(shù)據(jù)應(yīng)該是0xaa,如果不對,請檢查時序。


如果時序不對,那么Debug調(diào)試運行時應(yīng)該就有問題吧?我現(xiàn)在這些問題都出現(xiàn)在直接運行時,中間延時時間我也增加了,還是不行


如果測試命令不對的話,要么硬件問題,要么時序有問題。 硬件檢查連接看是否有問題。軟件,主要就是時序不對。Debug調(diào)試運行時可能速度比較慢。 可以把你的程序貼出來看看


void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376寫命令 */ { UINT8 i; GPIO_InitTypeDef GPIO_InitStructure; //將8位數(shù)據(jù)IO定義為輸出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC, GPIO_Pin_13); //讀信號無效 GPIO_ResetBits(GPIOC, GPIO_Pin_9); //寫信號生效 GPIO_SetBits(GPIOD, GPIO_Pin_3); //選擇寫地址,A0拉高

CH376_DataIN(mCmd);//向數(shù)據(jù)寄存器發(fā)送命令 mDelaymS(50); GPIO_SetBits(GPIOC, GPIO_Pin_9);//寫無效 GPIO_ResetBits(GPIOD, GPIO_Pin_3);//地址信號拉低

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_ResetBits(GPIOC, GPIO_Pin_13);//讀信號生效 GPIO_SetBits(GPIOC, GPIO_Pin_9);//寫信號無效 GPIO_SetBits(GPIOD, GPIO_Pin_3); //地址A0拉高 mDelaymS(50);

for ( i = 10; i != 0; -- i ) { if ( ( CH376_DataOUT() & PARA_STATE_BUSY ) == 0 ) break; /* 檢查狀態(tài)端口的忙標志位 */ } mDelaymS(2); GPIO_SetBits(GPIOC, GPIO_Pin_13);//讀信號無效 }


讀寫數(shù)據(jù)的函數(shù)與上面類似!麻煩了,謝謝


這個函數(shù)明顯有問題。按照下面的去修改: void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376寫命令 */ { UINT8 i; GPIO_InitTypeDef GPIO_InitStructure; //將8位數(shù)據(jù)IO定義為輸出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOC, &GPIO_InitStructure); CH376_DataIN(mCmd);//向數(shù)據(jù)寄存器發(fā)送命令 GPIO_SetBits(GPIOD, GPIO_Pin_3); //選擇寫地址,A0拉高 GPIO_SetBits(GPIOC, GPIO_Pin_13); //讀信號無效

GPIO_ResetBits(GPIOC, GPIO_Pin_9); //寫信號生效 GPIO_ResetBits(GPIOC, GPIO_Pin_9); //寫信號生效 GPIO_ResetBits(GPIOC, GPIO_Pin_9); //寫信號生效 GPIO_ResetBits(GPIOC, GPIO_Pin_9); //寫信號生效

mDelaymS(50); GPIO_SetBits(GPIOC, GPIO_Pin_9);//寫無效 GPIO_ResetBits(GPIOD, GPIO_Pin_3);//地址信號拉低

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_ResetBits(GPIOC, GPIO_Pin_13);//讀信號生效 GPIO_SetBits(GPIOC, GPIO_Pin_9);//寫信號無效 GPIO_SetBits(GPIOD, GPIO_Pin_3); //地址A0拉高 mDelaymS(50);

for ( i = 10; i != 0; -- i ) { if ( ( CH376_DataOUT() & PARA_STATE_BUSY ) == 0 ) break; /* 檢查狀態(tài)端口的忙標志位 */ } mDelaymS(2); GPIO_SetBits(GPIOC, GPIO_Pin_13);//讀信號無效 }


按照這個改了還是這個情況,debug調(diào)試時還是正常的,全速運行時就處于一直檢測U盤,然后過一會檢測到U盤斷開,然后又發(fā)現(xiàn)U盤,又一直查詢,就這么循環(huán)?


問題解決了,是因為開機后延時時間還是太短,后來我增加延時了個十幾秒然后開機就正常運行了。但是這個時間是不是有點過長了,我開始就是延時100ms,可是就是不行。不過還是謝謝樓上幫忙了,我在時序上也做了一些調(diào)整。


你原來的程序肯定不對,寫數(shù)據(jù)的時候,一定先把數(shù)據(jù)送到端口上,然后寫信號再有效。


另外: 開機延時50ms即可。讓CH375自復(fù)位


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

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