2014-10-06 72 views
0

我目前正在學校進行一個項目,在那裏我和我的團隊應該讓遊戲「炸彈人」在STM32F4-Discovery卡上執行(它有一個基於ARM的處理器)。遊戲顯示在連接到發現卡的小型LCD觸摸屏上,觸摸屏也用作遊戲的控制器。該遊戲目前是可玩的,一切都正確執行,你可以獨自玩三個AI角色。遊戲和所有硬件啓動完全由C編寫。如何通過USART將兩個STM32F4-Discovery卡與LCD連接

現在我們決定在遊戲中實現多人遊戲,這意味着我們將有兩個STM32F4-Discovery卡和LCD觸摸屏的設置。每個設置都控制一個玩家在同一個遊戲地圖上。我們應該通過USART連接兩個設置。

我的問題是,我們如何讓這兩個STM32F4-Discovery卡進行通信並顯示相同的遊戲地圖?我試圖谷歌它沒有任何成功,所以我現在轉向你在stackoverflow。

編輯:我根據Unwind提供的信息添加後續問題。

後續問題:

我們得到了很多的,我們可以用它來啓動我們的硬件等,這些文件之一被稱爲STM32F4xx-usart.c預先編寫的文件。它包含一個函數:

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct). 

的USART_InitStruct看起來像這樣(在我們得到了它的代碼是預先定義的 - ):

typedef struct{ 
uint32_t USART_BaudRate; 
uint16_t USART_WordLength; 
uint16_t USART_StopBits; 
uint16_t USART_Parity; 
uint16_t USART_Mode; 
uint16_t USART_HardwareFlowControl; 
} USART_InitTypeDef; 

我猜我將不得不使用這種結構形成兩個新的結構將保存我的主卡和我的奴隸卡的價值。

我的問題是:如何編寫這兩個結構,以便我可以將它傳遞給init_USART()函數? 您不需要提供任何值,只需要提供語法。

我試圖

struct USART1_initStruct{ 
    uint32_t USART_BaudRate; 
    uint16_t USART_WordLength; 
    uint16_t USART_StopBits; 
    uint16_t USART_Parity ; 
    uint16_t USART_Mode ; 
    uint16_t USART_HardwareFlowControl; 
} U1IS = {9600, USART_WordLength_9b, USART_StopBits_1, USART_Parity_No, USART_Mode_Tx, USART_HardwareFlowControl_None}; 

,然後使這個結構的功能,但我得到了一個錯誤:

error: expected expression before 'struct' 
+0

這個問題與主題無關。你只是問如何在c中初始化一個結構體。 – 2014-10-06 18:08:07

回答

0

使板的一個主,和其他的奴隸。

主人(或服務器)的工作是運行遊戲並決定會發生什麼。從屬(或客戶端)的角色是向本地播放器顯示世界視圖,向主播發送輸入並接收遊戲對象的更新。

您也可以將其視爲兩個從站,連接到一個主站,這個主站也恰好與其中一個從站在同一臺物理機器上運行。

這不會很簡單,尤其是因爲它聽起來好像你沒有從一開始就設計這通常有幫助。

+0

感謝您的快速回復。 – Flux 2014-10-06 14:39:13

0
USART_InitTypeDef x; 

x.BaudRate = 9600; 
x.WordLength = USART_WordLength_9b; 

... etc 
USART_Init(USART1,&x); 

看看STM提供的任何示例代碼。

+0

一位朋友也提出了這個問題,我認爲有一種更「乾淨」的方式來做到這一點。謝謝你的迴應,我會堅持這種方式。我想將你和Unwind的答案都標記爲已接受,但我只能選擇一個答案。 – Flux 2014-10-06 22:17:21

+0

這實際上是最乾淨的方式(在C中)。如果你的意思是「更短」,是的,有些方法可以初始化不那麼冗長的結構。但這是自我記錄。你可以立即看到字長是9位。如果我寫了'x.WordLength = 9600',你可以立即看到這是錯誤的。在原始發佈中看到這一點很難。 – 2014-10-07 00:41:47