2014-10-06 45 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

相关问题