Building Your Own 32bit STM32F4xx ARM CORTEX M4 Custom Board

Here at the Satellite Center at Seoul National University, we like to call ourselves aerospace engineers but sometimes reality has this hard way of slapping our butts and reminding us that, in fact, all we are doing is basic embedded engineering. CubeSats are, in a way, an extreme form of embedded system where instead of having it fly around in atmosphere, we have it in space..which of course, brings a lot of questions regarding the integrity of the design. Does it survive the launch? are the electronics radiation tolerant? does the extreme high and low temperature crack upon the thermal integrity of the satellite? and so forth. 

The questions are endless as the space itself. 

But before we get all fancy about space technology, we kind of have to learn from our fellow hobby oriented not-so-serious embedded system designers who have gained a lot of experience and know-how just by etching out a few hours of their time into designing building stuff that are, quite astonishingly, smart and well "engineered." Not only does it just work but they bring in some very simple, straightforward designs to their projects which makes life a hell lot easier. 

Often what you see is that the maker community is largely reliant on 8bit processors on very popular prototyping platforms such as an Arduino to do all the smart stuff. I mean, why not? the IDE is great, easy to use and you get shit done in matter of minutes rather than taking a month just to blink an LED on traditional non-arduino type development board. 

There are, however, times when Arduino is not just good enough and you need  that extra processing power and speed to make, for instance, a camera work and function as it should without relying heavily on the camera's internal DSP (which isn't great to begin with). Depending on the type of hardware processor you are using, there are ample of mouth watering, ass kicking hardware built in such architectures. The STM32F4xx that I use for my camera has an FMC (Flexible Memory Controller), DMA (Direct Memory Access) and DCMI (Digital Camera Interface) which takes NO processing power while transferring data from one memory register to another. That my friend, saves a lot of power and time and also makes your software simpler which makes you a very happy programmer indeed.

I was perfectly happy working with arduinos until I was given the work to make a camera work. Things went pretty nasty after that. After reading some papers, I was convinced that STM32F4 series was the way to go and the rest, as they say, is history.

Now, having played with the hardware for almost a year now, I feel that making the hardware itself isn't the difficult part. It's the software that takes you up on the mountain, throws you from a cliff, lets you then fall onto giant trees made out of equally giant thorns and lets your dying soul be eaten by the most dreadful of scavengers while opening a bag of cheetos and munching on them. That's how brutal the son of a bitch can be.

As Bill Nye "The Science Guy" explained in one of his hosting of the show startalkradio while explaining why Planetary Society's solar sail took ages, "It's the software man, it's the software! You get 95% percent of the work done but you never finish that 5% percent because of the software!"

Ok, enough of the software already. Let's look at the hardware than shall we?

The need to build your custom board will eventually arise whether you like it or not. Most hobbyist just get away using shields and smaller development boards but if your project is on a stringent power budget or needs to be customized in some way or the other, you need to start thinking how you can build own custom processor PCB. That means getting the electronic jigjags correct.

Usually here at the lab, we first make the circuit, test the design on the BBM (BreadBoard Model, some people do have the tendency of taking it in literal sense) and then go on to make the PCB. Nowadays I just get really lazy and skip the BBM part but to have a fairly robust idea of where things can go right and things can go wrong, BBM is the correct way.

So what does a BBM look like?

Back when starting out with Arduino. A BBM is basically it

BBM for Japan's KyuTech's Sub-Nano Satellite looked quite intense
BBM for the camera

Inside the core

You will notice why PCB's are SO much better. Wires are just lines across it. 
Done talking, lets look at the schematics

One of the errors you make while starting out is to place the capacitors neatly aligned somewhere outside instead of being close to the Vcc (power input pins). If you want the bypass filters to actually work, they need to be placed as close as possible. Notice on the picture (before system overlook pic) where the processor is? it looks to be surrounded by small rectangular looking components? Well, those are all the capacitors.

For the custom board I made, I am using an STM32F429ZI, the same one used on the DISCO development board with 144 LQFP packaging. For my final design (which has not been shown here), I decided to go for a 100 LQFP because 1) much less soldering work, 2)less bypass filters required 3)don't need the SRAM as I calculated that the internal memory is sufficient to buffer an QVGA YCbCr 422 image coming out of my camera. So FMC is OUT.

The schematics and pin output for each peripheral is listed out down. The images should be self explanatory, so I will leave you at this, it's lunch time for me.[Peripheral schematic credits: waveshare]

The complete documentation can be found [HERE]