BluePill
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 can accept from 3 - 5VDC.
3V3 pins can alternatively be used to power the chip directly.
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.
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
Analog (0-3.3v) measurement:
The 10 analog input pins are 12-bit resolution.
Analog inputs: PA0 - PA7, PB0, PB1
PWM Output:
There are 15 PWM pins 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.