我正在使用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;
我不确定错误在哪里,因为我尝试了多种变体来尝试识别问题,这是我得到的最接近的。我不明白的是什么?任何帮助表示赞赏。
答案 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);