Why do we need to calculate the baudrate using this formula,

baud = fCK / (16*USARTDIV)

I mean, why can't we write 9600 or any other desired baudrate value directly in USART_BRR register? Why do we need to perform this calculation first. What are we calculating here anyway?

This might be a dumb question to ask, but I am really confused here. Please help.

Thanks in advance!

You want the register to be simple and the logic in silicon to be uncomplicated.

A counter is simple, you count clock pulses and you create a divider.

Doing immediate division with logic is complicated, the ALU already has logic to do this, and the synchronous design uses clocks, these clocks may be different from implementation to implementation. ie you might run the CPU at 72 MHz, others may need it to run at 64 MHz, or slow down to 8 MHz

The design will therefore focused on things that make it simple for the machine, not those that make it convenient for the human.

The BRR uses a fractional form, it clocks at a higher rate, and then a clock tap is taken out at the fourth bit, achieving a DIV16, ie 4 -bits can represent 16 states (0000..1111)