2006-06-08 06:49 AM
2011-05-17 12:29 AM
Hi Iamanil,
Have you tried the UART example provided with the software library? Regards, STARM2011-05-17 12:29 AM
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****/2011-05-17 12:29 AM
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, Punto2011-05-17 12:29 AM
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.2011-05-17 12:29 AM
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 ]2011-05-17 12:29 AM
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, Punto2011-05-17 12:29 AM
[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 ]