1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

boards/common/blxxxpill: rework periph configuration

The peripheral configuration has been completely reworked to resolve
pin conflicts while provided as much of the peripherals as possible.
The changes include:

- Move `I2C_DEV(0)` from PB6/PB7 to PB8/PB9 to solve pin conflict with
  `QDEC_DEV(2)`.
- Use pins PB0, PB1, PB4, and PB5 for PWM instead PA8, PA9, PA10, and
  PA11
    - PA9 and PA10 is in pin conflict with `UART_DEV(0)` which is used
      for stdio with `stdio_uart`, PA8 was in conflict with
      `QDEC_DEV(0)`, PA11 was in conflict with USB D-
- Use PB6, PB7 as `QDEC_DEV(0)` (previously `QDEC_DEV(2)`), as this is
  the only completely conflict free setting
- Use PB4/PB5 instead of PA6/PA7 for QDEC_DEV(1)
    - This fixes a pin conflict with `SPI_DEV(0)` MISO (and
      `ADC_LINE(4)`)
- Only provide QDEC at PB4/PB5 when PWM is not used to avoid conflict
- Only provide QDEC at PA8/PA9 when UART is not used to avoid conflict
- Use SPI2 (PB15, PB14, PB13, PB12) as `SPI_DEV(0)` instead of SPI1,
  use SPI1 (PA7, PA6, PA5, PA4) as `SPI_DEV(1)`
- Only provide `SPI_DEV(1)` if the ADC is not in used to resolve a
  pin conflict
- Move PB0 and PB1 at the end of the ADC lines (previously
  `ADC_LINE(6)` and `ADC_LINE(7)`, now `ADC_LINE(8)` and `ADC_LINE(9)`)
   - Only provide them when PWM is not in use (to resolve pin conflict
     with PWM)
   - Also do not provide them for the Blackpill boards, which are
     missing pins PB0 and PB1 on the headers

To make life of users easier, a Pinout diagram with the new
configuration was added.
This commit is contained in:
Marian Buschsieweke 2022-10-21 18:27:54 +02:00
parent 5ddc332b52
commit 051a1f1e32
No known key found for this signature in database
GPG Key ID: CB8E3238CE715A94
6 changed files with 9011 additions and 49 deletions

View File

@ -13,10 +13,10 @@ There are also versions that only report to have 32 KiB, but actually have
64 KiB.
## Hardware
## Pinout
![pinout](pinouts/pinout-bluepill.svg)
![bluepill]
(https://camo.githubusercontent.com/6122268d77e4677a08d0e13e2e2aaf070a0a6a69/687474703a2f2f73312e62696c642e6d652f62696c6465722f3131303431372f38383135303232313438363837343334302e6a7067)
### MCU
| MCU | STM32F103C8 |

View File

@ -0,0 +1,6 @@
Pinout Generation
=================
[GenPinoutSVG](https://github.com/stevenj/GenPinoutSVG) was used to generate
the Pinout diagram. The only post-processing applied was cropping the SVG to its
contents.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 705 KiB

View File

@ -0,0 +1,122 @@
LABELS,DEFAULT,TYPE,GROUP,Name, Official Name, GPIO, Analog 1, Analog 2, RTC, Func 1, Func 2, Func 3
BORDER COLOR, grey
BORDER WIDTH, 2
BORDER OPACITY, 1
FILL COLOR, white, white, white, deepskyblue, gray, green, purple, yellow, orange, red, gold, brown
OPACITY, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
FONT , Rubik, , , Work Sans, Work Sans
FONT SIZE , 25, , , 25, 25
FONT COLOR , black, , , , , white
FONT SLANT , normal , , , , ,
FONT BOLD , 700 , , , 700
FONT STRETCH , normal
FONT OUTLINE , yellow , , , , blue
FONT OUTLINE THICKNESS, 0.1
BOXES, STD, , , PIN BOX, NAME BOX, SKEWED, SKEWED, SKEWED, SKEWED, SKEWED, SKEWED, SKEWED
TYPE, IO, black, 1
TYPE, INPUT, black, 1
TYPE, OUTPUT, black, 1
WIRE, DIGITAL, black, 1, 5
WIRE, PWM, black, 1, 5
WIRE, ANALOG, black, 1, 5
WIRE, POWER, black, 1, 10
GROUP, NONE, grey, 0.1
BOX, STD, black, 1, white, 0, 1, 100,55,2,2,0,0
BOX, PIN BOX, black, 1, white, 0, 1, 80, 55, 5, 5, -10, 0
BOX, NAME BOX, black, 1, white, 0, 1, 125, 55, 5, 5, -10, 0
BOX, SKEWED, black, 1, white, 0, 1, 125,55,5,5,-10,0
BOX, PAGE BORDER, black, 1, white, 1, 50, 100,100,0,0,0,0
BOX, DETAIL BOX, darkblue, 1, white, 0, 3, 250, 200, 15,15,0,0
PAGE, A4-L
DPI, 300
DRAW
# Add image of board
ICON, bluepill-top-view.svg, 880, 908, 100%, 100%
BOX, DETAIL BOX, 1800, 100, 1100, 300, , TOP, "Legend"
ANCHOR, 1820,140
PINSET, RIGHT, PACKED, CENTER, CENTER, 74.75, 30, 45, 60, 10, 0
# wire, type, group, pin-name, comment, analog, PWM, SPI, I2C, POWER, UART, QDEC
PIN, DIGITAL, INPUT, NONE, , Input
PIN, DIGITAL, OUTPUT, NONE, , Output
PIN, DIGITAL, IO, NONE, , "I/O"
ANCHOR, 2220,140
PINSET, RIGHT, PACKED, CENTER, CENTER, 74.75, 30, 45, 60, 10, 0
PIN, ANALOG, IO, NONE, , , Analog
PIN, PWM, IO, NONE, , , , PWM
PIN, DIGITAL, IO, NONE, , , , , SPI
ANCHOR, 2640,140
PINSET, RIGHT, PACKED, CENTER, CENTER, 74.75, 30, 45, 60, 10, 0
PIN, DIGITAL, IO, NONE, , , , , , I2C
PIN, DIGITAL, IO, NONE, , , , , , , , UART
PIN, POWER, IO, NONE, , , , , , , Power
BOX, DETAIL BOX, 1800, 500, 1100, 220, , TOP, "Internally Connected to ADC"
ANCHOR, 1820,540
PINSET, RIGHT, PACKED, CENTER, CENTER, 74.75, 30, 45, 60, 10, 0
# wire, type, group, pin-name, comment, analog, PWM, SPI, I2C, POWER, UART, QDEC
PIN, ANALOG, IO, NONE, NTC, , "A6"
PIN, ANALOG, IO, NONE, VREF, , "A7"
BOX, DETAIL BOX, 1800, 800, 1100, 220, , TOP, "Default Interface for STDIO"
MESSAGE, 1820, 860, 48, Name, 36, LEFT, TOP
TEXT, none, black, "UART for STM32F103C8 (64 KiB flash)", NL
TEXT, none, black, "USB for STM32F103CB (128 KiB flash)", NL
# Left Side Pins
ANCHOR, 520,170
PINSET, LEFT, PACKED, CENTER, CENTER, 74.75, 30, 45, 60, 10, 0
# wire, type, group, pin-name, comment, analog, PWM, SPI, I2C, POWER, UART, QDEC
PIN, ANALOG, INPUT, NONE, , "VAT"
PIN, DIGITAL, OUTPUT, NONE, "PC 13", "LED1"
PIN, DIGITAL, IO, NONE, "PC 14"
PIN, DIGITAL, IO, NONE, "PC 15"
PIN, ANALOG, IO, NONE, "PA 0", , "A0"
PIN, DIGITAL, IO, NONE, "PA 1", , "A1"
PIN, DIGITAL, OUTPUT, NONE, "PA 2", , , , , , , "TX1"
PIN, DIGITAL, INPUT, NONE, "PA 3", , , , , , , "RX1"
PIN, DIGITAL, OUTPUT, NONE, "PA 4", , "A2", , "CS1"
PIN, DIGITAL, OUTPUT, NONE, "PA 5", , "A3", , "SCLK1"
PIN, DIGITAL, INPUT, NONE, "PA 6", , "A4", , "MISO1"
PIN, DIGITAL, OUTPUT, NONE, "PA 7", , "A5", , "MOSI1"
PIN, PWM, OUTPUT, NONE, "PB 0", , "A8", "PWM2"
PIN, PWM, OUTPUT, NONE, "PB 1", , "A9", "PWM3"
PIN, DIGITAL, OUTPUT, NONE, "PB 10", , , , , "SCL1", , "TX2"
PIN, DIGITAL, INPUT, NONE, "PB 11", , , , , "SDA1", , "RX2"
PIN, DIGITAL, INPUT, NONE, , "RESET"
PIN, POWER, OUTPUT, NONE, , , , , , , "+3.3V"
PIN, POWER, OUTPUT, NONE, , , , , , , "GND"
PIN, POWER, OUTPUT, NONE, , , , , , , "GND"
# Right Side Pins
ANCHOR, 1235,170
PINSET, RIGHT, PACKED, CENTER, CENTER, 74.75, 30, 45, 60, 10, 0
# wire, type, group, pin-name, comment, analog, PWM, SPI, I2C, POWER, UART, QDEC
PIN, POWER, OUTPUT, NONE, , , , , , , "+3.3V"
PIN, POWER, OUTPUT, NONE, , , , , , , "GND"
PIN, POWER, OUTPUT, NONE, , , , , , , "+5V"
PIN, DIGITAL, IO, NONE, "PB 9", , , , , "SDA0"
PIN, DIGITAL, IO, NONE, "PB 8", , , , , "SCL0"
PIN, DIGITAL, INPUT, NONE, "PB 7", , , , , , , , "QDEC0-B"
PIN, DIGITAL, INPUT, NONE, "PB 6", , , , , , , , "QDEC0-A"
PIN, PWM, OUTPUT, NONE, "PB 5", , , "PWM1"
PIN, PWM, IO, NONE, "PB 4", , , "PWM0", , , , , "QDEC1-A"
PIN, DIGITAL, INPUT, NONE, "PB 3", , , , , , , , "QDEC1-B"
PIN, DIGITAL, IO, NONE, "PA 15"
PIN, DIGITAL, IO, NONE, "PA 12", "USB D+\\nstdio"
PIN, DIGITAL, IO, NONE, "PA 11", "USB D-\\nstdio"
PIN, DIGITAL, OUTPUT, NONE, "PA 10", "stdio", , , , , , "TX0"
PIN, DIGITAL, INPUT, NONE, "PA 9", "stdio", , , , , , "RX0", "QDEC2-A"
PIN, DIGITAL, IO, NONE, "PA 8", , , , , , , , "QDEC2-B"
PIN, DIGITAL, OUTPUT, NONE, "PB 15", , , , "MOSI0"
PIN, DIGITAL, INPUT, NONE, "PB 14", , , , "MISO0"
PIN, DIGITAL, OUTPUT, NONE, "PB 13", , , , "SCLK0"
PIN, DIGITAL, OUTPUT, NONE, "PB 12", , , , "CS0"
Can't render this file because it has a wrong number of fields in line 2.

View File

@ -61,12 +61,21 @@ static const adc_conf_t adc_config[] = {
{ .pin = GPIO_PIN(PORT_A, 5), .dev = 0, .chan = 5 },
{ .pin = GPIO_PIN(PORT_A, 6), .dev = 0, .chan = 6 },
{ .pin = GPIO_PIN(PORT_A, 7), .dev = 0, .chan = 7 },
{ .pin = GPIO_PIN(PORT_B, 0), .dev = 0, .chan = 8 },
{ .pin = GPIO_PIN(PORT_B, 1), .dev = 0, .chan = 9 },
/* ADC Temperature channel */
{ .pin = GPIO_UNDEF, .dev = 0, .chan = 16 },
/* ADC VREF channel */
{ .pin = GPIO_UNDEF, .dev = 0, .chan = 17 },
/* The blackpill has a few pins less. PB0 and PB1 are among the GPIOs not
* exposed due to the lower pincount.
*
* Also, this conflicts with PWM. We prefer PWM over ADC here to provide
* 6 external ADC inputs, and 4 PWM outputs (instead of 8 ADC inputs and
* 2 PWM outputs). */
#if !defined(BOARD_BLACKPILL) && !defined(BOARD_BLACKPILL_128KIB) \
&& !defined(MODULE_PERIPH_PWM)
{ .pin = GPIO_PIN(PORT_B, 0), .dev = 0, .chan = 8 },
{ .pin = GPIO_PIN(PORT_B, 1), .dev = 0, .chan = 9 },
#endif
};
#define ADC_NUMOF ARRAY_SIZE(adc_config)
@ -134,33 +143,41 @@ static const timer_conf_t timer_config[] = {
*/
static const qdec_conf_t qdec_config[] = {
{
.dev = TIM4,
.max = 0x0000ffff,
.rcc_mask = RCC_APB1ENR_TIM4EN,
.chan = { { .pin = GPIO_PIN(PORT_B, 6), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_B, 7), .cc_chan = 1 } },
.bus = APB1,
.irqn = TIM4_IRQn,
},
/* this conflicts with PWM */
#ifndef MODULE_PERIPH_PWM
{
.dev = TIM3,
.max = 0x0000ffff,
.rcc_mask = RCC_APB1ENR_TIM3EN,
.chan = { { .pin = GPIO_PIN(PORT_B, 4), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_B, 5), .cc_chan = 1 } },
/* by default TIM3 is routed to PA6 (cc_chan 0) and PA7 (cc_chan 1) */
.remap = AFIO_MAPR_TIM3_REMAP_1,
.bus = APB1,
.irqn = TIM3_IRQn,
},
#endif
/* this conflicts with UART_DEV(0) */
#ifndef MODULE_PERIPH_UART
{
.dev = TIM1,
.max = 0x0000ffff,
.rcc_mask = RCC_APB2ENR_TIM1EN,
.chan = { { .pin = GPIO_PIN(PORT_A, 8), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_A, 9), .cc_chan = 1 } },
.chan = { { .pin = GPIO_PIN(PORT_A, 8), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_A, 9), .cc_chan = 1 } },
.bus = APB2,
.irqn = TIM1_UP_IRQn
},
{
.dev = TIM3,
.max = 0x0000ffff,
.rcc_mask = RCC_APB1ENR_TIM3EN,
.chan = { { .pin = GPIO_PIN(PORT_A, 6), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_A, 7), .cc_chan = 1 } },
.bus = APB1,
.irqn = TIM3_IRQn
},
{
.dev = TIM4,
.max = 0x0000ffff,
.rcc_mask = RCC_APB1ENR_TIM4EN,
.chan = { { .pin = GPIO_PIN(PORT_B, 6), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_B, 7), .cc_chan = 1 } },
.bus = APB1,
.irqn = TIM4_IRQn
}
#endif
};
#define QDEC_NUMOF ARRAY_SIZE(qdec_config)
@ -225,8 +242,8 @@ static const i2c_conf_t i2c_config[] = {
{
.dev = I2C1,
.speed = I2C_SPEED_NORMAL,
.scl_pin = GPIO_PIN(PORT_B, 6),
.sda_pin = GPIO_PIN(PORT_B, 7),
.scl_pin = GPIO_PIN(PORT_B, 8),
.sda_pin = GPIO_PIN(PORT_B, 9),
.bus = APB1,
.rcc_mask = RCC_APB1ENR_I2C1EN,
.clk = CLOCK_APB1,
@ -256,15 +273,24 @@ static const i2c_conf_t i2c_config[] = {
*/
static const pwm_conf_t pwm_config[] = {
{
.dev = TIM1,
.rcc_mask = RCC_APB2ENR_TIM1EN,
.chan = { { .pin = GPIO_PIN(PORT_A, 8), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_A, 9), .cc_chan = 1 },
{ .pin = GPIO_PIN(PORT_A, 10), .cc_chan = 2 },
{ .pin = GPIO_PIN(PORT_A, 11), .cc_chan = 3 } },
.dev = TIM3,
.rcc_mask = RCC_APB1ENR_TIM3EN,
/* by default TIM3 is routed to PA6 (cc_chan 0) and PA7 (cc_chan 1) */
.remap = AFIO_MAPR_TIM3_REMAP_1,
.chan = {
{ .pin = GPIO_PIN(PORT_B, 4), .cc_chan = 0 },
{ .pin = GPIO_PIN(PORT_B, 5), .cc_chan = 1 },
#if !defined(BOARD_BLACKPILL) && !defined(BOARD_BLACKPILL_128KIB)
/* The blackpill has a few pins less. PB0 and PB1 are
* among the GPIOs not exposed due to the lower
* pincount */
{ .pin = GPIO_PIN(PORT_B, 0), .cc_chan = 2 },
{ .pin = GPIO_PIN(PORT_B, 1), .cc_chan = 3 },
#endif
},
.af = GPIO_AF_OUT_PP,
.bus = APB2
}
.bus = APB1,
},
};
#define PWM_NUMOF ARRAY_SIZE(pwm_config)
@ -275,6 +301,22 @@ static const pwm_conf_t pwm_config[] = {
* @{
*/
static const spi_conf_t spi_config[] = {
{
.dev = SPI2,
.mosi_pin = GPIO_PIN(PORT_B, 15),
.miso_pin = GPIO_PIN(PORT_B, 14),
.sclk_pin = GPIO_PIN(PORT_B, 13),
.cs_pin = GPIO_PIN(PORT_B, 12),
.rccmask = RCC_APB1ENR_SPI2EN,
.apbbus = APB1,
#ifdef MODULE_PERIPH_DMA
.tx_dma = 3,
.tx_dma_chan = DMA_CHAN_CONFIG_UNSUPPORTED,
.rx_dma = 2,
.rx_dma_chan = DMA_CHAN_CONFIG_UNSUPPORTED
#endif
},
#ifndef MODULE_PERIPH_ADC
{
.dev = SPI1,
.mosi_pin = GPIO_PIN(PORT_A, 7),
@ -290,21 +332,7 @@ static const spi_conf_t spi_config[] = {
.rx_dma_chan = DMA_CHAN_CONFIG_UNSUPPORTED
#endif
},
{
.dev = SPI2,
.mosi_pin = GPIO_PIN(PORT_B, 15),
.miso_pin = GPIO_PIN(PORT_B, 14),
.sclk_pin = GPIO_PIN(PORT_B, 13),
.cs_pin = GPIO_PIN(PORT_B, 12),
.rccmask = RCC_APB1ENR_SPI2EN,
.apbbus = APB1,
#ifdef MODULE_PERIPH_DMA
.tx_dma = 3,
.tx_dma_chan = DMA_CHAN_CONFIG_UNSUPPORTED,
.rx_dma = 2,
.rx_dma_chan = DMA_CHAN_CONFIG_UNSUPPORTED
#endif
}
};
#define SPI_NUMOF ARRAY_SIZE(spi_config)

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.0 MiB