Welcome, Guest
Username: Password: Secret Key Remember me

TOPIC: New ARM Cortex M3 MCU Board to Play With

New ARM Cortex M3 MCU Board to Play With 3 years 6 months ago #17669

  • hop
  • hop's Avatar
  • Offline
  • Platinum Boarder
  • Posts: 526
  • Thanks received: 46
I found this while searching for a medium range and interesting ARM CORTEX M3 board for my heavier remote projects. Only $2.22 but does not seem to come with a firmware boot loader loaded. I finally found some info to load one and then program it with Arduino IDE 1.6.8. Thank you Roger Clark :)

Same speed but not quite as beefy as the Teensy 3.1 and 3.2's MK20DX256VLH7 Cortex-M4 but considerably cheaper!! Something fun to play with this weekend. I have 5 of them.

STM32F103C8T6 ARM STM32 Minimum System Development Board Module For Arduino

Data Sheets and Other Info
ARM®32-bit Cortex®-M3 CPU Core
72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
Single-cycle multiplication and hardware division
64 or 128 Kbytes of Flash memory
20 Kbytes of SRAM
Clock, reset and supply management
2.0 to 3.6 V application supply and I/Os
POR, PDR, and programmable voltage detector (PVD)
4-to-16 MHz crystal oscillator
Internal 8 MHz factory-trimmed RC
Internal 40 kHz RC
PLL for CPU clock
32 kHz oscillator for RTC with calibration
Sleep, Stop and Standby modes
VBAT supply for RTC and backup registers
2 x 12-bit, 1 μs A/D converters (up to 16 channels)
Conversion range: 0 to 3.6 V
Dual-sample and hold capability
Temperature sensor
7-channel DMA controller
Peripherals supported: timers, ADC, SPIs, I2Cs and USARTs
Up to 80 fast I/O ports
26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
Debug mode
Serial wire debug (SWD) & JTAG interfaces
7 timers
Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
16-bit, motor control PWM timer with dead-time generation and emergency stop
2 watchdog timers (Independent and Window)
SysTick timer 24-bit downcounter
Up to 9 communication interfaces
Up to 2 x I2C interfaces (SMBus/PMBus)
Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)
Up to 2 SPIs (18 Mbit/s)
CAN interface (2.0B Active)
USB 2.0 full-speed interface
CRC calculation unit, 96-bit unique ID
Packages are ECOPACK®
Last Edit: 3 years 6 months ago by hop. Reason: More Info
The following user(s) said Thank You: MMcLaren

New ARM Cortex M3 MCU Board to Play With 2 years 7 months ago #17873

  • hop
  • hop's Avatar
  • Offline
  • Platinum Boarder
  • Posts: 526
  • Thanks received: 46
I posted about this board almost a year ago but ran into issues programming it so I shelved it for a day like today.

Now I can program it, and I can do that with ST-Link, and I can use ST-Link in the Arduino IDE. I want to replace my pro mini 328P 5v boards with a faster, lower power 32 bit board and this one is it I believe. These are actually cheaper than the pro mini now and they are available everywhere!

To take advantage of the ARM M3 Cortex core, I had to use a newer Arduino IDE (1.6.12) but it seems to work just fine. I had to isolate it from my other versions, but once I did that, I have no library conflicts at all. What made this all possible was the STM32 Discovery 152C Disco I noticed Dave Jones of EEVblog did a video on. It is still around $13 and it sports the same processor... the STM32F103C8T6 for the ST-Link section of the board. With the ST-Link jumpers removed, you can use the SWD 6 pin header to program other ST-Link boards, including the board I started this thread with. Once I installed the ST-Link drivers, it appeared just fine in my device manager.

There were other hoops I had to jump through, like removing the protection from the device through the processor settings. Piece of cake using the free ST-Link app.

The projects I will use this for right now are holiday lighting projects using the blue board and the WS2812b RGB LED device. There is a fork of fastled for the STM32 platform on github but you have to isolate the Arduino IDE version you are using. Simple stuff really, just change the sketch folder to one in the folder hierarchy you have your unique ide extracted to. Outside of a pragma note that throws, compiling the test code was error free. I am getting ready to test that.

It is important to note that the WS2812B devices are 5v. But thanks to a hack on hackaday, it is real easy to get around this with a simple signal diode. I am testing using a 1n4148. The theory here is that the first LED is sacrificial, used as an indicator LED perhaps. The diode offers a .7vdc voltage drop to the supply of the first device, and 5vdc supplies the rest of the array. The data signal to the first device is 3.3v but it's "data bit on" range is adequate because of the altered VDD. The signal is conditioned and sent to the next device which is powered by 5vdc. It supposedly works and eliminates the need for level shifting circuitry, but that remains to be seen by me. I will know in about an hour.

This is simple work with a simple application, but with the available peripherals and the processing speed, there is a lot I can do with this MCU. The ultimate goal for me is to pair it with a simple ESP8266 and a small OLED display as a development unit for my WS2812B RGB LED projects. With my MQTT network screaming along for over a year, all these effects projects can be controlled from my home network via wifi.

More comparison data... (source - forum.arduino.cc/index.php?topic=431169.0)
STM32F103C8T6 (at 72 MHz) vs ATMEGA328P 5v (at 16 MHz)
Generic STM32F103C8T6 72MHz (Cortex-M3)
INT_LOOP(30000) bench...= 2924 microseconds 10.26MIPS
LONG_LOOP(30000) bench...= 2926 microseconds 10.25MIPS
FLOAT_DIV(30000) bench...= 27979 microseconds 1.20MFLOPS
DOUBLE_DIV(30000) bench...= 38000 microseconds 0.86MFLOPS
FLOAT_MUL(30000) bench...= 20463 microseconds 1.71MFLOPS
DOUBLE_MUL(30000) bench...= 25891 microseconds 1.31MFLOPS

Arduino Nano (ATMega328 16MHz AVR)
INT_LOOP(30000) bench...= 7544 microseconds 3.98MIPS
LONG_LOOP(30000) bench...= 13408 microseconds 2.24MIPS
FLOAT_DIV(30000) bench...= 154792 microseconds 0.21MFLOPS
DOUBLE_DIV(30000) bench...= 154800 microseconds 0.21MFLOPS
FLOAT_MUL(30000) bench...= 156744 microseconds 0.21MFLOPS
DOUBLE_MUL(30000) bench...= 156736 microseconds 0.21MFLOPS

I was going to offer a peripheral comparison but it will be a little more involved than I have time for so here are the datasheets for each processor mentioned.

More as I discover it! :woohoo:

New ARM Cortex M3 MCU Board to Play With 2 years 7 months ago #17874

  • hop
  • hop's Avatar
  • Offline
  • Platinum Boarder
  • Posts: 526
  • Thanks received: 46
OK I just discovered something worth mentioning, and one of the reasons I decided to invest my time with this processor.

I started as a Microchip PIC guy, and still love their MCU's, but STM has really taken setting up this chip in code to a new level, using the peripherals you want to use, and how you want to use them. Their app... STM32CubeMX allows you to select the peripherals you need, configure them the way you need them, and then generates the initialization code to set that up.

I have not tried this yet because I have not jumped into deeper more MAD-SCIENTIST stuff yet. Mostly because I am using the Arduino IDE hand-holding to give me the application programming environment to get my current apps the support they need to become real. But once I dive into this, and maybe switch to (GASP, PUKE, WONDER WHY) Eclipse for my C++ writing, this generated code might become viable.

Just wanted to mention this. Check it out!
Last Edit: 2 years 7 months ago by hop. Reason: Gramacal Errors

New ARM Cortex M3 MCU Board to Play With 2 years 7 months ago #17875

  • hop
  • hop's Avatar
  • Offline
  • Platinum Boarder
  • Posts: 526
  • Thanks received: 46
I really need to spend some time on inter-connectivity and communications between higher-end MCU's. I am still using UART RS232 to talk between them and it needs to be stepped up. Yeah, UART coms are so much faster than they use to be, but exchanging data at SPI rates is so much faster. I need to learn CAN, I2C, SPI, and DMA big time.

To open up and use high rate serial channels between devices is the way to go now. I just haven't opened up that Pandora's Box yet. Any suggestions would be welcome. There are libraries that allow you to program a ESP8266 from your LAN via WiFi, but it would be awesome if say the ESP8266 could implement the ST-Link protocol and program other devices it is connected to. Then you have a multi-mcu project that is completely capable of being updated via WiFi from your desktop, laptop, tablet, or phone. This is important to me because I plan to deploy this MCU mix to remote areas in my house, and would rather not remove them and "plug them in" to update their firmware.

New ARM Cortex M3 MCU Board to Play With 2 years 7 months ago #17876

  • hop
  • hop's Avatar
  • Offline
  • Platinum Boarder
  • Posts: 526
  • Thanks received: 46
I found a good write up on my inter-connected on-board MCU communications issue...
Last Edit: 2 years 6 months ago by hop. Reason: Gramar

New ARM Cortex M3 MCU Board to Play With 2 years 7 months ago #17877

  • hop
  • hop's Avatar
  • Offline
  • Platinum Boarder
  • Posts: 526
  • Thanks received: 46
I decided that my IoT general purpose board will use a simple ESP8266, a STM32F103C8T6 Blue board, and some support hardware. The ESP8266 has some nice processing power, but fairly limited as stand-alone or at least difficult to work with that way. So the ESP8266 in my general purpose project board will be set up to handle MQTT, a simple web server interface, and some communication support with the STM other than rs232 serial. I am looking for the fastest communications I can manage between the two modules but the STM will handle the heavy lifting. Solenoids, interaction, displays, PWM, sensor data gathering, etc.

Hopefully I can use the ESP to handle WiFi firmware upgrades to all the project boards MCU's. Not really appropriate to post about that here, so I will start a thread in the projects section when needed. It is definitely safe to say that I have moved to the M3 Cortex though, from the Pro Mini ATMEGA328P. I will still use the Pro Mini, but for intelligent sensor or module management in a I2C, SPI, or CAN implementation. I'm excited!
The following user(s) said Thank You: Jon Chandler
Time to create page: 0.263 seconds