Skip to main content
BEppe.1
Associate II
December 8, 2021
Question

Just found out about CubeMX, was doing it the hard way before this..... I have not found a way in MX to create a complete thread based program.

  • December 8, 2021
  • 8 replies
  • 2350 views

I cannot find anything in the code generation which allows for me to easily, being the operative word, create threads from the generated code. I have not been able to find any examples either to this nature.

What is the best way to go from a standard "main" loop to a thread based generated program? Are there any examples? Every time I create a thread I get an unhappy compiler. There is a secret somewhere on how to create a true thread based program, isn't there?

This topic has been closed for replies.

8 replies

KnarfB
Super User
December 8, 2021

In CubeMX, when you configure your project, choose Middleware FreeRTOS and a CMSIS interface (both will do, V2 is newer). Depending on how deep you want to dive, you can create tasks (=threads) etc. in CubeMX or in the code. You find the docs here: https://www.keil.com/pack/doc/CMSIS/RTOS2/html/group__CMSIS__RTOS.html

hth

KnarfB

Sara BEN HADJ YAHYA
ST Technical Moderator
December 8, 2021

Hi @BEppe.1​ ,

Welcome to the community and thanks for your feedback,

You can find plenty of FreeRTOS Examples under Example Selector in CubeMX, some of which are available for CubeMX (Please refer to the attachment). And as @KnarfB​  mentioned, when you configure your project you can find FreeRTOS under Middleware.

Since you just started using CubeMX, I advise you to watch our tutorial videos, you can access to them easily from Help menu/Tutorial videos in CubeMX.

0693W00000HnwNiQAJ.png0693W00000HnwO2QAJ.pngIf you issue is solved, please close this post by clicking the "Select as Best" button. This will help other members of the community find this response more quickly :)

Regards,

Sara.

In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.
BEppe.1
BEppe.1Author
Associate II
December 9, 2021

Thanks that was helpful. Only there are no examples for my board. B-L475E-IOT01A2. I put some code together using different video's, but the "PWM Start" won't start the PWM. Here is the important parts the init and run code. Any suggestions would be appreciated. I have my scope on the correct pin I programmed, I know as I have an Excel sheet with all the pins available from the board matched with the pins used.

Suggestions?

***MAIN ***
 MX_TIM2_Init();
 MX_TIM5_Init();
 /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2);
 
 
*** TIMER 5 ***
 
static void MX_TIM5_Init(void)
{
 
 /* USER CODE BEGIN TIM5_Init 0 */
 
 /* USER CODE END TIM5_Init 0 */
 
 TIM_ClockConfigTypeDef sClockSourceConfig = {0};
 TIM_MasterConfigTypeDef sMasterConfig = {0};
 TIM_OC_InitTypeDef sConfigOC = {0};
 
 /* USER CODE BEGIN TIM5_Init 1 */
 
 /* USER CODE END TIM5_Init 1 */
 htim5.Instance = TIM5;
 htim5.Init.Prescaler = 1023;
 htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
 htim5.Init.Period = 62499;
 htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
 if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
 {
 Error_Handler();
 }
 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
 if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_TIM_PWM_Init(&htim5) != HAL_OK)
 {
 Error_Handler();
 }
 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
 {
 Error_Handler();
 }
 sConfigOC.OCMode = TIM_OCMODE_PWM1;
 sConfigOC.Pulse = 31250;
 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
 if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN TIM5_Init 2 */
 
 /* USER CODE END TIM5_Init 2 */
 HAL_TIM_MspPostInit(&htim5);
 
}

Sara BEN HADJ YAHYA
ST Technical Moderator
December 9, 2021

Hi @BEppe.1​ ,

Could you please specify the CubeMX version and which pin are you using.

If possible please share share your .ioc file.

Regards,

Sara.

In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.
BEppe.1
BEppe.1Author
Associate II
December 10, 2021

Sure. Here is the information requested.

Board = B-L475E-IOT01A1

Firmware Package = STM32Cube FW_L4 V1.17.0

Toolchain IDE = V5.32

 also it is pin1 of CN3 (PA0), forgot to include.

BEppe.1
BEppe.1Author
Associate II
December 10, 2021