I found a way to combine a bunch of things I have wanted to learn together into one project!

For a while, I have been fascinated with phone phreaking, and specifically the mythical BLUE BOX. Lots of myths and history surounding it. I think I can probably still play with it on Project MF, but we will see.

It seems like a great way to learn more electronics stuff, and some radio adjacent stuff too. I’ll need to figure out how to generate waves at specfic frequencies and how to combine them.

I happen to have bought an stm32 f3 discovery that seems like a good platform for this. I think it’s fast enough to bit bang out a wave at 2600Hz? Guess I will find out!

I also want to do this in rust. The f3 also seems to have decent rust support. See the f3 crate and discovery

I wanted to write up some quick notes of things I learned getting cerulean box blinking.

Step 1 was to create a new rust project and add the f3 dependency. After that, I copied the blinky.rs to my project as main.rs

Next I had to add a few more dependencies, cortex-m, cortex-m-rt and panic-semihosting. This was enough to get rust complaining about an eh_personality. No idea what that was, but I made it go away by copy the contents of the f3 project’s .cargo/config. As far as I can tell, this species the target architecture as being thumbv7em-none-eabihf which is ARM (thumbv7 specificall), with no OS and support for hard float.

That was enough to get things compiling, but then gdb would start… In the f3 example, I was able to type continue but all gdb could do was disassemble main. It turns out I also needed to copy .gdbinit. I believe this works because I have set auto-load safe-path / in ~/.gdbinit.

After that, I get blinky leds!

Next steps

There’s a few things I want to do next. I need to actually twiddle a pin at a given frequency. That means learning how timers work probably, maybe interupts if I want to be able to other things.

I also need to figure how this semihosting thing. I think that’s so I can run the code from my laptop, and get error messages, strack traces and breakpoints which seem useful, but… I don’t know how to turn it off. How to I make a binary I can flash onto the f3 directly?

Adventures for next time!