2016-05-14 50 views
0

我已經做了一些研究,但找不到適合我的問題的解決方案。由於我現在真的沒有任何想法,以及我應該尋找什麼,如何自己解決問題,我想問你。C中的陣列用法

由於我是C新手,我希望這不是一個愚蠢的初學者問題太多,但我真的不知道如何解決它。

雖然試圖讓它去,我界定的問題,下面的代碼:

uint32_t possibleBaudrates[12] = 
     { 
      1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400 
     }; 
uint8_t AT[2] = {'A', 'T'}; 

for(uint8_t i = 0; i < 12; ++i) 
{ 
    UART_SetBaudrate(&UART_0, possibleBaudrates[i], 16); 

    delay(1000000); 

    UART_Transmit(&UART_0, AT, 2); 
}  

給你一些更多的信息,我想配置HC06模塊的波特率。爲了測試這一點,我在智能手機上發送AT到Blueterm。這個問題應該是數組,因爲下面的代碼運作良好(它在我的智能手機寫入12X AT上Blueterm):

uint32_t possibleBaudrates[12] = 
     { 
      1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400 
     }; 
uint8_t AT[2] = {'A', 'T'}; 

for(uint8_t i = 0; i < 12; ++i) 
{ 
    UART_SetBaudrate(&UART_0, 9600, 16); 

    delay(1000000); 

    UART_Transmit(&UART_0, AT, 2); 
} 

我期望在第一個代碼什麼是單一的AT上Blueterm,但我沒有至少有一個錯誤。

編輯:我想我提供的信息太少了,謝謝。 第一個代碼示例的行爲是,Blueterm上沒有打印任何內容。它應該是「AT」一次(HC06模塊的波特率設置爲9600,如果它通過陣列,它應該是9600)

Edit2:它只有問題部分,稍後是應該有這樣的用法,你可以得到在HC06模塊上設置的波特率(如果我沒有連接到Blueterm,「AT」使模塊用「OK」回答,但通過陣列似乎出錯了。 另外提一下,如果波特率是不是9600有什麼印上Blueterm(測試)

EDIT3:我必須道歉,與RAD雷克薩斯的提示,我發現我的代碼另一個問題(似乎是一場誤會Dave4的UART_SetBaudrate Method的方法似乎是在使用一次後設置的,所以

UART_SetBaudrate(&UART_0, 2400, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 9600, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 9600, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 

不會打印blueterm什麼,而

UART_SetBaudrate(&UART_0, 9400, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 2400, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 4800, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 

將提前於blueterm打印3X 「AT」

THX,我現在知道如何去(其中後看錯誤),並提出誤導性問題。

我必須立即完成此問題或刪除或其他?

+0

尋求調試幫助的問題(「**爲什麼不是這個代碼工作?**」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現**所需的最短代碼** 。沒有**明確問題陳述**的問題對其他讀者沒有用處。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Biffen

+0

您是否嘗試過使用9600以外的其他值進行測試? – 2016-05-14 12:54:07

+0

我不知道如何編輯我的問題,謝謝。爲了使行爲清晰,如果我執行第一個代碼示例,它不會在Blueterm上打印任何內容。但如圖所示,第二個代碼示例是在Blueterm上打印12x「AT」(如果波特率爲9600,則應打印它) – Weiter

回答

2

所以,糾正我,如果我錯了。你想要做一個循環,並嘗試發送一個消息與每個可能的波特率,對不對?

如果是這樣,那麼每次在波特率中傳輸的終端波特率時,都會在終端上收到垃圾字符。

您應該將程序設置爲以給定的波特率工作,或者選擇您想要在程序開始時工作的波特率。