CourseWare Wiki
Switch Term
Winter 2024 / 2025
Winter 2023 / 2024
Winter 2022 / 2023
Winter 2021 / 2022
Winter 2020 / 2021
Winter 2019 / 2020
Winter 2018 / 2019
Older
Search
Log In
b181
courses
be5b99cpl
labs
lab05
Warning
This page is located in archive. Go to the latest version of this
course pages
.
Differences
This shows you the differences between two versions of the page.
View differences:
Side by Side
Inline
Go
Link to this comparison view
Go
Go
courses:be5b99cpl:labs:lab05 [2018/10/04 15:47]
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)