'struct'之前的预期表达式 - 错误

时间:2015-04-14 22:46:16

标签: c struct arm uart

我正在使用CrossStudio IDE制作一个简单的函数原型,用于初始化STM32F30x ARM处理器的UART波特率和其他参数。函数原型的目标只是从初始化外设(stm32f30x.c)打印波特率,因此我预期'9600'。而是返回错误“USART_Init'之前的预期表达式”。总共有3个文件:

1) config_uart.c -> Contains the function prototype
2) stm32f30x_usart.c -> Contains Initializing function, which I call from config_uart.c
3) stm32f30x_usart.h -> Contains a prototype for struct definition

Config_uart.c正文

void Comm_Initial (void) {
    typedef struct USART_Init USART_Init;
    void USART_StructInit(USART_InitStruct);
    printf("%d\n", USART_Init->USART_BaudRate);
}

来自stm32f30x_usart.c Body

void USART_StructInit(USART_InitTypeDef* USART_InitStruct)
{
    /* USART_InitStruct members default value */
    USART_InitStruct->USART_BaudRate = 9600;
    USART_InitStruct->USART_WordLength = USART_WordLength_8b;
    USART_InitStruct->USART_StopBits = USART_StopBits_1;
    USART_InitStruct->USART_Parity = USART_Parity_No ;
    USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;
}

来自stm32f30x_usart.h Body

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

我不确定错误在哪里,因为我尝试了多种变体来尝试识别问题,这是我得到的最接近的。我不明白的是什么?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

void Comm_Initial (void) {
    typedef struct USART_Init USART_Init;

我没有在任何地方看到类型struct USART_Init。仍然允许使用typedef,但它指的是不完整的类型。

您的名为USART_InitTypeDef的类型的成员名为USART_BaudRate

    void USART_StructInit(USART_InitStruct);
    printf("%d\n", USART_Init->USART_BaudRate);
}

USART_Init是类型名称。 ->运算符需要指向结构指针或指向联合类型的表达式作为其左操作数。

如果用USART_Init类型的表达式替换USART_InitTypeDef*,那么您应该能够评估表达式。

请注意,%d需要int类型的参数,而不是uint32_t。有几种方法可以打印uint32_t值;最简单的是:

printf("%lu\n", (unsigned long)some_pointer->USART_BaudRate);