/**
  * @brief  Start Bit Method to USART AutoBaudRate.
  * @param  None
  * @retval None
  */
static void AutoBauRate_StartBitMethod(void)
{ 
  /* USART enable */
  USART_Cmd(USART1, ENABLE);
  
  /* Configure the AutoBaudRate method */
  USART_AutoBaudRateConfig(USART1, USART_AutoBaudRate_StartBit);
  
  /* Enable AutoBaudRate feature */
  USART_AutoBaudRateCmd(USART1, ENABLE);
  
  /* Wait until Receive enable acknowledge flag is set */
  while(USART_GetFlagStatus(USART1, USART_FLAG_REACK) == RESET)
  {}  
  
  /* Wait until Transmit enable acknowledge flag is set */  
  while(USART_GetFlagStatus(USART1, USART_FLAG_TEACK) == RESET)
  {}  
  
  /* Loop until the end of Autobaudrate phase */
  while(USART_GetFlagStatus(USART1, USART_FLAG_ABRF) == RESET)
  {}  
  
  /* If AutoBaudBate error occurred */
  if (USART_GetFlagStatus(USART1, USART_FLAG_ABRE) != RESET)
  {
    /* Turn on LED3 */
    STM_EVAL_LEDOn(LED3);
  }
  else
  {
    /* Turn on LED2 */
    STM_EVAL_LEDOn(LED2);
    
    /* Wait until RXNE flag is set */
    while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
    {}
    
    /* Wait until TXE flag is set */    
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
    {}
    
    /* Send received character */
    USART_SendData(USART1, USART_ReceiveData(USART1)); 
    
    /* clear the TE bit (if a transmission is on going or a data is in the TDR, it will be sent before
    efectivelly disabling the transmission) */
    USART_DirectionModeCmd(USART1, USART_Mode_Tx, DISABLE);
    
    /* Check the Transfer Complete Flag */
    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
    {}
  }
  
  /* USART Disable */
  USART_Cmd(USART1, DISABLE);
}
Example #2
0
/*====================================================================================================*/
uint16_t UART_AutoBaudRate( USART_TypeDef *USARTx )
{
    USART_AutoBaudRateConfig(USARTx, USART_AutoBaudRate_StartBit);
    USART_AutoBaudRateCmd(USARTx, ENABLE);
    while(USART_GetFlagStatus(USARTx, USART_FLAG_REACK) == RESET);
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TEACK) == RESET);
    while(USART_GetFlagStatus(USARTx, USART_FLAG_ABRF) == RESET);

    if(USART_GetFlagStatus(USARTx, USART_FLAG_ABRE) != RESET)
        return ERROR;
    else
        return (uint16_t)((USARTx->BRR)&0x0000FFFF);
}
Example #3
0
/*
 * init_hw
 * Initialises hardware; pins, LEDs, sensors, etc.
 */
void init_hw(void)
{
    /* Vars */
    GPIO_InitTypeDef GPIO_Init_PD8, GPIO_Init_PD9;
    USART_InitTypeDef USART3_Init;
    int i = 0;

    /* Configure ticks to equal milliseconds (for delays) */
    if (SysTick_Config(SystemCoreClock / 1000)) {
        /* Catch errors using infinite loop */
        while (1);
    }

    /* Easy stuff first; enable LEDs */
    STM_EVAL_LEDInit(LED3);
    STM_EVAL_LEDInit(LED4);
    STM_EVAL_LEDInit(LED5);
    STM_EVAL_LEDInit(LED6);
    STM_EVAL_LEDInit(LED7);
    STM_EVAL_LEDInit(LED8);
    STM_EVAL_LEDInit(LED9);
    STM_EVAL_LEDInit(LED10);

    /* Enable USART3 clock */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

    /* Enable clock on GPIOD pins (for USART3) */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
    
    /* Configure PD8's alternate function.
     * GPIO_AF_7 represents function USART3. */
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_7);

    /* Enable USART3 transmit on pin PD8 */
    GPIO_Init_PD8.GPIO_Pin = GPIO_Pin_8;
    GPIO_Init_PD8.GPIO_Mode = GPIO_Mode_AF;
    GPIO_Init_PD8.GPIO_OType = GPIO_OType_PP;
    GPIO_Init_PD8.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init_PD8.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOD, &GPIO_Init_PD8);
    
    /* Configure PD9's alternate function.
     * GPIO_AF_7 represents function USART3. */
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_7);

    /* Enable USART3 receive on pin PD9 */
    GPIO_Init_PD9.GPIO_Pin = GPIO_Pin_9;
    GPIO_Init_PD9.GPIO_Mode = GPIO_Mode_AF;
    GPIO_Init_PD9.GPIO_OType = GPIO_OType_PP;
    GPIO_Init_PD9.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init_PD9.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOD, &GPIO_Init_PD9);

    /* Configure USART3 */
    USART3_Init.USART_BaudRate = 1000000; // this is auto'd later
    USART3_Init.USART_WordLength = USART_WordLength_8b;
    USART3_Init.USART_StopBits = USART_StopBits_1;
    USART3_Init.USART_Parity = USART_Parity_No;
    USART3_Init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    USART3_Init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    /* Initialise and enable USART3 */
    USART_Init(USART3, &USART3_Init);
    USART_Cmd(USART3, ENABLE);

    /* Enable and configure automatic baud rate */
    USART_AutoBaudRateCmd(USART3, ENABLE);
    USART_AutoBaudRateConfig(USART3, USART_AutoBaudRate_FallingEdge);

    /* Enable user button */
    STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_GPIO);

    /* Turn the LEDs on */
    STM_EVAL_LEDOn(LED3);
    STM_EVAL_LEDOn(LED4);
    STM_EVAL_LEDOn(LED5);
    STM_EVAL_LEDOn(LED6);
    STM_EVAL_LEDOn(LED7);
    STM_EVAL_LEDOn(LED8);
    STM_EVAL_LEDOn(LED9);
    STM_EVAL_LEDOn(LED10);
    
    /* Flash 'em a bit, shows something's happening */
    for (i = 0; i < 3; i++) {
        wait(500);
        STM_EVAL_LEDToggle(LED3);
        STM_EVAL_LEDToggle(LED4);
        STM_EVAL_LEDToggle(LED5);
        STM_EVAL_LEDToggle(LED6);
        STM_EVAL_LEDToggle(LED7);
        STM_EVAL_LEDToggle(LED8);
        STM_EVAL_LEDToggle(LED9);
        STM_EVAL_LEDToggle(LED10);
    }
}
Example #4
0
	int32_t init(USART_TypeDef * USARTxx, GPIO_TypeDef * GPIOx, uint16_t TxPin, uint16_t RxPin, int32_t baudrate)
	{
		this->USARTx = USARTxx;
		#if defined(USART1)
		if( USARTxx == USART1 )
		{
			RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
		}
		#endif
		#if defined(USART2) //TODO: extend
		#endif
		
		#if defined(GPIOA)
		if( GPIOx == GPIOA )
		{
			RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
		}
		#endif
		
		
		GPIO_PinAFConfig(GPIOx, RxPin, GPIO_AF_1);
		GPIO_PinAFConfig(GPIOx, TxPin, GPIO_AF_1);
		
		
		GPIO_InitTypeDef GPIOInit;
		GPIOInit.GPIO_Mode = GPIO_Mode_AF;
		GPIOInit.GPIO_OType = GPIO_OType_PP;
		GPIOInit.GPIO_Pin = RxPin | TxPin;
		GPIOInit.GPIO_PuPd = GPIO_PuPd_UP;
		GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOx,&GPIOInit);
		
		USART_InitTypeDef USARTInit;
		USARTInit.USART_BaudRate = (baudrate == 0 ? 115200 : baudrate);//115200;//9600;
		USARTInit.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
		USARTInit.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
		USARTInit.USART_Parity = USART_Parity_No;
		USARTInit.USART_StopBits = USART_StopBits_1;
		USARTInit.USART_WordLength = USART_WordLength_8b;
		
		USART_Init(USARTxx,&USARTInit);
		
		USART_Cmd(USARTxx, ENABLE);
		
		if( baudrate == 0 )
		{
			while(true)
			{
				USART_AutoBaudRateConfig(USART1, USART_AutoBaudRate_StartBit);
				USART_AutoBaudRateCmd(USART1, ENABLE);
			 
				/* Wait until Receive enable acknowledge flag is set */
				while (USART_GetFlagStatus(USART1, USART_FLAG_REACK) == RESET){}
			 
				/* Wait until Transmit enable acknowledge flag is set */
				while (USART_GetFlagStatus(USART1, USART_FLAG_TEACK) == RESET){}
			 
				/* Loop until the end of Autobaudrate phase */
				while (USART_GetFlagStatus(USART1, USART_FLAG_ABRF) == RESET){}
			 
				/* If AutoBaudRate error occurred */
				if (USART_GetFlagStatus(USART1, USART_FLAG_ABRE) == RESET)
				{
					break;
				}
			}
		}
		return USARTInit.USART_BaudRate;
	}