Skip to main content
cmartinez
Visitor II
March 29, 2010
Question

STM32F107

  • March 29, 2010
  • 1 reply
  • 573 views
Posted on March 29, 2010 at 11:48

STM32F107

    This topic has been closed for replies.

    1 reply

    shammi88r
    Visitor II
    April 3, 2013
    Posted on April 03, 2013 at 12:21

    Hello 

    I am working on project that includes the programming of USART and I am using the Board from olimex STM32-P-107 with STM32f107VC and for development of the code i am using openOCD Eclipse by Olimex. 

    I need help I have tried alot for getting the data on the serial port but i am not getting sucessful in that. I want to see the result on the serial terminal or on hyper terminal(Putty) So please can you tell me what is wrong with the programming here is the code:

     void init_USART1(uint32_t baudrate){

    /* This is a concept that has to do with the libraries provided by ST

    * to make development easier the have made up something similar to

    * classes, called TypeDefs, which actually just define the common

    * parameters that every peripheral needs to work correctly

    */

    GPIO_InitTypeDef GPIO_InitStruct;    // this is for the GPIO pins used as TX and RX

    USART_InitTypeDef USART_InitStruct;  // this is for the USART1 initilization

    NVIC_InitTypeDef NVIC_InitStructure; // this is used to configure the NVIC (nested vector interrupt controller)

    /* enable APB1 peripheral clock for USART2

    * note that only USART2 connected to APB1

    * the other USARTs are connected to APB2

    */

    RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

    /* enable the peripheral clock for the pins used by

    * USART2, PB5 for TX and PB6 for RX

    */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);

    /* This sequence sets up the TX and RX pins

    * so they work correctly with the USART2 peripheral

    */

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; // Pins 5 (TX) and 6 (RX) are used

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; // the pins are configured as alternate function so the USART peripheral has access to them

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // this defines the IO speed and has nothing to do with the baudrate!

    GPIO_Init(GPIOD, &GPIO_InitStruct); // now all the values are passed to the GPIO_Init() function which sets the GPIO registers

    GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);   ///Re-map USART, as USART2 is used as alternate pins on PD5/6 */

    /* The RX and TX pins are now connected to their AF

    * so that the USART2 can take over control of the

    * pins

    */

    GPIO_PinLockConfig( GPIOD, GPIO_Pin_5);

    GPIO_PinLockConfig(GPIOD, GPIO_Pin_6);

    /* Now the USART_InitStruct is used to define the

    * properties of USART2

    */

    USART_InitStruct.USART_BaudRate = baudrate; // the baud rate is set to the value we passed into this init function

    USART_InitStruct.USART_WordLength = USART_WordLength_8b;// we want the data frame size to be 8 bits (standard)

    USART_InitStruct.USART_StopBits = USART_StopBits_1; // we want 1 stop bit (standard)

    USART_InitStruct.USART_Parity = USART_Parity_No; // we don't want a parity bit (standard)

    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // we don't want flow control (standard)

    USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // we want to enable the transmitter and the receiver

    USART_Init(USART2, &USART_InitStruct); // again all the properties are passed to the USART_Init function which takes care of all the bit setting

    /* Here the USART2 receive interrupt is enabled

    * and the interrupt controller is configured

    * to jump to the USART2_IRQHandler() function

    * if the USART1 receive interrupt occurs

    */

    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // enable the USART2 receive interrupt

    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; // we want to configure the USART1 interrupts

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// this sets the priority group of the USART1 interrupts

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // this sets the sub priority inside the group

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // the USART1 interrupts are globally enabled

    NVIC_Init(&NVIC_InitStructure); // the properties are passed to the NVIC_Init function which takes care of the low level stuff

    // finally this enables the complete USART2 peripheral

    USART_Cmd(USART2, ENABLE);

    }

    int main(void)

    {

      init_USART1(9600); // initialize USART1 @ 115200 baud

      //unsigned int i = 0;

             //char str[] = ''Welcome to wherever you are\r\n'';

             while(1)

               {

                 while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET); // Wait for Empty

              

                 USART_SendData(USART2, 0x49); // Send 'I'

              

               }

               while(1); // Don't want to exit

             }

    So please help me in the programming.

    thanks in advance