AnsweredAssumed Answered

STM32CubeMX 4.7.1 Make USART2(REMAP_USART2) Code Run Error!

Question asked by wjandsq on May 22, 2015
Latest reply on May 22, 2015 by wjandsq
//--------------------------------------------------------------------------------------------------------------

  /* USER CODE BEGIN USART2_MspInit 0 */


  /* USER CODE END USART2_MspInit 0 */
    /* Peripheral clock enable */
    __USART2_CLK_ENABLE();
  
    /**USART2 GPIO Configuration    
    PD5     ------> USART2_TX
    PD6     ------> USART2_RX 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);


    GPIO_InitStruct.Pin = GPIO_PIN_6;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);


    __HAL_AFIO_REMAP_USART2_ENABLE(); // here STM32F103ZE run error!
  /* System interrupt init*/
    HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USART2_IRQn);
  /* USER CODE BEGIN USART2_MspInit 1 */


  /* USER CODE END USART2_MspInit 1 */

//--------------------------------------------------------------------------------------------------------------

USART2 code run error! but old code is normal! use USE_STDPERIPH_DRIVER lib

//--------------------------------------------------------------------------------------------------------------

   GPIO_InitTypeDef GPIO_InitStructure;
   USART_InitTypeDef USART_InitStructure;

#ifdef  USART2_Remap_PD5_PD6
       /* Configure USART2 GPIO PD5 PD6 */
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);
#else
       /* Configure USART2 GPIO PA2 PA3 */
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
#endif
       /* Configure and enable the USART2 */
       RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
#ifdef  USART2_Remap_PD5_PD6
       /* USART2 TX PD.05 */
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
       GPIO_Init(GPIOD, &GPIO_InitStructure);


       /* USART2 RX PD.06 */
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
       GPIO_Init(GPIOD, &GPIO_InitStructure);


       /*Configure peripheral I/O remapping */
       GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
#else
       /* USART2 TX PA.02 */
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
       GPIO_Init(GPIOA, &GPIO_InitStructure);


       /* USART2 RX PA.03 */
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
       GPIO_Init(GPIOA, &GPIO_InitStructure);
#endif


       USART_InitStructure.USART_BaudRate = linecoding2.bitrate;
       USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
       USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
       USART_Init(USART2, &USART_InitStructure);
       USART_Cmd(USART2, ENABLE);
       USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);     

Outcomes