cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F107

cmartinez
Associate
Posted on March 29, 2010 at 11:48

STM32F107

1 REPLY 1
shammi88r
Associate II
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