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.
90 lines
3.4 KiB
Markdown
90 lines
3.4 KiB
Markdown
> **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**.
|
|
|
|
<p align="center">
|
|
<img src="stm32-nucleo-c031c6.webp"/><br>
|
|
<b>STM32 NUCLEO-C031C6</b>
|
|
</p>
|
|
|
|
# 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
|
|
|
|
<p align="center">
|
|
<img src="../traces/qv.png"/><br>
|
|
<b>Logic analyzer trace after pressing the button (non-preemptive QV kernel)</b>
|
|
</p>
|
|
<p align="center">
|
|
<img src="../traces/qk.png"/><br>
|
|
<b>Logic analyzer trace after pressing the button (preemptive QK kernel)</b>
|
|
</p>
|
|
<p align="center">
|
|
<img src="../traces/freertos.png"/><br>
|
|
<b>Logic analyzer trace after pressing the button (preemptive FreeRTOS kernel)</b>
|
|
</p>
|