My experience is with considerably bigger BLDC motors of the AC servo persuasion so this may not apply exactly on these small motors. Still here goes.
The minimum you need is to apply voltage correctly phased to the 3 phase stator to achieve rotation in the first place. The phase info is available either by magnets/hall sensors giving you the 60 degree sector of the nominal rotor position, or by measuring the back EMF from a currently unenergized stator winding. One or the other you have to do or if not, failure is guaranteed.
Next, there is a subtle difference between motors that are called BLDC (brushless DC) and motors that tend to be called PMSM (permanent magnet synchronous motors). Both are 3 phase electronically commutated motors (so the DC part is BS as far as the motor itself is concerned) but the magnet circuit (the "iron") in BLDC is optimized for trapezoidal voltage waveform and PMSM is optimized for sinusoidal. You tend to get a trapezoidal waveform from a 3 phase bridge inverter that are the standard power supply for BLDCs.
Then the question of how to control a BLDC. Overwhelmingly the most common is an FPGA or ASIC to drive the bridge and a DSP to calculate the necessary transforms. The DSP can of course be a soft processor embedded in the FPGA but often it is not. TI's TMS320 is a popular choice for that.
There are "simple" ways to control the driver bridge by just producing approximately correct phase and speed dependent voltage by pwm control. This would probably be enough for a small simple motor that you just need to get turning. For a proper servo with which i am familiar you need to take a considerably longer route. The current state of the art is the space vector control that requires transformation of the 3 rotating current and voltage vectors into a pair of flux vectors (the d and q vector) in a static reference frame fixed to the rotor nominal direction. The d vector then controls the virtual "field flux" and the q vector controls the virtual "armature flux", the latter producing the shaft torque. The calculation is achieved by matrix transforms, often called the Clarke and Park transforms and their inverse transforms.
So what you do is you create 2 (PID) controllers for d and q vectors correspondingly. The "d" one takes as command input the virtual field setpoint and the "q" one takes as command input the torque setpoint. From the motor phase voltages and currents you calculate the virtual d and q actual values for the controllers by performing the above mentioned matrix transforms. Once you have the controller outputs for d and q you feed them into the inverse transforms to get the setpoints for the instantaneous phase voltages which in turn are fed to the 3 phase bridge controller.
That is in the tiniest possible nutshell how you properly control a BLDC motor. It can be done on certain kinds of microcontroller but not at all by just any random one. I have some experience using Atmel's UC3C devices with hardware supported PWM generation and sufficient kick to do the DSP calculations. The relevant appnotes are easy to find in Atmel's website.
A free in-depth paper into all aspects of BLDC motors and their control is the in my opinion unsurpassed MSc thesis work of James Mevey:
http://krex.k-state.edu/dspace/bitstream/2097/1507/1/JamesMevey2009.pdf. A warning though - as it is a Master's thesis work there will be math, some of it more than just the elementary kind. Still definitely worth looking into for the general info you will get from there.