090819

Dependencies:   mbed BufferedSerial SX1276GenericLib

Committer:
AWonline01
Date:
Fri Aug 09 10:54:20 2019 +0000
Revision:
0:c4d8c7cf69bb
first090819

Who changed what in which revision?

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