Modification of Mbed-dev library for LQFP48 package microcontrollers: STM32F103C8 (STM32F103C8T6) and STM32F103CB (STM32F103CBT6) (Bluepill boards, Maple mini etc. )

Fork of mbed-STM32F103C8_org by Nothing Special

Library for STM32F103C8 (Bluepill boards etc.).
Use this instead of mbed library.
This library allows the size of the code in the FLASH up to 128kB. Therefore, code also runs on microcontrollers STM32F103CB (eg. Maple mini).
But in the case of STM32F103C8, check the size of the resulting code would not exceed 64kB.

To compile a program with this library, use NUCLEO-F103RB as the target name. !

Changes:

  • Corrected initialization of the HSE + crystal clock (mbed permanent bug), allowing the use of on-board xtal (8MHz).(1)
  • Additionally, it also set USB clock (48Mhz).(2)
  • Definitions of pins and peripherals adjusted to LQFP48 case.
  • Board led LED1 is now PC_13 (3)
  • USER_BUTTON is now PC_14 (4)

    Now the library is complete rebuilt based on mbed-dev v160 (and not yet fully tested).

notes
(1) - In case 8MHz xtal on board, CPU frequency is 72MHz. Without xtal is 64MHz.
(2) - Using the USB interface is only possible if STM32 is clocking by on-board 8MHz xtal or external clock signal 8MHz on the OSC_IN pin.
(3) - On Bluepill board led operation is reversed, i.e. 0 - led on, 1 - led off.
(4) - Bluepill board has no real user button

Information

After export to SW4STM (AC6):

  • add line #include "mbed_config.h" in files Serial.h and RawSerial.h
  • in project properties change Optimisation Level to Optimise for size (-Os)
Committer:
mega64
Date:
Thu Apr 27 23:56:38 2017 +0000
Revision:
148:8b0b02bf146f
Parent:
146:03e976389d16
Remove unnecessary folders

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mega64 146:03e976389d16 1
mega64 146:03e976389d16 2 /** \addtogroup platform */
mega64 146:03e976389d16 3 /** @{*/
mega64 146:03e976389d16 4 /* mbed Microcontroller Library
mega64 146:03e976389d16 5 * Copyright (c) 2006-2013 ARM Limited
mega64 146:03e976389d16 6 *
mega64 146:03e976389d16 7 * Licensed under the Apache License, Version 2.0 (the "License");
mega64 146:03e976389d16 8 * you may not use this file except in compliance with the License.
mega64 146:03e976389d16 9 * You may obtain a copy of the License at
mega64 146:03e976389d16 10 *
mega64 146:03e976389d16 11 * http://www.apache.org/licenses/LICENSE-2.0
mega64 146:03e976389d16 12 *
mega64 146:03e976389d16 13 * Unless required by applicable law or agreed to in writing, software
mega64 146:03e976389d16 14 * distributed under the License is distributed on an "AS IS" BASIS,
mega64 146:03e976389d16 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mega64 146:03e976389d16 16 * See the License for the specific language governing permissions and
mega64 146:03e976389d16 17 * limitations under the License.
mega64 146:03e976389d16 18 */
mega64 146:03e976389d16 19 #ifndef MBED_TOOLCHAIN_H
mega64 146:03e976389d16 20 #define MBED_TOOLCHAIN_H
mega64 146:03e976389d16 21
mega64 146:03e976389d16 22 #include "mbed_preprocessor.h"
mega64 146:03e976389d16 23
mega64 146:03e976389d16 24
mega64 146:03e976389d16 25 // Warning for unsupported compilers
mega64 146:03e976389d16 26 #if !defined(__GNUC__) /* GCC */ \
mega64 146:03e976389d16 27 && !defined(__CC_ARM) /* ARMCC */ \
mega64 146:03e976389d16 28 && !defined(__clang__) /* LLVM/Clang */ \
mega64 146:03e976389d16 29 && !defined(__ICCARM__) /* IAR */
mega64 146:03e976389d16 30 #warning "This compiler is not yet supported."
mega64 146:03e976389d16 31 #endif
mega64 146:03e976389d16 32
mega64 146:03e976389d16 33
mega64 146:03e976389d16 34 // Attributes
mega64 146:03e976389d16 35
mega64 146:03e976389d16 36 /** MBED_PACKED
mega64 146:03e976389d16 37 * Pack a structure, preventing any padding from being added between fields.
mega64 146:03e976389d16 38 *
mega64 146:03e976389d16 39 * @code
mega64 146:03e976389d16 40 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 41 *
mega64 146:03e976389d16 42 * MBED_PACKED(struct) foo {
mega64 146:03e976389d16 43 * char x;
mega64 146:03e976389d16 44 * int y;
mega64 146:03e976389d16 45 * };
mega64 146:03e976389d16 46 * @endcode
mega64 146:03e976389d16 47 */
mega64 146:03e976389d16 48 #ifndef MBED_PACKED
mega64 146:03e976389d16 49 #if defined(__ICCARM__)
mega64 146:03e976389d16 50 #define MBED_PACKED(struct) __packed struct
mega64 146:03e976389d16 51 #else
mega64 146:03e976389d16 52 #define MBED_PACKED(struct) struct __attribute__((packed))
mega64 146:03e976389d16 53 #endif
mega64 146:03e976389d16 54 #endif
mega64 146:03e976389d16 55
mega64 146:03e976389d16 56 /** MBED_ALIGN(N)
mega64 146:03e976389d16 57 * Declare a variable to be aligned on an N-byte boundary.
mega64 146:03e976389d16 58 *
mega64 146:03e976389d16 59 * @note
mega64 146:03e976389d16 60 * IAR does not support alignment greater than word size on the stack
mega64 146:03e976389d16 61 *
mega64 146:03e976389d16 62 * @code
mega64 146:03e976389d16 63 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 64 *
mega64 146:03e976389d16 65 * MBED_ALIGN(16) char a;
mega64 146:03e976389d16 66 * @endcode
mega64 146:03e976389d16 67 */
mega64 146:03e976389d16 68 #ifndef MBED_ALIGN
mega64 146:03e976389d16 69 #if defined(__ICCARM__)
mega64 146:03e976389d16 70 #define MBED_ALIGN(N) _Pragma(MBED_STRINGIFY(data_alignment=N))
mega64 146:03e976389d16 71 #else
mega64 146:03e976389d16 72 #define MBED_ALIGN(N) __attribute__((aligned(N)))
mega64 146:03e976389d16 73 #endif
mega64 146:03e976389d16 74 #endif
mega64 146:03e976389d16 75
mega64 146:03e976389d16 76 /** MBED_UNUSED
mega64 146:03e976389d16 77 * Declare a function argument to be unused, suppressing compiler warnings
mega64 146:03e976389d16 78 *
mega64 146:03e976389d16 79 * @code
mega64 146:03e976389d16 80 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 81 *
mega64 146:03e976389d16 82 * void foo(MBED_UNUSED int arg) {
mega64 146:03e976389d16 83 *
mega64 146:03e976389d16 84 * }
mega64 146:03e976389d16 85 * @endcode
mega64 146:03e976389d16 86 */
mega64 146:03e976389d16 87 #ifndef MBED_UNUSED
mega64 146:03e976389d16 88 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 89 #define MBED_UNUSED __attribute__((__unused__))
mega64 146:03e976389d16 90 #else
mega64 146:03e976389d16 91 #define MBED_UNUSED
mega64 146:03e976389d16 92 #endif
mega64 146:03e976389d16 93 #endif
mega64 146:03e976389d16 94
mega64 146:03e976389d16 95 /** MBED_WEAK
mega64 146:03e976389d16 96 * Mark a function as being weak.
mega64 146:03e976389d16 97 *
mega64 146:03e976389d16 98 * @note
mega64 146:03e976389d16 99 * weak functions are not friendly to making code re-usable, as they can only
mega64 146:03e976389d16 100 * be overridden once (and if they are multiply overridden the linker will emit
mega64 146:03e976389d16 101 * no warning). You should not normally use weak symbols as part of the API to
mega64 146:03e976389d16 102 * re-usable modules.
mega64 146:03e976389d16 103 *
mega64 146:03e976389d16 104 * @code
mega64 146:03e976389d16 105 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 106 *
mega64 146:03e976389d16 107 * MBED_WEAK void foo() {
mega64 146:03e976389d16 108 * // a weak implementation of foo that can be overriden by a definition
mega64 146:03e976389d16 109 * // without __weak
mega64 146:03e976389d16 110 * }
mega64 146:03e976389d16 111 * @endcode
mega64 146:03e976389d16 112 */
mega64 146:03e976389d16 113 #ifndef MBED_WEAK
mega64 146:03e976389d16 114 #if defined(__ICCARM__)
mega64 146:03e976389d16 115 #define MBED_WEAK __weak
mega64 146:03e976389d16 116 #else
mega64 146:03e976389d16 117 #define MBED_WEAK __attribute__((weak))
mega64 146:03e976389d16 118 #endif
mega64 146:03e976389d16 119 #endif
mega64 146:03e976389d16 120
mega64 146:03e976389d16 121 /** MBED_PURE
mega64 146:03e976389d16 122 * Hint to the compiler that a function depends only on parameters
mega64 146:03e976389d16 123 *
mega64 146:03e976389d16 124 * @code
mega64 146:03e976389d16 125 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 126 *
mega64 146:03e976389d16 127 * MBED_PURE int foo(int arg){
mega64 146:03e976389d16 128 * // no access to global variables
mega64 146:03e976389d16 129 * }
mega64 146:03e976389d16 130 * @endcode
mega64 146:03e976389d16 131 */
mega64 146:03e976389d16 132 #ifndef MBED_PURE
mega64 146:03e976389d16 133 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 134 #define MBED_PURE __attribute__((const))
mega64 146:03e976389d16 135 #else
mega64 146:03e976389d16 136 #define MBED_PURE
mega64 146:03e976389d16 137 #endif
mega64 146:03e976389d16 138 #endif
mega64 146:03e976389d16 139
mega64 146:03e976389d16 140 /** MBED_FORCEINLINE
mega64 146:03e976389d16 141 * Declare a function that must always be inlined. Failure to inline
mega64 146:03e976389d16 142 * such a function will result in an error.
mega64 146:03e976389d16 143 *
mega64 146:03e976389d16 144 * @code
mega64 146:03e976389d16 145 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 146 *
mega64 146:03e976389d16 147 * MBED_FORCEINLINE void foo() {
mega64 146:03e976389d16 148 *
mega64 146:03e976389d16 149 * }
mega64 146:03e976389d16 150 * @endcode
mega64 146:03e976389d16 151 */
mega64 146:03e976389d16 152 #ifndef MBED_FORCEINLINE
mega64 146:03e976389d16 153 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 154 #define MBED_FORCEINLINE static inline __attribute__((always_inline))
mega64 146:03e976389d16 155 #elif defined(__ICCARM__)
mega64 146:03e976389d16 156 #define MBED_FORCEINLINE _Pragma("inline=forced") static
mega64 146:03e976389d16 157 #else
mega64 146:03e976389d16 158 #define MBED_FORCEINLINE static inline
mega64 146:03e976389d16 159 #endif
mega64 146:03e976389d16 160 #endif
mega64 146:03e976389d16 161
mega64 146:03e976389d16 162 /** MBED_NORETURN
mega64 146:03e976389d16 163 * Declare a function that will never return.
mega64 146:03e976389d16 164 *
mega64 146:03e976389d16 165 * @code
mega64 146:03e976389d16 166 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 167 *
mega64 146:03e976389d16 168 * MBED_NORETURN void foo() {
mega64 146:03e976389d16 169 * // must never return
mega64 146:03e976389d16 170 * while (1) {}
mega64 146:03e976389d16 171 * }
mega64 146:03e976389d16 172 * @endcode
mega64 146:03e976389d16 173 */
mega64 146:03e976389d16 174 #ifndef MBED_NORETURN
mega64 146:03e976389d16 175 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 176 #define MBED_NORETURN __attribute__((noreturn))
mega64 146:03e976389d16 177 #elif defined(__ICCARM__)
mega64 146:03e976389d16 178 #define MBED_NORETURN __noreturn
mega64 146:03e976389d16 179 #else
mega64 146:03e976389d16 180 #define MBED_NORETURN
mega64 146:03e976389d16 181 #endif
mega64 146:03e976389d16 182 #endif
mega64 146:03e976389d16 183
mega64 146:03e976389d16 184 /** MBED_UNREACHABLE
mega64 146:03e976389d16 185 * An unreachable statement. If the statement is reached,
mega64 146:03e976389d16 186 * behaviour is undefined. Useful in situations where the compiler
mega64 146:03e976389d16 187 * cannot deduce the unreachability of code.
mega64 146:03e976389d16 188 *
mega64 146:03e976389d16 189 * @code
mega64 146:03e976389d16 190 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 191 *
mega64 146:03e976389d16 192 * void foo(int arg) {
mega64 146:03e976389d16 193 * switch (arg) {
mega64 146:03e976389d16 194 * case 1: return 1;
mega64 146:03e976389d16 195 * case 2: return 2;
mega64 146:03e976389d16 196 * ...
mega64 146:03e976389d16 197 * }
mega64 146:03e976389d16 198 * MBED_UNREACHABLE;
mega64 146:03e976389d16 199 * }
mega64 146:03e976389d16 200 * @endcode
mega64 146:03e976389d16 201 */
mega64 146:03e976389d16 202 #ifndef MBED_UNREACHABLE
mega64 146:03e976389d16 203 #if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM)
mega64 146:03e976389d16 204 #define MBED_UNREACHABLE __builtin_unreachable()
mega64 146:03e976389d16 205 #else
mega64 146:03e976389d16 206 #define MBED_UNREACHABLE while (1)
mega64 146:03e976389d16 207 #endif
mega64 146:03e976389d16 208 #endif
mega64 146:03e976389d16 209
mega64 146:03e976389d16 210 /** MBED_DEPRECATED("message string")
mega64 146:03e976389d16 211 * Mark a function declaration as deprecated, if it used then a warning will be
mega64 146:03e976389d16 212 * issued by the compiler possibly including the provided message. Note that not
mega64 146:03e976389d16 213 * all compilers are able to display the message.
mega64 146:03e976389d16 214 *
mega64 146:03e976389d16 215 * @code
mega64 146:03e976389d16 216 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 217 *
mega64 146:03e976389d16 218 * MBED_DEPRECATED("don't foo any more, bar instead")
mega64 146:03e976389d16 219 * void foo(int arg);
mega64 146:03e976389d16 220 * @endcode
mega64 146:03e976389d16 221 */
mega64 146:03e976389d16 222 #ifndef MBED_DEPRECATED
mega64 146:03e976389d16 223 #if defined(__CC_ARM)
mega64 146:03e976389d16 224 #define MBED_DEPRECATED(M) __attribute__((deprecated))
mega64 146:03e976389d16 225 #elif defined(__GNUC__) || defined(__clang__)
mega64 146:03e976389d16 226 #define MBED_DEPRECATED(M) __attribute__((deprecated(M)))
mega64 146:03e976389d16 227 #else
mega64 146:03e976389d16 228 #define MBED_DEPRECATED(M)
mega64 146:03e976389d16 229 #endif
mega64 146:03e976389d16 230 #endif
mega64 146:03e976389d16 231
mega64 146:03e976389d16 232 /** MBED_DEPRECATED_SINCE("version", "message string")
mega64 146:03e976389d16 233 * Mark a function declaration as deprecated, noting that the declaration was
mega64 146:03e976389d16 234 * deprecated on the specified version. If the function is used then a warning
mega64 146:03e976389d16 235 * will be issued by the compiler possibly including the provided message.
mega64 146:03e976389d16 236 * Note that not all compilers are able to display this message.
mega64 146:03e976389d16 237 *
mega64 146:03e976389d16 238 * @code
mega64 146:03e976389d16 239 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 240 *
mega64 146:03e976389d16 241 * MBED_DEPRECATED_SINCE("mbed-os-5.1", "don't foo any more, bar instead")
mega64 146:03e976389d16 242 * void foo(int arg);
mega64 146:03e976389d16 243 * @endcode
mega64 146:03e976389d16 244 */
mega64 146:03e976389d16 245 #define MBED_DEPRECATED_SINCE(D, M) MBED_DEPRECATED(M " [since " D "]")
mega64 146:03e976389d16 246
mega64 146:03e976389d16 247 /** MBED_CALLER_ADDR()
mega64 146:03e976389d16 248 * Returns the caller of the current function.
mega64 146:03e976389d16 249 *
mega64 146:03e976389d16 250 * @note
mega64 146:03e976389d16 251 * This macro is only implemented for GCC and ARMCC.
mega64 146:03e976389d16 252 *
mega64 146:03e976389d16 253 * @code
mega64 146:03e976389d16 254 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 255 *
mega64 146:03e976389d16 256 * printf("This function was called from %p", MBED_CALLER_ADDR());
mega64 146:03e976389d16 257 * @endcode
mega64 146:03e976389d16 258 *
mega64 146:03e976389d16 259 * @return Address of the calling function
mega64 146:03e976389d16 260 */
mega64 146:03e976389d16 261 #ifndef MBED_CALLER_ADDR
mega64 146:03e976389d16 262 #if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM)
mega64 146:03e976389d16 263 #define MBED_CALLER_ADDR() __builtin_extract_return_addr(__builtin_return_address(0))
mega64 146:03e976389d16 264 #elif defined(__CC_ARM)
mega64 146:03e976389d16 265 #define MBED_CALLER_ADDR() __builtin_return_address(0)
mega64 146:03e976389d16 266 #else
mega64 146:03e976389d16 267 #define MBED_CALLER_ADDR() (NULL)
mega64 146:03e976389d16 268 #endif
mega64 146:03e976389d16 269 #endif
mega64 146:03e976389d16 270
mega64 146:03e976389d16 271 #ifndef MBED_SECTION
mega64 146:03e976389d16 272 #if (defined(__GNUC__) || defined(__clang__)) || defined(__CC_ARM)
mega64 146:03e976389d16 273 #define MBED_SECTION(name) __attribute__ ((section (name)))
mega64 146:03e976389d16 274 #elif defined(__ICCARM__)
mega64 146:03e976389d16 275 #define MBED_SECTION(name) _Pragma(MBED_STRINGIFY(location=name))
mega64 146:03e976389d16 276 #else
mega64 146:03e976389d16 277 #error "Missing MBED_SECTION directive"
mega64 146:03e976389d16 278 #endif
mega64 146:03e976389d16 279 #endif
mega64 146:03e976389d16 280
mega64 146:03e976389d16 281 // FILEHANDLE declaration
mega64 146:03e976389d16 282 #if defined(TOOLCHAIN_ARM)
mega64 146:03e976389d16 283 #include <rt_sys.h>
mega64 146:03e976389d16 284 #endif
mega64 146:03e976389d16 285
mega64 146:03e976389d16 286 #ifndef FILEHANDLE
mega64 146:03e976389d16 287 typedef int FILEHANDLE;
mega64 146:03e976389d16 288 #endif
mega64 146:03e976389d16 289
mega64 146:03e976389d16 290 // Backwards compatibility
mega64 146:03e976389d16 291 #ifndef WEAK
mega64 146:03e976389d16 292 #define WEAK MBED_WEAK
mega64 146:03e976389d16 293 #endif
mega64 146:03e976389d16 294
mega64 146:03e976389d16 295 #ifndef PACKED
mega64 146:03e976389d16 296 #define PACKED MBED_PACKED()
mega64 146:03e976389d16 297 #endif
mega64 146:03e976389d16 298
mega64 146:03e976389d16 299 #ifndef EXTERN
mega64 146:03e976389d16 300 #define EXTERN extern
mega64 146:03e976389d16 301 #endif
mega64 146:03e976389d16 302
mega64 146:03e976389d16 303 #endif
mega64 146:03e976389d16 304
mega64 146:03e976389d16 305 /** @}*/