Based on the libraries by Zoltan Hudak Added #ifdefs to avoid compile errors, so it is easy to select target board: Bluepill, Maple Mini, Nucleo F103, Nucleo F103 with external 8MHz crystal

Dependents:   STM32F103variants_example

Files at this revision

API Documentation at this revision

Comitter:
vargham
Date:
Mon Mar 20 13:22:25 2017 +0000
Parent:
3:e149147d7c13
Commit message:
.h only implementation. All ifdefs are working now.

Changed in this revision

stm32f103variants.cpp Show diff for this revision Revisions of this file
stm32f103variants.h Show annotated file Show diff for this revision Revisions of this file
diff -r e149147d7c13 -r 6568c3b20d29 stm32f103variants.cpp
--- a/stm32f103variants.cpp	Thu Mar 16 12:36:39 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
-  ******************************************************************************
-  * @file
-  * @author  Zoltan Hudak
-  * @version
-  * @date
-  * @brief   System Clock configuration for STM32F103
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 Zoltan Hudak <hudakz@inbox.com>
-  *
-  * All rights reserved.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
- Modified by Mark Peter Vargha, 2017
- Added #ifdefs to avoid compile errors, so it is easy to select target board: Bluepill, Maple Mini, Nucleo F103, Nucleo F103 with external 8MHz crystal
-
-*/
-
-#include "stm32f103variants.h"
-
-#if defined USE_BLUEPILL || defined USE_MAPLE_MINI || defined USE_NUCLEO_EXTOSC
-
-bool HSE_SystemClock_Config(void) {
-    RCC_OscInitTypeDef RCC_OscInitStruct;
-
-    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
-    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
-    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
-    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
-    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
-    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
-
-    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
-        return false;
-    }
-
-    RCC_ClkInitTypeDef RCC_ClkInitStruct;
-
-    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
-                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
-    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
-    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
-    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
-    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
-    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
-        return false;
-    }
-
-    RCC_PeriphCLKInitTypeDef PeriphClkInit;
-
-    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
-    PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
-    PeriphClkInit.UsbClockSelection = RCC_USBPLLCLK_DIV1_5;
-    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
-        return false;
-    }
-    return true;
-}
-
-bool doConfSysClock()
-{
-    HAL_RCC_DeInit();
-    if (!HSE_SystemClock_Config()) {
-        return false;
-    }
-    SystemCoreClockUpdate();
-    return true;
-}
-
-#endif
-
-bool confSysClock(void) {
-#if defined(USE_BLUEPILL) || defined(USE_MAPLE_MINI) || defined(USE_NUCLEO_EXTOSC)
-    return doConfSysClock();
-#else
-    return false;
-#endif
-}
diff -r e149147d7c13 -r 6568c3b20d29 stm32f103variants.h
--- a/stm32f103variants.h	Thu Mar 16 12:36:39 2017 +0000
+++ b/stm32f103variants.h	Mon Mar 20 13:22:25 2017 +0000
@@ -33,19 +33,49 @@
  * Added #ifdefs to avoid compile errors, so it is easy to select target board: Bluepill, Maple Mini, Nucleo F103, Nucleo F103 with external 8MHz crystal
  *
  */
+ /**
+ * Example:
+ * @code
+ #define USE_BOARD USE_MAPLE_MINI
+
+#include "stm32f103variants.h"
+#include "mbed.h"
+
+DigitalOut led1(LED1);
+Serial serialPc(PA_9, PA_10);  //Tx, Rx
+
+int main()
+{
+    led1 = 0;
+    confSysClock();
+    serialPc.baud(460800);
+    serialPc.printf("This is a STM32F103 test.\r\n");
+    serialPc.printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock);
+    serialPc.printf("LED=%d\r\n", led1.read());
+
+    while (true)
+    {
+        led1 = !led1;
+        serialPc.printf("LED=%d\r\n", led1.read());
+        wait(1.0);
+    }
+}
+ *
+ */
 
 #ifndef STM32F103variants_H_INCLUDED
 #define STM32F103variants_H_INCLUDED
 
-#include "mbed.h"
-
-bool confSysClock(void);
+#define USE_OTHER 0
+#define USE_BLUEPILL 1
+#define USE_MAPLE_MINI 2
+#define USE_NUCLEO_EXTOSC 3
 
-#define USE_BLUEPILL
-//#define USE_MAPLE_MINI
-//#define USE_NUCLEO_EXTOSC
+#ifndef USE_BOARD
+#define USE_BOARD USE_OTHER
+#endif
 
-#ifdef USE_BLUEPILL
+#if (USE_BOARD == USE_BLUEPILL)
 
 #ifndef MBED_PINNAMES_H
 #define MBED_PINNAMES_H
@@ -221,7 +251,7 @@
 *********************************************************************************************************************
 */
 
-#ifdef USE_MAPLE_MINI
+#if (USE_BOARD == USE_MAPLE_MINI)
 
 #ifndef MBED_PINNAMES_H
 #define MBED_PINNAMES_H
@@ -390,4 +420,63 @@
 
 #endif //USE_MAPLE_MINI
 
+#if (USE_BOARD > USE_OTHER)
+
+bool HSE_SystemClock_Config(void) {
+    RCC_OscInitTypeDef RCC_OscInitStruct;
+
+    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
+    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
+
+    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
+        return false;
+    }
+
+    RCC_ClkInitTypeDef RCC_ClkInitStruct;
+
+    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
+        return false;
+    }
+
+    RCC_PeriphCLKInitTypeDef PeriphClkInit;
+
+    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
+    PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
+    PeriphClkInit.UsbClockSelection = RCC_USBPLLCLK_DIV1_5;
+    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
+        return false;
+    }
+    return true;
+}
+
+bool doConfSysClock()
+{
+    HAL_RCC_DeInit();
+    if (!HSE_SystemClock_Config()) {
+        return false;
+    }
+    SystemCoreClockUpdate();
+    return true;
+}
+
+#endif //(USE_BOARD > USE_OTHER)
+
+bool confSysClock(void) {
+#if (USE_BOARD > USE_OTHER)
+    return doConfSysClock();
+#else
+    return false;
+#endif
+}
+
 #endif /* STM32F103variants_H_INCLUDED */