How does the Array allocated in the stack?
Note that 'MCU will stop running' versus 'MCU still running' is not a good criterium for 'everything is OK'.

On ARM chips. the stack grows down (starts high, each nested stack frame occupies lower addresses), in most cases starting from the highest RAM address. When the stack grows too large for the available stack space, it will overwrite the heap, and after that global data. Whether this is harmful for the program depends. On what? That's mighty complex to figure out.

Note that the 'data[999]' in your 'char data[1000]' is the highest address within this variable, so it is the least likely to cause a problem. using data[0] (which is at the lowest address) is more likely to cause a problem.

Again on ARM, a function that does not call deeper functions might not use the stack at all (the return address is saved in a register, not on the stack).

So in all probability, both your programs are bad, but whether in practice that translates to 'seems to work' or 'seems to stop' is very difficult to predict.