Skip to main content
Visitor II
June 8, 2006
Question

UART Communication

  • June 8, 2006
  • 7 replies
  • 1160 views
Posted on June 08, 2006 at 15:49

UART Communication

    This topic has been closed for replies.

    7 replies

    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 09:29

    Hi Iamanil,

    Have you tried the UART example provided with the software library?

    Regards,

    STARM

    anil23Author
    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 09:29

    Hi STARM,

    The example in the example folder is UART with hardware flow

    control. I'm using the ''None'' option here.

    Also, I’m porting the GPIO 3.2 and 3.3 as UART_RX and UART_TX pins respectively. No connections for RTS and CTS on my project. Please find attached the main.c file and update me with your suggestions

    Regards,

    /******************** (C) COPYRIGHT 2006 STMicroelectronics ********************

    * File Name : main.c

    * Author : MCD Application Team

    * Date First Issued : 05/18/2006 : Version 1.0

    * Description : Main program body

    ********************************************************************************

    * History:

    * 05/24/2006 : Version 1.1

    * 05/18/2006 : Version 1.0

    ********************************************************************************

    * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

    * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.

    * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,

    * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE

    * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING

    * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

    *******************************************************************************/

    /* Includes ------------------------------------------------------------------*/

    #include ''91x_lib.h''

    /* Private typedef -----------------------------------------------------------*/

    /* Private define ------------------------------------------------------------*/

    #define TxBufferSize (countof(TxBuffer) - 1)

    #define RxBufferSize 0xFF

    /* Private macro -------------------------------------------------------------*/

    #define countof(a) (sizeof(a) / sizeof(*(a)))

    /* Private variables ---------------------------------------------------------*/

    UART_InitTypeDef UART_InitStructure;

    u8 TxBuffer[] = ''UART Example1: UART - Hyperterminal\n\r'';

    u8 RxBuffer[RxBufferSize];

    u8 NbrOfDataToTransfer = TxBufferSize;

    u8 TxCounter = 0;

    u8 RxCounter = 0;

    // ****************************************************************

    // Phase Lock Loop (PLL) setting

    // ****************************************************************

    #define PLL_M 4 // M (1 <= M <= 255) value for phase lock loop

    #define PLL_N 192 // N (1 <= N <= 255) value for phase lock loop

    #define PLL_P 3 // P (1 <= P <= 5) value for phase lock loop

    // ****************************************************************

    // clocks divisor setting

    // ****************************************************************

    #define RCLK_Divisor SCU_RCLK_Div1 // Reference clock divisor

    #define HCLK_Divisor SCU_HCLK_Div1 // ARM high speed bus divisor

    #define PCLK_Divisor SCU_PCLK_Div2 // ARM Peripheral bus divisor

    #define FMICLK_Divisor SCU_FMICLK_Div1 // FMI divisor

    /* Private function prototypes -----------------------------------------------*/

    void SCU_Configuration(void);

    void GPIO_Configuration(void);

    /* Private functions ---------------------------------------------------------*/

    /*******************************************************************************

    * Function Name : main

    * Description : Main program

    * Input : None

    * Output : None

    * Return : None

    *******************************************************************************/

    int main()

    {

    u8 i;

    #ifdef DEBUG

    debug();

    #endif

    SCU_MCLKSourceConfig(SCU_MCLK_OSC);

    SCU_PLLFactorsConfig(PLL_N, PLL_M, PLL_P);

    SCU_PLLCmd(ENABLE);

    SCU_MCLKSourceConfig(SCU_MCLK_PLL);

    SCU_RCLKDivisorConfig(RCLK_Divisor);

    SCU_HCLKDivisorConfig(HCLK_Divisor);

    SCU_PCLKDivisorConfig(PCLK_Divisor);

    /* Configure the system clocks */

    SCU_Configuration();

    /* Configure the GPIO ports */

    GPIO_Configuration();

    UART_InitStructure.UART_WordLength = UART_WordLength_8D;

    UART_InitStructure.UART_StopBits = UART_StopBits_1;

    UART_InitStructure.UART_Parity = UART_Parity_No ;

    UART_InitStructure.UART_BaudRate = 115200;

    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;

    UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx;

    UART_InitStructure.UART_FIFO = UART_FIFO_Enable;

    UART_InitStructure.UART_TxFIFOLevel = UART_FIFOLevel_1_2; /* FIFO size 16 bytes, FIFO level 8 bytes */

    UART_InitStructure.UART_RxFIFOLevel = UART_FIFOLevel_1_2; /* FIFO size 16 bytes, FIFO level 8 bytes */

    UART_DeInit(UART1);

    UART_Init(UART1, &UART_InitStructure);

    /* Enable the UART1 */

    UART_Cmd(UART1, ENABLE);

    TxCounter = 0;

    while(NbrOfDataToTransfer--)

    {

    UART_SendData(UART1, TxBuffer[TxCounter++]);

    while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != RESET);

    }

    while (1);

    }

    /*******************************************************************************

    * Function Name : SCU_Configuration

    * Description : Configures the system clocks.

    * Input : None

    * Output : None

    * Return : None

    *******************************************************************************/

    void SCU_Configuration(void)

    {

    /* Enable the UART1 Clock */

    SCU_APBPeriphClockConfig(__UART1, ENABLE);

    SCU_APBPeriphClockConfig(__GPIO3, ENABLE);

    }

    /*******************************************************************************

    * Function Name : GPIO_Configuration

    * Description : Configures the different GPIO ports.

    * Input : None

    * Output : None

    * Return : None

    *******************************************************************************/

    void GPIO_Configuration(void)

    {

    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_DeInit(GPIO3);

    /*Gonfigure UART1_Rx pin GPIO3.2*/

    GPIO_InitStructure.GPIO_Direction = GPIO_PinInput;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;

    GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;

    GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1 ;

    GPIO_Init (GPIO3, &GPIO_InitStructure);

    GPIO_DeInit(GPIO3);

    /*Gonfigure UART1_Tx pin GPIO3.3*/

    GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;

    GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;

    GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2 ;

    GPIO_Init (GPIO3, &GPIO_InitStructure);

    }

    /******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/

    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 09:29

    Hi iamanil,

    After UART1_RX configuration you should not de-initialization GPIO again (after this function you lose the last configuration, in your case you lose UART1_RX configuration)

    so you must remove the second GPIO_DeInit(GPIO3) in your code.

    With best regards,

    Punto

    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 09:29

    Hi iamanil,

    You use UART1 as a transmitter only (you don't use UART_RX pin ) so i suggest to:

    1/remove: Gonfigure UART1_Rx pin GPIO3.2

    2/remplace UART_Mode by:

    UART_InitStructure.UART_Mode = UART_Mode_Tx;

    I think it's better now. ;)

    With best regards,

    Punto.

    anil23Author
    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 09:29

    Hi Punto,

    It’s true that I just had the transmitter part. My intention was to send a test message to the transmitter first and then check for the receiver. Also, there has been an update in my code since my last post. I could get the UART transmitter side of the communication with the HyperTerminal to work. But, it’s just a partial improvement...

    I had changed the hyper terminal setting to 19200 bauds (with baud rate setting in the UART initialization at 115200) and the transmitter works fine.Also, I included the following after the initialization:

    UART_LoopBackConfig(UART1, DISABLE);

    Now, I included the code for receiver and it doesn’t work.

    Please find attached the code.

    Regards,

    /******************** (C) COPYRIGHT 2006 STMicroelectronics ********************

    * File Name : main.c

    * Author : MCD Application Team

    * Date First Issued : 05/18/2006 : Version 1.0

    * Description : Main program body

    ********************************************************************************

    * History:

    * 05/24/2006 : Version 1.1

    * 05/18/2006 : Version 1.0

    ********************************************************************************

    * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

    * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.

    * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,

    * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE

    * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING

    * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

    *******************************************************************************/

    /* Includes ---------------*/

    #include ''91x_lib.h''

    /* Private typedef --------*/

    /* Private define ---------*/

    #define TxBufferSize (countof(TxBuffer) - 1)

    #define RxBufferSize 0xFF

    /* Private macro ----------*/

    #define countof(a) (sizeof(a) / sizeof(*(a)))

    /* Private variables ------*/

    UART_InitTypeDef UART_InitStructure;

    u8 TxBuffer[] = ''UART Example: UART - Hyperterminal\n\r'';

    u8 RxBuffer[RxBufferSize];

    u8 NbrOfDataToTransfer = TxBufferSize;

    u8 TxCounter = 0;

    u8 RxCounter = 0;

    // ****************************************************************

    // Phase Lock Loop (PLL) setting

    // ****************************************************************

    #define PLL_M 4 // M (1 <= M <= 255) value for phase lock loop

    #define PLL_N 192 // N (1 <= N <= 255) value for phase lock loop

    #define PLL_P 3 // P (1 <= P <= 5) value for phase lock loop

    // ****************************************************************

    // clocks divisor setting

    // ****************************************************************

    #define RCLK_Divisor SCU_RCLK_Div1 // Reference clock divisor

    #define HCLK_Divisor SCU_HCLK_Div1 // ARM high speed bus divisor

    #define PCLK_Divisor SCU_PCLK_Div2 // ARM Peripheral bus divisor

    #define FMICLK_Divisor SCU_FMICLK_Div1 // FMI divisor

    /* Private function prototypes -------------*/

    void SCU_Configuration(void);

    void GPIO_Configuration(void);

    /* Private functions ------*/

    /*******************************************************************************

    * Function Name : main

    * Description : Main program

    * Input : None

    * Output : None

    * Return : None

    *******************************************************************************/

    int main()

    {

    u8 i;

    #ifdef DEBUG

    debug();

    #endif

    SCU_MCLKSourceConfig(SCU_MCLK_OSC);

    SCU_PLLFactorsConfig(PLL_N, PLL_M, PLL_P);

    SCU_PLLCmd(ENABLE);

    SCU_MCLKSourceConfig(SCU_MCLK_PLL);

    SCU_RCLKDivisorConfig(RCLK_Divisor);

    SCU_HCLKDivisorConfig(HCLK_Divisor);

    SCU_PCLKDivisorConfig(PCLK_Divisor);

    /* Configure the system clocks */

    SCU_Configuration();

    /* Configure the GPIO ports */

    GPIO_Configuration();

    UART_InitStructure.UART_WordLength = UART_WordLength_8D;

    UART_InitStructure.UART_StopBits = UART_StopBits_1;

    UART_InitStructure.UART_Parity = UART_Parity_No ;

    UART_InitStructure.UART_BaudRate = 115200;

    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;

    UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx;

    UART_InitStructure.UART_FIFO = UART_FIFO_Enable;

    UART_InitStructure.UART_TxFIFOLevel = UART_FIFOLevel_1_2; /* FIFO size 16 bytes, FIFO level 8 bytes */

    UART_InitStructure.UART_RxFIFOLevel = UART_FIFOLevel_1_2; /* FIFO size 16 bytes, FIFO level 8 bytes */

    UART_DeInit(UART1);

    UART_Init(UART1, &UART_InitStructure);

    /* Enable the UART1 */

    UART_Cmd(UART1, ENABLE);

    UART_LoopBackConfig(UART1, DISABLE);

    TxCounter = 0;

    //while(1){

    while(NbrOfDataToTransfer--)

    {

    UART_SendData(UART1, TxBuffer[TxCounter++]);

    while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != RESET);

    }

    for(i=0;i

    NbrOfDataToTransfer = TxBufferSize;

    TxCounter = 0;

    //}

    do

    {

    if((UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)&&(RxCounter < RxBufferSize))

    {

    RxBuffer[RxCounter] = UART1->DR;

    UART_SendData(UART1, RxBuffer[RxCounter++]);

    }

    }while((RxBuffer[RxCounter - 1] != '\r')&&(RxCounter != RxBufferSize));

    while (1);

    }

    /*******************************************************************************

    * Function Name : SCU_Configuration

    * Description : Configures the system clocks.

    * Input : None

    * Output : None

    * Return : None

    *******************************************************************************/

    void SCU_Configuration(void)

    {

    /* Enable the UART1 Clock */

    SCU_APBPeriphClockConfig(__UART1, ENABLE);

    SCU_APBPeriphClockConfig(__GPIO3, ENABLE);

    }

    /*******************************************************************************

    * Function Name : GPIO_Configuration

    * Description : Configures the different GPIO ports.

    * Input : None

    * Output : None

    * Return : None

    *******************************************************************************/

    void GPIO_Configuration(void)

    {

    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_DeInit(GPIO3);

    /*Gonfigure UART1_Rx pin GPIO3.2*/

    GPIO_InitStructure.GPIO_Direction = GPIO_PinInput;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;

    GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;

    GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1 ;

    GPIO_Init (GPIO3, &GPIO_InitStructure);

    GPIO_DeInit(GPIO3);

    /*Gonfigure UART1_Tx pin GPIO3.3*/

    GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;

    GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;

    GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2 ;

    GPIO_Init (GPIO3, &GPIO_InitStructure);

    }

    /******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/

    [ This message was edited by: iamanil on 06-06-2006 16:49 ]

    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 09:29

    Hi iamanil,

    In order to investigate your problem ''Baudrate problem'' could you please send me the number of lib rev(Rev1.0 or Rev1.1)

    With best regards,

    Punto

    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 09:29

    [deleted]- didn't realize this was STR9 forum- found the post via forum search for STR7 UART... weird.

    Steve

    [ This message was edited by: smacmull on 08-06-2006 19:27 ]