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.

Link to this comparison view

courses:be5b99cpl:labs:lab03 [2018/10/04 15:47]
courses:be5b99cpl:labs:lab03 [2018/10/04 15:47] (current)
Line 1: Line 1:
 +====== Lab03 - Nucleo Echo ======
 + 
 +  * Download sources for a sample project for NUCLEOF401RE {{courses:​be5b99cpl:​labs:​01stm32f401.tar.gz|}}
 +  * Get familiar with the project in OpenSTM32 System Workbench ​
 +  * Compile and upload the project into the embedded board
 +  * Find the appropriate device (serial line) to receive data - use cat commnad to receive the data 
 +  * Write a program which will open the communication device and prints the data sent from Nucleo
 +  * Get familiar with HomeWork 02
  
 +===== OpenSTM32 System Workbench =====
 +The development environment is available in ''/​usr/​local/​Ac6/​SystemWorkbench''​ and then to start it write ''​./​eclipse''​ . The details about the environment are available at [[http://​www.openstm32.org]]
 +
 +<​code>​
 +cd /​usr/​local/​Ac6/​SystemWorkbench
 +./eclipse
 +</​code>​
 +===== Lab submission =====
 +Show to the lab instructor you can:
 +  * Compile the project
 +  * Transmit the data from NUCLEO to PC (known serial interface)
 +
 +===== NUCLEO Test Code =====
 +This is the code from {{courses:​be5b99cpl:​labs:​01stm32f401.tar.gz|}} main.c which initialize the HW and allows to send a string from NUCLEO to PC.
 +
 +<code c>
 +//
 +//  ******************************************************************************
 +//  @file    main.c
 +//  @author ​ CPL (Pavel Paces, based on STM examples)
 +//  @version V0.0
 +//  @date    01-October-2016
 +//  @brief ​  ​Serial line over ST-Link example
 +//  Nucleo STM32F401RE USART2 (Tx PA.2, Rx PA.3)
 +//
 +//  ******************************************************************************
 +//
 +
 +
 +#include "​stm32f4xx.h"​
 +
 +// *******************************************************************************
 +
 +//
 +//  @brief ​ Enable MCU internal connections to USART and GPIO
 +//
 +void RCC_Configuration(void)
 +{
 +  // --- System Clocks Configuration
 +
 +  // USART2 clock enable
 +  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,​ ENABLE);
 +
 +  // GPIOA clock enable
 +  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,​ ENABLE);
 +} // END void RCC_Configuration(void)
 +
 +// *******************************************************************************
 +
 +//
 +//  @brief ​ Input/​output pins configuration
 +//
 +void GPIO_Configuration(void)
 +{
 +  GPIO_InitTypeDef GPIO_InitStructure;​
 +
 +  // GPIO Configuration
 +  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; // PA.2 USART2_TX, PA.3 USART2_RX
 +  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;​
 +  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;​
 +  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;​
 +  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;​
 +  GPIO_Init(GPIOA,​ &​GPIO_InitStructure);​
 +
 +  // Alternative Functions: Connect USART pins to AF
 +  GPIO_PinAFConfig(GPIOA,​ GPIO_PinSource2,​ GPIO_AF_USART2);​
 +  GPIO_PinAFConfig(GPIOA,​ GPIO_PinSource3,​ GPIO_AF_USART2);​
 +} // END void GPIO_Configuration(void)
 +
 +// *******************************************************************************
 +
 +//
 +//  @brief ​ Baud rate settings
 +//
 +void USART2_Configuration(void)
 +{
 +  USART_InitTypeDef USART_InitStructure;​
 +
 +  // USARTx configuration
 +  //  - BaudRate = 115200 baud
 +  //  - Word Length = 8 Bits
 +  //  - One Stop Bit
 +  //  - No parity
 +  //  - Hardware flow control disabled (RTS and CTS signals)
 +  //  - Receive and transmit enabled
 +
 +  USART_InitStructure.USART_BaudRate = (9600)*3;
 +  USART_InitStructure.USART_WordLength = USART_WordLength_8b;​
 +  USART_InitStructure.USART_StopBits = USART_StopBits_1;​
 +  USART_InitStructure.USART_Parity = USART_Parity_No;​
 +  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;​
 +
 +  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;​
 +
 +  USART_Init(USART2,​ &​USART_InitStructure);​
 +
 +  USART_Cmd(USART2,​ ENABLE);
 +} // END void USART2_Configuration(void)
 +
 +// *******************************************************************************
 +
 +//
 +//  @brief ​ The function sends characters until 0
 +//
 +void OutString(char *s)
 +{
 +
 + while(*s)
 + {
 + // Wait for Tx Empty
 + while(USART_GetFlagStatus(USART2,​ USART_FLAG_TXE) == RESET);
 + // Send Char
 + USART_SendData(USART2,​ *s++);
 + } // END while
 +
 +} // END void OutString(char *s)
 +
 +// *******************************************************************************
 +
 +//
 +//  @brief ​ Main loop
 +//
 +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;
 +
 + while(USART_GetFlagStatus(USART2,​ USART_FLAG_RXNE) == RESET); // Wait for Char
 +
 + Data = USART_ReceiveData(USART2);​ // Collect Char
 +
 + while(USART_GetFlagStatus(USART2,​ USART_FLAG_TXE) == RESET); // Wait for Empty
 +
 + OutString("​Welcome to Nucleo F401RE\r\n"​);​
 + USART_SendData(USART2,​ Data); // Echo Char
 + OutString("​\n"​);​
 + } // END while(1)
 +
 +} // END main
 +
 +// *******************************************************************************
 +
 +#​ifdef ​ USE_FULL_ASSERT
 +
 +/**
 +  * @brief ​ Reports the name of the source file and the source line number
 +  *         where the assert_param error has occurred.
 +  * @param ​ file: pointer to the source file name
 +  * @param ​ line: assert_param error line source number
 +  * @retval None
 +  */
 +void assert_failed(uint8_t* file, uint32_t line)
 +{
 +  /* User can add his own implementation to report the file name and line number,
 +     ex: printf("​Wrong parameters value: file %s on line %d\r\n",​ file, line) */
 +
 +  while (1)
 +  {}
 +}
 +#endif
 +
 +</​code>​
courses/be5b99cpl/labs/lab03.txt · Last modified: 2018/10/04 15:47 (external edit)