Howdy,
I took a look at your code and I have a feeling that the peripheral
code might be giving you a problem (something like a memory leak or
infinite loop) instead of the CAN code. Also, the way that you're stopping your program might have something to do with the crashing. Using that "Stop" VI is exactly the same as hitting the abort button on the front panel, which in a programming sense is just like pulling the emergency break on your car on the highway. It will stop the car, but very bad things might happen after. Try stripping out all of the extra code and just running the actual CAN VIs to see if everything is working properly. If you're still having problems, please post back a simplified version of the code with the modifications I've suggested and I'll definitely take a look at it. Have a great day!