The microcontroller is configured to use the External High Speed clock (HSE), at 8 MHz, and set the SYSCLK at 72 MHz. The AHB is at 72 MHz as well (the AHB divider is set to 1 by default). The AHB clock is used to generate the SysTick interruptions. For more information have a look at the STM32F10xxx Reference Manual [3].


The robot can communicate with the world using an HC-05 serial bluetooth [1] module. This module is configured with a baud rate of 921600, 8 bits data, 1 stop bit, no parity and no flow control.


Timers 1 and 4 are configured to read quadrature encoders (and thus, connected to the IE2-512 encoder [2] channels A and B). They are both configured to count on both TI1 and TI2 edges.


Gyros are selected as the clock source for accuracy (versus the internal relaxation oscillator suitable for lower power consumption when only accelerometer is being used).

The MPU-6500 gyro features the following SPI operational features:

  • Data is delivered MSB first and LSB last.
  • Data is latched on the rising edge of SCLK.
  • Data should be transitioned on the falling edge of SCLK.
  • The maximum frequency of SCLK is 1 MHz. Although the sensor and interrupt registers may be read using SPI at 20 MHz.
  • Read/write operations are completed in 16+ cycles (2+ bytes).
  • First byte contains the SPI address, and the following the SPI data.
  • First bit of the first byte contains the Read (1) / Write (0) bit.
  • The following 7 bits contain the Register Address.
  • In cases of multiple-byte read/writes, data is two or more bytes.



Pin Function Type Connected to
PA0 ADC12_IN0 Input Battery voltage
PA1 N/A N/A Not connected
PA2 ADC12_IN2 Input Receiver front right
PA3 ADC12_IN3 Input Receiver side right
PA4 ADC12_IN4 Input Receiver side left
PA5 ADC12_IN5 Input Receiver front left
PA6 TIM3_CH1 Input Motor driver IN1 (left)
PA7 TIM3_CH2 Input Motor driver IN2 (left)
PA8 GPIO Output Emitter left front
PA9 GPIO Output Emitter left side
PA10 TIM1_CH3 Output Speaker signal
PA11 GPIO Input Button left
PA12 GPIO Input Button right
PA15 TIM2_CH1 Input Encoder left, channel A
PB0 TIM3_CH3 Output Motor driver IN3 (right)
PB1 TIM3_CH4 Output Motor driver IN4 (right)
PB3 TIM2_CH2 Input Encoder left, channel B
PB4 GPIO Output LED left
PB5 GPIO Output LED right
PB6 TIM4_CH1 Input Encoder right, channel B
PB7 TIM4_CH2 Input Encoder right, channel A
PB8 GPIO Output Emitter right side
PB9 GPIO Output Emitter right front
PB10 USART3_TX Output Bluetooth RX
PB11 USART3_RX Input Bluetooth TX
PB12 NSS2 Output Gyroscope NCS (SPI-CS)
PB13 SCK2 Output Gyroscope SCL (SPI-SCLK)
PB14 MISO2 Input Gyroscope AD0 (SPI-SDO)
PB15 MOSI2 Output Gyroscope SDA (SPI-SDI)
PC13 N/A N/A Not connected
PC14 N/A N/A Not connected
PC15 N/A N/A Not connected

Motor driver

Pin Connected to
IN1 Defined in Bluepill pinout
IN2 Defined in Bluepill pinout
IN3 Defined in Bluepill pinout
IN4 Defined in Bluepill pinout
OUT1 Motor left + (pin 2)
OUT2 Motor left - (pin 1)
OUT3 Motor right - (pin 1)
OUT4 Motor right + (pin 2)
EEP 50 kΩ pull-up to 5V (J2 jumper is open)
ULT Not connected
VCC Vmot


The configuration for interruptions (IRQ) and SysTick exceptions has been deduced taking into account that:

  • The priority is configurable, the exception and the IRQ numbers are fixed.
  • If the software does not configure any priority, then all exceptions with a configurable priority have a priority of 0. We didn’t find any reference on the documentation but for experience it seems that by default SysTick exception has higher priority than any interruption.
  • For System Handlers, the lowest priority value has precedence over the lowest exception number value.
  • For Interrupt service routines (ISR) the precedence is: lowest group priority value, lowest subpriority value and lowest IRQ number value. For now, there are not any subpriority value configured for this project.
  • The preemption happens just for higher priority exceptions (nothing to do with exception number or subpriority).

For more information have a look at the STM32F10xxx/20xxx/21xxx/L1xxxx Cortex®-M3 programming manual [4].

Exceptions Handler Excep num IRQ num Priority Functionality
SysTick System 15 -1 1 Control and algorithm
ADC1_2 ISR N/A 18 1 Battery low level
TIM1_UP ISR N/A 25 0 Infrared state machine
USART3 ISR N/A 39 1 Bluetooth


Pin Function Connected to
SCL SPI-SCLK Defined in Bluepill pinout
SDA SPI-SDI Defined in Bluepill pinout
EDA N/A Not connected
ECL N/A Not connected
AD0 SPI-SDO Defined in Bluepill pinout
INT N/A Not connected
NCS SPI-CS Defined in Bluepill pinout
FSYNC N/A Not connected
VCC Power 5V