请大侠指点迷津,感激不尽!

2019-07-20 14:20发布

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
{
  uint32_t tmpreg = 0x00, apbclock = 0x00;
  uint32_t integerdivider = 0x00;
  uint32_t fractionaldivider = 0x00;
  uint32_t usartxbase = 0;
  RCC_ClocksTypeDef RCC_ClocksStatus;
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate));  
  assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength));
  assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits));
  assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity));
  assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode));
  assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl));
各位大侠请看红 {MOD}部分我的理解是分别定义两个指向typedef struc结构的指针,
USARTx指向
typedef struct
{
  __IO uint16_t SR;
  uint16_t  RESERVED0;
  __IO uint16_t DR;
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
} USART_TypeDef;


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_HardwareFlowCon;                       
} USART_InitTypeDef;

但是为什么在使用这个函数时void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)第一个参数直接输入,但是第二个需要定义一个结构体再使用。我不明白这两个参数都是指向结构体的指针,为什么第一参数不用新定义一个结构体,而第二个需要定义新的结构体。
最后再谢谢大家的耐心解答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。