Страницы

Страницы

четверг, 3 августа 2017 г.

Add CMSIS-RTOS RTX & CubeMX adapt generated files


This section explains how to add the CMSIS-RTOS RTX real-time operating system.

Setup in STM32CubeMX

In STM32CubeMX ensure that the System Tick Interrupt is set to the lowest priority (which is the highest number).

Configuration tab

  • Under System open NVIC Configuration.
  • Click on System tick timer and set Preemption Priority to 15 (highest possible value).
  • Click OK to close the NVIC Configuration dialog.

Setup in MDK

In MDK, the steps to add the CMSIS-RTOS RTX real-time operating system to a project that is configured with STM32CubeMX are:

Step 1: Add CMSIS-RTOS RTX

  • Open the Manage Run-Time Environment window and add CMSIS:RTOS (API):Keil RTX.

rte_bsp_rtx.png

Step 2: Configure CMSIS-RTOS RTX parameters

  • Open the configuration file RTX_Conf_CM.c from the project window, component group CMSIS.
  • Optionally you may change to the Configuration Wizard tab.
  • Change the following settings:
    • Main Thread stack size [bytes] 1024
    • RTOS Kernel Timer input clock frequency [Hz] set to core clock frequency
  • Save the file.

Step 3: Add code for CMSIS-RTOS RTX in 'main.c'

  • Open the source file main.c from the project window, source group STM32CubeMX:Common Sources and add code lines in the sections USER CODE BEGIN / USER CODE END as shown below:
:
/* USER CODE BEGIN Includes */
#include "cmsis_os.h" // ARM::CMSIS:RTOS:Keil RTX
/* USER CODE END Includes */
:
/* USER CODE BEGIN 0 */
extern uint32_t os_time;
uint32_t HAL_GetTick(void) { // Add HAL_GetTick function for STM32Cube HAL
return os_time;
}
/* USER CODE END 0 */
:
int main(void)
{
:
/* USER CODE BEGIN 1 */
osKernelInitialize (); // Initialize RTOS Kernel for setup
/* USER CODE END 1 */
:
/* USER CODE BEGIN 2 */
osKernelStart (); // Begin thread switching
/* USER CODE END 2 */
:

Step 4: Remove SysTick_Handler in stm32f7xx_it.c

  • STM32CubeMX generates a SysTick_Handler that is in-compatible with CMSIS-RTOS RTX. Remove the code for the SysTick_Handler in the source file stm32f7xx_it.c as shown below.
#if 0
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */
}
#endif

Step 5: Build Project in MDK

  • Use Project - Build Target to generate the application code.


The source file generated by STM32CubeMX can be accessed in the MDK project window, source group STM32CubeMX:Common Sources. These file require the following modifications.

Changes to 'stm32fxxx_it.c'

CMSIS-Driver and CMSIS-RTOS RTX implement their own interrupt handlers.
  • For using CMSIS-RTOS RTX remove the code of the SysTick_Handler.
  • For using CMSIS-Driver remove the code of the related Interruption Handler.
Note
STM32CubeMX re-generates this file and it is required to remove the interrupt handlers after using Generate Code.

Changes to 'main.c'

  • CMSIS-Driver initialize peripherals using dedicated functions that are called by middleware. Initialization code in 'main.c' for the related peripherals is therefore not required and may be removed.
  • CMSIS-RTOS RTX requires initialization code. Refer to Add CMSIS-RTOS RTX for detailed information.

Комментариев нет:

Отправить комментарий