 This is a time to start dual core project debugging. To start the dual core debug process with an STN-Verted 2WL55 microcontroller, we need first to start the debug session for Cortex-M4 core, then start its code execution, because as you remember we are activating the Cortex-M0 plus core from the code of Cortex-M4, and then we need to load additional debug session for ARM Cortex-M0 plus. Okay, we are ready to start the debug session on our board. The board is already connected by micro USB cable to PC. Within this exercise we will use three buttons, B1, B2 and B3. B1 and B3 are connected or assigned to Cortex-M0 plus, while the middle one B2 is assigned to Cortex-M4. Then we will use three LEDs, LED1, LED2 and LED3, which are as well distributed between both cores. So LED1 and LED3 are assigned to Cortex-M4, while LED2 is assigned to Cortex-M0 plus. And as you remember by pressing B1 or B2 we will switch on and off the middle one's LED, so LED2, green one, while by pressing B2 button, which is assigned to Cortex-M4, we will toggle both other LEDs, so blue and red one, so LED1 and LED3. Okay, to start our complete project we need to first start a debug session for Cortex-M4 just to release the core Cortex-M0 plus one. This is within this line of Cortex-M4 project. And within this debug session we will load in fact binaries for both cores, so for Cortex-M4 and Cortex-M0 plus, and within the second round we will start, we will load additional debug session for Cortex-M0 plus just to load symbols, which would be necessary to debug both applications. We are using as well some global variables, which we will monitor within live expressions. So for Cortex-M4 it would be VAR underscore CM4, initialized by 0 at the beginning. And for Cortex-M0 plus we will have a similar one, it would be VAR underscore CM0P, initialized with 0 as well. Okay, so I'm starting first Cortex-M4 debug session, so I go to this bug icon, down arrow, debug configurations, and I select CM4 debug, okay, and I can start this code. In fact I started code on both cores, after this line Cortex-M0 plus is starting execution of its code as well. I will switch to this live expression, I already put the values over here, you can add new ones by pressing this plus and typing the variable name. As you can see, this is core agnostic, so I've got variables here from both cores. As right now the active debug session is for Cortex-M4, I can see the increased values of this variable, and Cortex-M0 plus one is unknown, because it is not an active debug session for Cortex-M0 plus. The next step would be to load symbols for Cortex-M0 plus, so start its debug session. We already loaded the code within this Cortex-M4 one, so it would be only loading symbols for the debug. So I go to this bug icon, down arrow, debug configurations, and I select Cortex-M0 plus and press debug. As you remember, within the configuration for this debug session, we have disabled a reset during the connection. So it is not an intrusive way, it is not stopping, it is not resetting the cores, it is just loading additional symbols related to Cortex-M0 plus code execution. As you can see, now we are within this Cortex-M0 plus debug configuration as active one. So you can see the variable related to Cortex-M0 plus increasing. And now I can switch between them, so now I'm at Cortex-M4, now open Cortex-M0 plus. I can suspend both cores at the same time using this suspend button, so I press it and now you can see that both cores are suspended, and if I would switch between them, you can see the variable is not increasing on both sides. I can resume the code execution on both cores at the same time, synchronously, but now it is a bit more tricky. I need to press a control button on the keyboard and select both threads related to both cores. And now, as I've got selected both of them, I press resume. And now you can see that the core Cortex-M0 plus and M4 is running one and the second one. Okay, so this is how we can synchronously suspend and resume code execution. I've got some breakpoints on both cores within the external interrupts, so this is for Cortex-M0 plus, and as you can see for both buttons, and for Cortex-M4 it is very similar. I put the breakpoint as well within the external interrupt and callback. So right now I'm the active core, the active debug session, the highlighted one is a Cortex-M4, so now I would try to stop on the breakpoint by executing the interrupt on Cortex-M4 as well, so I'm clicking the middle button. And as you can see, I landed within the external interrupt callback. On this interrupt, I can try to resume both operations, so again I press the control button and I select both cores, as you can see both are suspended by the breakpoint. As we configured the CTI interface within the debug configurations for both and I press resume. And you can see both cores are resumed and we can see two LEDs assigned to Cortex-M4, which has changed the state, so we can see blue and red LED turned on. We can repeat this exercise being within the Cortex-M0 perspective, so right now I would press the button B1, so as we can see both cores are suspended as well. I am here within the callback of Cortex-M0+, and I can do the same exercise. So pressing control, I'm selecting both threads for Cortex-M0 and Cortex-M0+, and I'm resuming code execution. And as you can see, I'm landing immediately with a frequently used interrupt from Cystic on Cortex-M4, so I need to resume it once again. This is due to the fact that there is no full support on CTI peripheral within the current GDB implementation on this tool. It will be added in future revisions. What we can see here as well, we can monitor, of course, the registers for both microcontrollers. So within STM32Q by DE, this is within this SFRs section, so special function register. So right now, as we are within the Cortex-M4, we can see the Cortex-M4 peripherals. If I would switch to Cortex-M0, I would land within the Cortex-M0 peripherals. So we can monitor the content of the registers as well as, let's say, we've got the complete symbols map loaded for both cores. To stop synchronously both cores, so to terminate the session I can select as well both by pressing the control button and click on this terminate. So both sessions would be finished and we will come back to CC++ perspective where we can continue the coding. Let's do a short summary of these part activities. Okay, a bit more information you can find within the application node AN5564, getting started with projects based on dual core STM32WL microcontrollers using STM32Q IDE. Thank you for your attention.