BluePill: Difference between revisions

From SolaceWiki
Jump to navigation Jump to search
No edit summary
Added datasheet
Line 1: Line 1:


The BluePill is an inexpensive Arduino style microcontroller board built around the STMicroelectronics ARM Cortex-M3 STM32F103CT6 microcontroller.  
The BluePill is an inexpensive Arduino style microcontroller board built around the STMicroelectronics ARM Cortex-M3 [https://www.st.com/resource/en/datasheet/stm32f103rc.pdf STM32F103CT6] microcontroller.  


[[File:BluePill pinout.png|frameless|501x501px]]
[[File:BluePill pinout.png|frameless|501x501px]]

Revision as of 16:21, 5 November 2023

The BluePill is an inexpensive Arduino style microcontroller board built around the STMicroelectronics ARM Cortex-M3 STM32F103CT6 microcontroller.


The 32-bit microcontroller runs at 72MHz, has 20k of RAM, 128k of flash, and a shitload of GPIO pins. At around $5 each, it's basically superior to all the Arduino options, at a fraction of the price.

VBAT/5V can accept from 3 - 5VDC.

3V3 pins can alternatively be used to power the chip directly (nothing on the board requires 5V)

VBAT is not connected directly to USB P+. Do not power it from one of the pins and from the USB port at the same time.

The digital I/O pins are 5V tolerant so long as you don't use the internal pullups. The analog ADC is, of course, not 5V tolerant. Best just stick to 3v3 for everything if you can.

To flash:

The USB port is basically useless.

  • Connect a TTL-Serial adapter connected to UART1 (Pins PA9 & PA10 above, A9 A10 on the silkscreen).
  • Set the "boot" jumper (top) to 1 (rightmost position).
  • Press the [RESET] button
  • Start your upload

The program will execute immediately upon uploading, but not upon reset until you set the "boot" jumper back to 0.

PlatformIO Configuration:

platform: ststm32; board: bluepill_f103c8; framework: arduino


platformio.ini settings using arduino framework and TTL Serial Upload:

[env:bluepill_f103c8]

platform = ststm32

board = bluepill_f103c8

framework = arduino

upload_protocol = serial

upload_port = /dev/ttyUSB0 # correct as needed

The 37 GPIOs:

PA0 - PA15, PB0 - PB15, PC13 - PC15.

The Arduino library references them directly by name (e.g. PA0).

Any IO pin can be an interrupt driver, and there are 16 external interrupts configurable.

Good reference on interrupts on the STM32F103C8T6

Analog (0-3.3v) measurement:

The 10 analog input pins are 12-bit resolution (0-4096 int).

Analog inputs: PA0 - PA7, PB0, PB1


PWM Output:

There are 15 PWM outputs total.

PA0 - PA3, PA6 - PA10, PB0 - PB1, PB6 - PB9


!! First set the PWM settings for the chip in your setup():

analogWriteResolution(8); # of bits of PWM resolution, max 16 bits

analogWriteFrequency(1000); # PWM frequency in Hz, max unknown


Then you can use analogWrite(PIN, VALUE) as per usual.

N.B.: If you want to drive a PWM output from an analog reading, you can just set the analogWriteResolution to 12 and then you don't have to map the values!


Misc:

The user-definable LED on the board is sink-ground through PC13. Set PC13 LOW to turn it on. Note: PC13 is not a PWM output.