====== 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. // 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.