This is code is part of a Technion course project in advanced IoT, implementing a device to read and transmit sensors data from a Formula racing car built by students at Technion - Israel Institute of Technology.

Dependencies:   mbed Buffer

Fork of DISCO-L072CZ-LRWAN1_LoRa_PingPong by ST

This is code is part of a Technion course project in advanced IoT, implementing a device to read and transmit sensors data from a Formula racing car built by students at Technion - Israel Institute of Technology.

How to install

  • Create an account on Mbed: https://os.mbed.com/account/signup/
  • Import project into Compiler
  • In the Program Workspace select "Formula_Nucleo_Reader"
  • Select a Platform like so:
  1. Click button at top-left
  2. Add Board
  3. Search "B-L072Z-LRWAN1" and then "Add to your Mbed Compiler"
  • Finally click "Compile", if the build was successful, the binary would download automatically
  • To install it on device simply plug it in to a PC, open device drive and drag then drop binary file in it
Committer:
Helmut64
Date:
Fri May 19 14:04:56 2017 +0000
Revision:
8:3b0d7b4ff28f
Parent:
0:c43b6919ae15
Child:
10:f84959c2e044
Updated description.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut64 0:c43b6919ae15 1 /*
Helmut64 0:c43b6919ae15 2 * Copyright (c) 2017 Helmut Tschemernjak
Helmut64 0:c43b6919ae15 3 * 30826 Garbsen (Hannover) Germany
Helmut64 0:c43b6919ae15 4 * Licensed under the Apache License, Version 2.0);
Helmut64 0:c43b6919ae15 5 */
Helmut64 0:c43b6919ae15 6 #include "main.h"
Helmut64 0:c43b6919ae15 7
Helmut64 8:3b0d7b4ff28f 8 /*
Helmut64 8:3b0d7b4ff28f 9 * IMPORTANT NOTE
Helmut64 8:3b0d7b4ff28f 10 * Use the Nucleo-L073RZ target for the STM B_L072Z_LRWAN1 LoRa board
Helmut64 8:3b0d7b4ff28f 11 */
Helmut64 0:c43b6919ae15 12 DigitalOut myled(LED1);
Helmut64 0:c43b6919ae15 13 BufferedSerial *ser;
Helmut64 0:c43b6919ae15 14
Helmut64 0:c43b6919ae15 15 int main() {
Helmut64 0:c43b6919ae15 16 SystemClock_Config();
Helmut64 0:c43b6919ae15 17 ser = new BufferedSerial(USBTX, USBRX);
Helmut64 0:c43b6919ae15 18 ser->baud(115200*2);
Helmut64 0:c43b6919ae15 19 ser->format(8);
Helmut64 0:c43b6919ae15 20 ser->printf("Hello World\n\r");
Helmut64 0:c43b6919ae15 21 myled = 1;
Helmut64 0:c43b6919ae15 22
Helmut64 0:c43b6919ae15 23 SX1276PingPong();
Helmut64 0:c43b6919ae15 24 }
Helmut64 0:c43b6919ae15 25
Helmut64 0:c43b6919ae15 26
Helmut64 0:c43b6919ae15 27
Helmut64 0:c43b6919ae15 28
Helmut64 0:c43b6919ae15 29 void SystemClock_Config(void)
Helmut64 0:c43b6919ae15 30 {
Helmut64 0:c43b6919ae15 31 #ifdef B_L072Z_LRWAN1_LORA
Helmut64 0:c43b6919ae15 32 /*
Helmut64 0:c43b6919ae15 33 * The L072Z_LRWAN1_LORA clock setup is somewhat differnt from the Nucleo board.
Helmut64 0:c43b6919ae15 34 * It has no LSE.
Helmut64 0:c43b6919ae15 35 */
Helmut64 0:c43b6919ae15 36 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
Helmut64 0:c43b6919ae15 37 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
Helmut64 0:c43b6919ae15 38
Helmut64 0:c43b6919ae15 39 /* Enable HSE Oscillator and Activate PLL with HSE as source */
Helmut64 0:c43b6919ae15 40 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
Helmut64 0:c43b6919ae15 41 RCC_OscInitStruct.HSEState = RCC_HSE_OFF;
Helmut64 0:c43b6919ae15 42 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
Helmut64 0:c43b6919ae15 43 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
Helmut64 0:c43b6919ae15 44 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
Helmut64 0:c43b6919ae15 45 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
Helmut64 0:c43b6919ae15 46 RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6;
Helmut64 0:c43b6919ae15 47 RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3;
Helmut64 0:c43b6919ae15 48
Helmut64 0:c43b6919ae15 49 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Helmut64 0:c43b6919ae15 50 // Error_Handler();
Helmut64 0:c43b6919ae15 51 }
Helmut64 0:c43b6919ae15 52
Helmut64 0:c43b6919ae15 53 /* Set Voltage scale1 as MCU will run at 32MHz */
Helmut64 0:c43b6919ae15 54 __HAL_RCC_PWR_CLK_ENABLE();
Helmut64 0:c43b6919ae15 55 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
Helmut64 0:c43b6919ae15 56
Helmut64 0:c43b6919ae15 57 /* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */
Helmut64 0:c43b6919ae15 58 while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};
Helmut64 0:c43b6919ae15 59
Helmut64 0:c43b6919ae15 60 /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
Helmut64 0:c43b6919ae15 61 clocks dividers */
Helmut64 0:c43b6919ae15 62 RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
Helmut64 0:c43b6919ae15 63 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
Helmut64 0:c43b6919ae15 64 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
Helmut64 0:c43b6919ae15 65 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
Helmut64 0:c43b6919ae15 66 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
Helmut64 0:c43b6919ae15 67 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
Helmut64 0:c43b6919ae15 68 // Error_Handler();
Helmut64 0:c43b6919ae15 69 }
Helmut64 0:c43b6919ae15 70 #endif
Helmut64 0:c43b6919ae15 71 }
Helmut64 0:c43b6919ae15 72
Helmut64 0:c43b6919ae15 73 void dump(const char *title, const void *data, int len, bool dwords)
Helmut64 0:c43b6919ae15 74 {
Helmut64 0:c43b6919ae15 75 dprintf("dump(\"%s\", 0x%x, %d bytes)", title, data, len);
Helmut64 0:c43b6919ae15 76
Helmut64 0:c43b6919ae15 77 int i, j, cnt;
Helmut64 0:c43b6919ae15 78 unsigned char *u;
Helmut64 0:c43b6919ae15 79 const int width = 16;
Helmut64 0:c43b6919ae15 80 const int seppos = 7;
Helmut64 0:c43b6919ae15 81
Helmut64 0:c43b6919ae15 82 cnt = 0;
Helmut64 0:c43b6919ae15 83 u = (unsigned char *)data;
Helmut64 0:c43b6919ae15 84 while (len > 0) {
Helmut64 0:c43b6919ae15 85 ser->printf("%08x: ", (unsigned int)data + cnt);
Helmut64 0:c43b6919ae15 86 if (dwords) {
Helmut64 0:c43b6919ae15 87 unsigned int *ip = ( unsigned int *)u;
Helmut64 0:c43b6919ae15 88 ser->printf(" 0x%08x\r\n", *ip);
Helmut64 0:c43b6919ae15 89 u+= 4;
Helmut64 0:c43b6919ae15 90 len -= 4;
Helmut64 0:c43b6919ae15 91 cnt += 4;
Helmut64 0:c43b6919ae15 92 continue;
Helmut64 0:c43b6919ae15 93 }
Helmut64 0:c43b6919ae15 94 cnt += width;
Helmut64 0:c43b6919ae15 95 j = len < width ? len : width;
Helmut64 0:c43b6919ae15 96 for (i = 0; i < j; i++) {
Helmut64 0:c43b6919ae15 97 ser->printf("%2.2x ", *(u + i));
Helmut64 0:c43b6919ae15 98 if (i == seppos)
Helmut64 0:c43b6919ae15 99 ser->putc(' ');
Helmut64 0:c43b6919ae15 100 }
Helmut64 0:c43b6919ae15 101 ser->putc(' ');
Helmut64 0:c43b6919ae15 102 if (j < width) {
Helmut64 0:c43b6919ae15 103 i = width - j;
Helmut64 0:c43b6919ae15 104 if (i > seppos + 1)
Helmut64 0:c43b6919ae15 105 ser->putc(' ');
Helmut64 0:c43b6919ae15 106 while (i--) {
Helmut64 0:c43b6919ae15 107 printf("%s", " ");
Helmut64 0:c43b6919ae15 108 }
Helmut64 0:c43b6919ae15 109 }
Helmut64 0:c43b6919ae15 110 for (i = 0; i < j; i++) {
Helmut64 0:c43b6919ae15 111 int c = *(u + i);
Helmut64 0:c43b6919ae15 112 if (c >= ' ' && c <= '~')
Helmut64 0:c43b6919ae15 113 ser->putc(c);
Helmut64 0:c43b6919ae15 114 else
Helmut64 0:c43b6919ae15 115 ser->putc('.');
Helmut64 0:c43b6919ae15 116 if (i == seppos)
Helmut64 0:c43b6919ae15 117 ser->putc(' ');
Helmut64 0:c43b6919ae15 118 }
Helmut64 0:c43b6919ae15 119 len -= width;
Helmut64 0:c43b6919ae15 120 u += width;
Helmut64 0:c43b6919ae15 121 ser->printf("\r\n");
Helmut64 0:c43b6919ae15 122 }
Helmut64 0:c43b6919ae15 123 ser->printf("--\r\n");
Helmut64 0:c43b6919ae15 124 }