mbed support for STM32F103C8T6 (Blue Pill) boards

Dependents:   STM32F103C8T6_nRF24L01P_Hello_World Serial_over_Ethernet STM32F103C8T6_LoRaWAN-lmic-app STM32F103C8T6_WebUSBDFU ... more

Demo program and additional info:

Import programSTM32F103C8T6_Hello

Using low cost Bluepill (STM32F103C8T6) boards with mbed.

Files at this revision

API Documentation at this revision

Comitter:
hudakz
Date:
Sat May 27 09:31:15 2017 +0000
Parent:
5:9fbbea76d6f6
Child:
9:0340d6204caf
Commit message:
Updated.

Changed in this revision

PinNames.h Show annotated file Show diff for this revision Revisions of this file
SysClockConf.cpp Show annotated file Show diff for this revision Revisions of this file
SysClockConf.h Show annotated file Show diff for this revision Revisions of this file
stm32f103c8t6.h Show annotated file Show diff for this revision Revisions of this file
--- a/PinNames.h	Tue Aug 02 19:37:40 2016 +0000
+++ b/PinNames.h	Sat May 27 09:31:15 2017 +0000
@@ -27,48 +27,24 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *******************************************************************************
  *
- * Modified for STM32F103C6T8 by Zoltan Hudak, 2016
+ * Modified by Zoltan Hudak 2017
  *
  */
 #ifndef MBED_PINNAMES_H
 #define MBED_PINNAMES_H
 
 #include "cmsis.h"
+#include "PinNamesTypes.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-// See stm32f3xx_hal_gpio.h and stm32f3xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM
-#define STM_PIN_DATA(MODE, PUPD, AFNUM)  ((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))
-#define STM_PIN_MODE(X)   (((X) >> 0) & 0x0F)
-#define STM_PIN_PUPD(X)   (((X) >> 4) & 0x07)
-#define STM_PIN_AFNUM(X)  (((X) >> 7) & 0x0F)
-#define STM_MODE_INPUT              (0)
-#define STM_MODE_OUTPUT_PP          (1)
-#define STM_MODE_OUTPUT_OD          (2)
-#define STM_MODE_AF_PP              (3)
-#define STM_MODE_AF_OD              (4)
-#define STM_MODE_ANALOG             (5)
-#define STM_MODE_IT_RISING          (6)
-#define STM_MODE_IT_FALLING         (7)
-#define STM_MODE_IT_RISING_FALLING  (8)
-#define STM_MODE_EVT_RISING         (9)
-#define STM_MODE_EVT_FALLING        (10)
-#define STM_MODE_EVT_RISING_FALLING (11)
-#define STM_MODE_IT_EVT_RESET       (12)
+typedef enum {
+    // Not connected
+    NC = (int)0xFFFFFFFF,
 
-// High nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, 6=G, 7=H)
-// Low nibble  = pin number
-#define STM_PORT(X) (((uint32_t)(X) >> 4) & 0xF)
-#define STM_PIN(X)  ((uint32_t)(X) & 0xF)
-
-typedef enum {
-    PIN_INPUT,
-    PIN_OUTPUT
-} PinDirection;
-
-typedef enum {
+    // Ports
     PA_0  = 0x00,
     PA_1  = 0x01,
     PA_2  = 0x02,
@@ -82,10 +58,13 @@
     PA_10 = 0x0A,
     PA_11 = 0x0B,
     PA_12 = 0x0C,
+    PA_13 = NC,
+    PA_14 = NC,
     PA_15 = 0x0F,
 
     PB_0  = 0x10,
     PB_1  = 0x11,
+    PB_2  = NC,
     PB_3  = 0x13,
     PB_4  = 0x14,
     PB_5  = 0x15,
@@ -100,16 +79,36 @@
     PB_14 = 0x1E,
     PB_15 = 0x1F,
 
+    PC_0  = NC,
+    PC_1  = NC,
+    PC_2  = NC,
+    PC_3  = NC,
+    PC_4  = NC,
+    PC_5  = NC,
+    PC_6  = NC,
+    PC_7  = NC,
+    PC_8  = NC,
+    PC_9  = NC,
+    PC_10 = NC,
+    PC_11 = NC,
+    PC_12 = NC,
     PC_13 = 0x2D,
     PC_14 = 0x2E,
     PC_15 = 0x2F,
 
+    PD_2  = NC,
+
+    // ADC internal channels
+    ADC_TEMP = 0xF0,
+    ADC_VREF = 0xF1,
 
     // Arduino connector namings
     A0          = PA_0,
     A1          = PA_1,
     A2          = PA_4,
     A3          = PB_0,
+    A4          = NC,
+    A5          = NC,
     D0          = PA_3,
     D1          = PA_2,
     D2          = PA_10,
@@ -119,6 +118,7 @@
     D6          = PB_10,
     D7          = PA_8,
     D8          = PA_9,
+    D9          = NC,
     D10         = PB_6,
     D11         = PA_7,
     D12         = PA_6,
@@ -128,6 +128,10 @@
 
     // Generic signals namings
     LED1        = PC_13,
+    LED2        = NC,
+    LED3        = NC,
+    LED4        = NC,
+    USER_BUTTON = NC,
     SERIAL_TX   = PA_2,
     SERIAL_RX   = PA_3,
     USBTX       = PA_2,
@@ -138,22 +142,13 @@
     SPI_MISO    = PA_6,
     SPI_SCK     = PA_5,
     SPI_CS      = PB_6,
-    PWM_OUT     = PB_3,
-
-    // Not connected
-    NC = (int)0xFFFFFFFF
+    PWM_OUT     = PB_3
 } PinName;
 
-typedef enum {
-    PullNone  = 0,
-    PullUp    = 1,
-    PullDown  = 2,
-    OpenDrain = 3,
-    PullDefault = PullNone
-} PinMode;
-
 #ifdef __cplusplus
 }
 #endif
 
 #endif
+
+
--- a/SysClockConf.cpp	Tue Aug 02 19:37:40 2016 +0000
+++ b/SysClockConf.cpp	Sat May 27 09:31:15 2017 +0000
@@ -8,7 +8,7 @@
   ******************************************************************************
   * @attention
   *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 Zoltan Hudak <hudakz@inbox.com>
+  * <h2><center>&copy; COPYRIGHT(c) 2016 Zoltan Hudak <hudakz@outlook.com>
   *
   * All rights reserved.
 
@@ -29,8 +29,12 @@
 #include "SysClockConf.h"
 #include "mbed.h"
 
-bool HSE_SystemClock_Config(void) {
+extern volatile uint32_t    tim_it_counter;
+volatile uint32_t           tim_init;
+
+void HSE_SystemClock_Config(void) {
     RCC_OscInitTypeDef RCC_OscInitStruct;
+    RCC_ClkInitTypeDef RCC_ClkInitStruct;
 
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
@@ -38,42 +42,25 @@
     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;
-
+    HAL_RCC_OscConfig(&RCC_OscInitStruct);
     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
-                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+                                 |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;
-    }
-
+    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
     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;
+    PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
+    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
 }
 
 bool confSysClock(void) {
+    tim_init = tim_it_counter;
     HAL_RCC_DeInit();
-    if (!HSE_SystemClock_Config()) {
-        return false;
-    }
+    HSE_SystemClock_Config();
     SystemCoreClockUpdate();
     return true;
 }
-
-
-
--- a/SysClockConf.h	Tue Aug 02 19:37:40 2016 +0000
+++ b/SysClockConf.h	Sat May 27 09:31:15 2017 +0000
@@ -1,2 +1,2 @@
 #pragma once
-bool confSysClock(void);
+bool confSysClock(void);
\ No newline at end of file
--- a/stm32f103c8t6.h	Tue Aug 02 19:37:40 2016 +0000
+++ b/stm32f103c8t6.h	Sat May 27 09:31:15 2017 +0000
@@ -1,6 +1,3 @@
 #pragma once
 #include "PinNames.h"
 #include "SysClockConf.h"
-
-
-