STM32F4 Discovery GPIO signal generation problem
This was going to be a comment, but then I realized that I need to write more than a comment window allows. So this will be 50% comment and 10% answer and 40% unknown.

I'm pretty familiar with asm on AVR and on PIC and how many cycles each instruction takes. So I can make educated guesses regarding how your asm program will behave. 

The fact that you even get 3.5 µs periods is strange by the look of your code.



Here's a couple of things that I can't wrap my head around:


You are not 100% sure that #0xe0001000 even is DWT BASE, why are you not sure? Isn't that something... you should... be sure of? 
You want to wait 180 cycles, yet every time you loop in your wait loop, you execute 6 instructions, 4 of which I think are 1 cycle per instruction. And the other 2 are 2 cycle per instruction. That's 8 cycles. You even call nop twice in a row..
You never increment r6 in your wait loop, you never use the str instruction to update the cycle count. This means that according to your code, you can't even leave the wait loop because nothing ever changes. 


According to your logic analyzer you do leave the loop, which you shouldn't be able to. This means that either:


This question is a joke and haha, nice joke. 
Or there is an interrupt in the background changing r6 or the cycle count, and you don't know about it. 
Or you know about it and decided to not share it with us. 
Or the watchdog timer is kicking in and getting you out of the loop.
Or this is not your actual code. 
Or the CMP instruction is backwards and you are leaving instantly which is shown in your first logic analyzer graph, then the STM becomes sentient and understands that you want a square wave and makes its best attempt and can only come up with a square wave with a period of 3.5 µs. Poor sentient being, it's just doing its best. I shall never forget you, you sentient STM being. 
Or I am just dumb. 




If you want to make square waves with a period of 2 µs, then use proper timers. This means that during the time you are waiting, you can do other processes. If you want to count everything in loops, then you are effectively freezing the CPU, compared to using interrupts. 

Since this will be interfaced with a famous Nintendo 64 controller, isn't there some library for this? Why look, there is one for Arduino. 

My advice for you is to either: 


Port the library above from Arduino to STM32F429, or port this library. 
Put the STM32F429 in a box and use it when you need a 180 MHz microcontroller. Acquire an Arduino and use the library and call it a day, there's tons of arduino clones out there. 
Post your actual code in text format (not as an image). 
Research how to use interrupts on STM32F429.