You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.4 KiB

NOTE You must generate the code from the project.ioc file before building the application. If you forget to do this, the following errors will be reported:

fatal error: stm32c0xx_hal.h: No such file or directory 30 | #include "stm32c0xx_hal.h" . . .

Real-Time Example on NUCLEO-C031C6

This example implements the "Periodic-Sporadic" application on the STM32 NUCLEO-C031C6 board (ARM Cortex-M0+). The example demonstrates various real-time preemption scenarios among active objects in the QV kernel. The example requires a logic analyzer.


STM32 NUCLEO-C031C6

Code Organization

stm32c031-cube
|   .project       // STM32CubeMX project
|   project.ioc    // STM32CubeMX config (for code generation)
|
+---Core           // core application generated by STM32CubeMX
|   +---Inc        // include files
|   +---Src        // source files
|   |       . . .
|   |       real-time.qm // QM model file for the application
|   +---Startup
|
+---qpc            // QP/C real-time event framework
|   +---include
|   +---src
|   |   +---qf
|   |   +---qv
|   +---ports
|   |   +---arm-cm
|   |   |   +---qv
|   |   |   |   +---gnu
|   |       . . .

Features Demonstrated

The example QP application consists of 2 periodic tasks (Active Objects) and two sporadic, long-running tasks (Active Objects).

Running the Examples

Setting up a Logic Analyzer

The NUCLEO-C031C6 needs to be conntected to a logic analyzer as shown in the picture below.

          CN7                                       CN10

       PD0    PD1                                PD3    NC
       PD2    PD2                                PB8    NC
       VDD    E5V                                PB0    NC
       PA14   GND -- GND                         AVDD   5V-USB-CHG
       NC     NC                                 GND    PA3
       NC     IOREF                       CH8 -- PA5    PC15
       PA13   NRST                        CH3--  PA6    PB12
       NC     3V3                         CH2 -- PA7    PB12
       PC6    +5V                                PB0    PB2
       GND    GND                         CH7 -- PC7    GND
       NC     GND                                PA9    PF3
CH1 -- PC13   VIN                                PA15   PA8
       PC14   NC                                 PB5    PB15
       NC     PA0 -- CH6                         PB4    PB14
       PF0    PA1 -- CH5                         PB10   PB13
       PF1    PA4 -- CH4                         PB3    AGND
       NC     PB1                                PA10   PB0
       PB11   PA11/PB9                           PB6    NC
       PA2    PA12/PB8                           PB7    NC

The logic analyzer needs to be configured as follows:

  • sampling rate: several MHz (e.g., 24MHz)
  • trigger: Sporadic (PC.13 on the NUCLEO-C031C6), falling edge
  • pre-trigger capture ratio: 10%

Example Logic Analyzer Traces


Logic analyzer trace after pressing the button (non-preemptive QV kernel)


Logic analyzer trace after pressing the button (preemptive QK kernel)


Logic analyzer trace after pressing the button (preemptive FreeRTOS kernel)