1. Is serial.print blocking or non blocking?
Blocking.
... IOW, if I do, say serial1.begin(300); serial1.println("Hello, world"); will control be returns to me in a few microseconds, or in 40+ milliseconds after the entire string has printed?
300bits/second would give 30 characters/second (accounting for start and stop bits).
strlen("Hello, world\n") is 14! (last time I looked the single character '\n' is expanded to two ASCII/UTF-8 characters on output).
print/println will normally return after the last character has been accepted into the USART send buffer (before the character is sent), so we could reasonably expect it to return after 13 characters (it might be double buffered, making it a character faster). Hence control would return after 13/30th of a second, or roughly 430+ milliseconds.
BUT, there may be choices available to you.
1. USART 1 will run at 4.5 Mbit/s, and the other two USARTs at 2.25 Mbit/s
2. You might be able to use SerialUSB, which is much faster than 300bits.
3. You might implement DMA which would return quickly (microseconds), and continue to operate in parallel with your program, while the DMA hardware moves characters to the USART autonomously. This mightbe too complex for you to feel comfortable.
Edit: As an observation: if your Arduino program is currently doing I/O at 300bits, then a lot of CPU time will be wasted blocking. If you could use interrupts to output instead, then that might free up an enormous amount of CPU cycles, sufficient for your purposes.
How long will the battery hold the contents of the backup registers? My need is 6 months.
The backup registers are part of the Real Time Clock (RTC) domain. The current used is under 2microAmps (2uA), according to Figure 17. "Typical current consumption on VBAT with RTC on versus temperature at different VBAT values" on page 43 of the STM32F103x8/xB datasheet:
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00161566.pdf
A 3V lithium button cell (hearing aid battery)
http://en.wikipedia.org/wiki/List_of_battery_sizes#Lithium_cells
has a capacity of roughly 30mAhour to 260mAhour
At 2uA, a 30mAhour cell might last 30,000uAhours/2uA = 15,000 hours = 625days, or almost 21 months.
BUT, you would have to modify a Maple as the Vbat pin is connected to the rest of the power supply system, and it would need to be isolated or the battery would power the entire STM32F103, and be exhausted very quickly.
The Backup registers are described in the RM0008 manual
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf
in Chapter 6 "Backup registers (BKP)"
I haven't noticed any code showing how to use them. The RM0008 manual describes the steps needed to access them. They are not writable when the processor powers up to prevent them being accidentally overwritten, and the steps are to give access.
The registers are memory mapped, so you should be able to get at them by something like
(*uint16)0x40006C04 = ...;
uint16 myval = *((*uint16)0x40006C04);
or
uint16 *bkp_registers = (*uint16)0x40006C04;
bkp_registers[0] = ...;`
Noting that the 2byte/16bit registers are not contigous, but instead exist at addresses 4 bytes apart (so bkp_registers[0] and bkp_registers[2] might be valid, but bkp_registers[1] and bkp_registers[3] would not be valid)
(full diclosure: I am not a member of LeafLabs staff)