The ARM Cortex-M microcontrollers are more and more prevalent among electronics hobbyists and enthusiasts. Even the Arduino family have stepped out of the 8-bit world and have some 32-bit versions, starting with the Due, and growing with the Zero and many more community-driven development boards.
Suppliers of ARM Cortex-M chips are also numerous and wide-spread, but few can match (and/or beat) the variety and options that are covered by the offerings from ST Microelectronics. Their STM32 lines have so many variants, allowing for very easy selection of the most effective price-vs-features-vs-needs microcontroller for a particular application. What's more, ST has some very affordable development boards such as the DISCOVERY and the NUCLEO. Together with the freely downloadable support libraries and peripheral drivers directly from the manufacturer's web page, it makes for a very easy induction into development on the STM32 ARM platform either as a hobby, or rolling-out of a commercial product.
Why then did I elect to create my own development board? Let's face it, were I to offer this one for sale, I would never be able to match the low prices for ST's own baseboards. But even though I own many of the DISCOVEY and NUCLEO boards, I find some of their features either annoying or inadequate. For example, the Discovery boards have way too many features that rely on external components like MEMS or other, which take pins away from the developer (even though most often they used a main chip with a very high pin count). When I want to use one of the used pins - if I could at all - I'd have to go in with a soldering iron and do some board surgery on some unsuspecting bridges or resistors, which is hard to do when they are in size 0402 or smaller. I actually view the Discovery line as more of a capability demonstration tool, rather than a development tool. Nucleo on the other side have either versions with 64-pin packages, or 144-pin - but nothing in between. In my own designs I often reach the limits of available pins on 64-pin microcontrollers, which also do not offer all of the possible peripherals as with the bigger packages. And the 144-pin packages are often quite expensive for hobby entusiasts, at least for me. Couple this with the Arduino form factor and shield pinout (you can already guess, I am not a fan...), and there you have the main reasons that lead to this project.
I set myself a few goals before I started this project, which influenced the design:
- Go with a mid-range MCU package - while I wanted as much memory and flash available, I did not want to use a package with the highest pin count as this adds to the cost. On the other hand, I wanted more pins and peripherals present, than available on the basic Nucleo boards;
- Break out as many pins as possible to headers for ease of use in development - I have only a few pins, which are permanently taken by some function, as compared to the Discovery boards;
- Make it easy to develop USB applications - requires the presense of a USB connector on board, I went with microUSB-B;
- Allow for development of applicatios which support firmware update over USB - addition of a BOOT0 button to go into bootloader mode;
- Simplify development of applications which require external files - I find myself using more and more external resources, so I added a microSD card connector on board;
- Do not use too many solder bridges and make any easy to manipulate - the very few bridges I have are all on the bottom side of the board, where there are no components.
The board can be used with the 100-pin package versions of the STM32L4x6 line of microcontrollers. I have included an additional 128KB Quad-SPI SRAM chip on board, an RGB LED, and - as already mentioned - a USB and a microSD card connectors. The board has a barrel jack accepting 7V to 15V DC supply voltage, but can be also powered via the USB 5V line. There is a switch which allows to change the 5V on the USB connector from externally supplied to provided from the onboard 5V LDO - for use in USB OTG applications; when the USB power is provided by the board, there is additional protection to prevent other OTG devices to pull more than 500mA of current. The MCU pins are broken out to two 2x20 0.1" headers, which are stackable on both top and bottom sides. They also provide access to the 2 power rails - 3V3 and 5V. The chip is programmable through a 10 pin SWD connector with 0.05" pin pitch.
I am planning to add extra functionality through additional boards using the stackable headers. The first in line are a LiPo battery with charging circuit, a CAN shield, and two TFT LCDs - one with SPI bus access, the other one using the FSMC peripheral on-chip to drive the display in 16-bit parallel mode.