Timing control within a loop - Sending data at exact intervals
You need to use a timer peripheral. Set it up to generate an interrupt every minute. The interrupt should set a global flag (remember to make it volatile). The main loop polls the flag and checks if one minute has elapsed, clears the flag, then prepares the data and sends it.

If you can't configure the timer to make minute intervals, then try to set it to one second intervals, also set a flag in the interrupt handler (name is for example newSecond). The main loop just has to clear the flag, increment a counter and when it reaches 60 prepare the data to send (and reset the counter).