Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Lab05 - Hardware initialization

This exercise deals with NUCLEO I/O initialization of the User LED and User Button. The exercise also deals with usage of these resources. The definition of the LED and Button connection is described in the board user manual.

Task:

  • Find the CPU pin and port for the User LED (green) output control.
  • Find the CPU pin and port for the User Button input control.

LED

The NUCLEO board contains a green LED controlled by the CPU. The LED is connected to the CPU pin XX of the port GPIOXX. The output needs to be initialized through the GPIO_Init function as depicted below. The initialization should be placed into void GPIO_Configuration( void ) function of the project.

  // PXX = USER LED
  GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_XX;
  GPIO_InitStructure.GPIO_Mode        = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType       = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed       = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd        = GPIO_PuPd_UP;
  GPIO_Init( GPIOXX, &GPIO_InitStructure );

Button

The user button is hardwired to a different port then LED and USART. This means the respective GPIO needs to be initialized and connected to the clock source. This operation should be done in void RCC_Configuration( void ) function: see below.

  // GPIOC clock enable
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE );

The initialization of the input pin is performed in the same way as the output pin with small difference: GPIO_Mode_IN.

  // PXX = USER Button
  GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_XX;
  GPIO_InitStructure.GPIO_Mode        = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_OType       = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed       = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd        = GPIO_PuPd_UP;
  GPIO_Init( GPIOXX, &GPIO_InitStructure );

Main function

The setting of the output can be done through GPIO_SetBits and GPIO_ResetBits (or GPIO_ToggleBits). The input can be read through GPIO_ReadInputDataBit. The list of functions available for input output manipulation is described in stm32f4xx_gpio.h.

int main(void)
{
	// Init
	RCC_Configuration();

	GPIO_Configuration();

	USART2_Configuration();


	// Process
	OutString("Welcome to Nucleo F401RE\r\n");

	while(1) // Don't want to exit
	{
		uint16_t Data;
		uint8_t btData;

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

		Data = USART_ReceiveData(USART2); // Collect Char

		OutString("Welcome to Nucleo F401RE\r\n");
		USART_SendData(USART2, Data); // Echo Char
		OutString("\n");

		GPIO_ToggleBits( GPIOA, GPIO_Pin_5 );

		btData = GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_13 );
		if( !btData )
		{
			OutString("Butt press\r\n");
		}
	} // END while(1)

} // END main

Exercise

  • Use the initialization of the HW components and provide interface which allows you to read/write the state to the inputs/outputs.
  • Adjust the program developed in HomeWork 01 to be able to:
    • Read the state of the button.
    • Write the state of the User LED.
courses/be5b99cpl/labs/lab05.txt · Last modified: 2018/10/04 15:47 (external edit)