Skip to content

Commit 5d05638

Browse files
committed
Add support for the Olimex STM32 H103 board.
Pin layout and header files for the STM32 H103 prototype board from Olimex featuring an STM32F103RBT6 chip. This commit contains all necessary changes to compile with BOARD=olimex_stm32_h103. Signed-off-by: David Kiliani <mail@davidkiliani.de>
1 parent e51af68 commit 5d05638

7 files changed

Lines changed: 230 additions & 0 deletions

File tree

libmaple/usb/usb_config.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@
4747
#define USB_DISC_DEV GPIOB
4848
#define USB_DISC_PIN 8
4949

50+
#elif defined(BOARD_olimex_stm32_h103)
51+
52+
#define VCOM_ID_PRODUCT 0x0004
53+
#define USB_DISC_DEV GPIOC
54+
#define USB_DISC_PIN 11
55+
5056
#else
5157

5258
#error ("Sorry! the USB stack relies on LeafLabs board-specific " \

support/ld/olimex_stm32_h103

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
maple

support/make/target-config.mk

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ ifeq ($(BOARD), maple_RET6)
4040
SRAM_SIZE := 65536
4141
endif
4242

43+
ifeq ($(BOARD), olimex_stm32_h103)
44+
MCU := STM32F103RB
45+
PRODUCT_ID := 0003
46+
ERROR_LED_PORT := GPIOC
47+
ERROR_LED_PIN := 12
48+
DENSITY := STM32_MEDIUM_DENSITY
49+
FLASH_SIZE := 131072
50+
SRAM_SIZE := 20480
51+
endif
52+
4353
# Memory target-specific configuration values
4454

4555
ifeq ($(MEMORY_TARGET), ram)

wirish/boards.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ bool boardUsesPin(uint8 pin);
134134
* (...RBT6) on it. Maple Rev6 (as of March 2011) DOES NOT EXIST.
135135
*/
136136
#include "maple_RET6.h"
137+
#elif defined(BOARD_olimex_stm32_h103)
138+
#include "olimex_stm32_h103.h"
137139
#else
138140
/*
139141
* TODO turn this into a warning so people can:
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/******************************************************************************
2+
* The MIT License
3+
*
4+
* Copyright (c) 2011 LeafLabs, LLC.
5+
* Copyright (c) 2011 David Kiliani.
6+
*
7+
* Permission is hereby granted, free of charge, to any person
8+
* obtaining a copy of this software and associated documentation
9+
* files (the "Software"), to deal in the Software without
10+
* restriction, including without limitation the rights to use, copy,
11+
* modify, merge, publish, distribute, sublicense, and/or sell copies
12+
* of the Software, and to permit persons to whom the Software is
13+
* furnished to do so, subject to the following conditions:
14+
*
15+
* The above copyright notice and this permission notice shall be
16+
* included in all copies or substantial portions of the Software.
17+
*
18+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
22+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
23+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25+
* SOFTWARE.
26+
*****************************************************************************/
27+
28+
/**
29+
* @file olimex_stm32_h103.cpp
30+
* @author David Kiliani <mail@davidkiliani.de>
31+
* @brief Olimex STM32_H103 PIN_MAP and boardInit().
32+
*/
33+
34+
#ifdef BOARD_olimex_stm32_h103
35+
36+
#include "olimex_stm32_h103.h"
37+
38+
#include "gpio.h"
39+
#include "timer.h"
40+
#include "wirish_types.h"
41+
42+
void boardInit(void) {
43+
}
44+
45+
extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
46+
47+
/* Header EXT1 */
48+
49+
{GPIOA, TIMER1, NULL, 11, 4, ADCx}, /* D0/EXT1_1/PA11 (USBDM) */
50+
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* D1/EXT1_2/PA8 */
51+
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* D2/EXT1_3/PA12 (USBDP) */
52+
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* D3/EXT1_4/PA9 */
53+
54+
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* D4/EXT1_7/PA10 */
55+
{GPIOC, NULL, NULL, 10, 0, ADCx}, /* D5/EXT1_8/PC10 */
56+
{GPIOC, NULL, NULL, 11, 0, ADCx}, /* D6/EXT1_9/PC11 (USBpull) */
57+
{GPIOC, NULL, NULL, 12, 0, ADCx}, /* D7/EXT1_10/PC12 (LED) */
58+
{GPIOD, NULL, NULL, 2, 0, ADCx}, /* D8/EXT1_11/PD2 */
59+
{GPIOB, NULL, NULL, 5, 0, ADCx}, /* D9/EXT1_12/PB5 */
60+
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* D10/EXT1_13/PB6 */
61+
{GPIOA, TIMER3, ADC1, 6, 1, 6}, /* D11/EXT1_14/PA6 */
62+
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* D12/EXT1_15/PB7 */
63+
{GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* D13/EXT1_16/PB8 */
64+
{GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* D14/EXT1_17/PB9 */
65+
{GPIOA, NULL, ADC1, 5, 0, 5}, /* D15/EXT1_18/PA5 */
66+
{GPIOC, NULL, ADC1, 0, 0, 10}, /* D16/EXT1_19/PC0 */
67+
{GPIOC, NULL, ADC1, 1, 0, 11}, /* D17/EXT1_20/PC1 */
68+
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* D18/EXT1_21/PB0 */
69+
{GPIOA, TIMER3, ADC1, 7, 2, 7}, /* D19/EXT1_22/PA7 */
70+
71+
{GPIOC, NULL, NULL, 13, 0, ADCx}, /* D20/EXT1_24/PC13 */
72+
73+
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* D21/EXT1_26/PB1 */
74+
75+
/* Header EXT2 */
76+
77+
{GPIOC, NULL, ADC1, 2, 0, 12}, /* D22/EXT2_2/PC2 */
78+
79+
{GPIOA, TIMER2, ADC1, 0, 1, 0}, /* D23/EXT2_4/PA0 (BUT) */
80+
81+
{GPIOA, TIMER2, ADC1, 2, 3, 2}, /* D24/EXT2_7/PA2 */
82+
{GPIOA, TIMER2, ADC1, 1, 2, 1}, /* D25/EXT2_8/PA1 */
83+
{GPIOC, NULL, ADC1, 3, 0, 13}, /* D26/EXT2_9/PC3 */
84+
{GPIOA, TIMER2, ADC1, 3, 4, 3}, /* D27/EXT2_10/PA3 */
85+
{GPIOA, NULL, ADC1, 4, 0, 4}, /* D28/EXT2_11/PA4 */
86+
{GPIOC, NULL, ADC1, 4, 0, 14}, /* D29/EXT2_12/PC4 (USB-P) */
87+
{GPIOC, NULL, ADC1, 5, 0, 15}, /* D30/EXT2_13/PC5 */
88+
{GPIOB, NULL, NULL, 10, 0, ADCx}, /* D31/EXT2_14/PB10 */
89+
{GPIOB, NULL, NULL, 11, 0, ADCx}, /* D32/EXT2_15/PB11 */
90+
{GPIOB, NULL, NULL, 13, 0, ADCx}, /* D33/EXT2_16/PB13 */
91+
{GPIOB, NULL, NULL, 12, 0, ADCx}, /* D34/EXT2_17/PB12 */
92+
{GPIOB, NULL, NULL, 14, 0, ADCx}, /* D35/EXT2_18/PB14 */
93+
{GPIOB, NULL, NULL, 15, 0, ADCx}, /* D36/EXT2_19/PB15 */
94+
{GPIOC, NULL, NULL, 6, 0, ADCx}, /* D37/EXT2_20/PC6 */
95+
{GPIOC, NULL, NULL, 7, 0, ADCx}, /* D38/EXT2_21/PC7 */
96+
{GPIOC, NULL, NULL, 8, 0, ADCx}, /* D39/EXT2_22/PC8 */
97+
98+
{GPIOC, NULL, NULL, 9, 0, ADCx}, /* D40/EXT2_24/PC9 */
99+
100+
/* JTAG header */
101+
102+
{GPIOA, NULL, NULL, 13, 0, ADCx}, /* D41/JTAG7/PA13 */
103+
{GPIOA, NULL, NULL, 14, 0, ADCx}, /* D42/JTAG9/PA14 */
104+
{GPIOA, NULL, NULL, 15, 0, ADCx}, /* D43/JTAG5/PA15 */
105+
{GPIOB, NULL, NULL, 3, 0, ADCx}, /* D44/JTAG13/PB3 */
106+
{GPIOB, NULL, NULL, 4, 0, ADCx}, /* D45/JTAG3/PB4 */
107+
};
108+
109+
extern const uint8 boardPWMPins[] __FLASH__ = {
110+
0, 1, 3, 4, 10, 11, 12, 13, 14, 18, 19, 21, 23, 24, 25, 27
111+
};
112+
113+
extern const uint8 boardADCPins[] __FLASH__ = {
114+
11, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
115+
};
116+
117+
extern const uint8 boardUsedPins[] __FLASH__ = {
118+
BOARD_LED_PIN, BOARD_BUTTON_PIN, BOARD_JTMS_SWDIO_PIN,
119+
BOARD_JTCK_SWCLK_PIN, BOARD_JTDI_PIN, BOARD_JTDO_PIN, BOARD_NJTRST_PIN
120+
};
121+
122+
#endif

wirish/boards/olimex_stm32_h103.h

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/******************************************************************************
2+
* The MIT License
3+
*
4+
* Copyright (c) 2011 LeafLabs, LLC.
5+
* Copyright (c) 2011 David Kiliani.
6+
*
7+
* Permission is hereby granted, free of charge, to any person
8+
* obtaining a copy of this software and associated documentation
9+
* files (the "Software"), to deal in the Software without
10+
* restriction, including without limitation the rights to use, copy,
11+
* modify, merge, publish, distribute, sublicense, and/or sell copies
12+
* of the Software, and to permit persons to whom the Software is
13+
* furnished to do so, subject to the following conditions:
14+
*
15+
* The above copyright notice and this permission notice shall be
16+
* included in all copies or substantial portions of the Software.
17+
*
18+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
22+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
23+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25+
* SOFTWARE.
26+
*****************************************************************************/
27+
28+
/**
29+
* @file olimex_stm32_h103.h
30+
* @author David Kiliani <mail@davidkiliani.de>
31+
* @brief Private include file for Olimex STM32_H103 in boards.h
32+
*/
33+
34+
#ifndef _BOARD_OLIMEX_STM32_H103_H_
35+
#define _BOARD_OLIMEX_STM32_H103_H_
36+
37+
#define CYCLES_PER_MICROSECOND 72
38+
#define SYSTICK_RELOAD_VAL 71999 /* takes a cycle to reload */
39+
40+
#define BOARD_BUTTON_PIN 23
41+
#define BOARD_LED_PIN 7
42+
43+
/* Number of USARTs/UARTs whose pins are broken out to headers */
44+
#define BOARD_NR_USARTS 3
45+
46+
/* Default USART pin numbers (not considering AFIO remap) */
47+
#define BOARD_USART1_TX_PIN 3
48+
#define BOARD_USART1_RX_PIN 4
49+
#define BOARD_USART2_TX_PIN 24
50+
#define BOARD_USART2_RX_PIN 27
51+
#define BOARD_USART3_TX_PIN 31
52+
#define BOARD_USART3_RX_PIN 32
53+
54+
/* Number of SPI ports */
55+
#define BOARD_NR_SPI 2
56+
57+
/* Default SPI pin numbers (not considering AFIO remap) */
58+
#define BOARD_SPI1_NSS_PIN 28
59+
#define BOARD_SPI1_MOSI_PIN 19
60+
#define BOARD_SPI1_MISO_PIN 11
61+
#define BOARD_SPI1_SCK_PIN 15
62+
#define BOARD_SPI2_NSS_PIN 34
63+
#define BOARD_SPI2_MOSI_PIN 36
64+
#define BOARD_SPI2_MISO_PIN 35
65+
#define BOARD_SPI2_SCK_PIN 33
66+
67+
/* Total number of GPIO pins that are broken out to headers and
68+
* intended for general use. */
69+
#define BOARD_NR_GPIO_PINS 46
70+
71+
/* Number of pins capable of PWM output */
72+
#define BOARD_NR_PWM_PINS 16
73+
74+
/* Number of pins capable of ADC conversion */
75+
#define BOARD_NR_ADC_PINS 16
76+
77+
/* Number of pins already connected to external hardware. For Maple,
78+
* these are just BOARD_LED_PIN and BOARD_BUTTON_PIN. */
79+
#define BOARD_NR_USED_PINS 7
80+
81+
/* Debug port pins */
82+
#define BOARD_JTMS_SWDIO_PIN 41
83+
#define BOARD_JTCK_SWCLK_PIN 42
84+
#define BOARD_JTDI_PIN 43
85+
#define BOARD_JTDO_PIN 44
86+
#define BOARD_NJTRST_PIN 45
87+
88+
#endif

wirish/rules.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ cppSRCS_$(d) := wirish_math.cpp \
2121
boards/maple_mini.cpp \
2222
boards/maple_native.cpp \
2323
boards/maple_RET6.cpp \
24+
boards/olimex_stm32_h103.cpp \
2425
comm/HardwareSerial.cpp \
2526
comm/HardwareSPI.cpp \
2627
HardwareTimer.cpp \

0 commit comments

Comments
 (0)