Warning
This page is located in archive.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:be5b99cpl:labs:lab05 [2018/10/04 15:47] (current)
Line 1: Line 1:
 +====== 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 [[http://​www.st.com/​resource/​en/​user_manual/​dm00105823.pdf|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.
 +
 +<​code>​
 +  // 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 );
 +</​code>​
 +
 +==== 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.
 +
 +<​code>​
 +  // GPIOC clock enable
 +  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC,​ ENABLE );
 +</​code>​
 +
 +The initialization of the input pin is performed in the same way as the output pin with small difference: GPIO_Mode_IN.
 +
 +<​code>​
 +  // 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 );
 +</​code>​
 +
 +==== 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.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +==== 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)