anupshamanur wrote on Thursday, June 29, 2017:
Hey guys I am Anup and i am a student. I am new to freeRTOS concepts.
I am using STM32F407VGTx board and i want to implement Software Timers to blink the LEDs using Keil software.
I am creating the software timer and then I am starting the timer.
As per the concepts the software timer should call the callback function as soon as the timer has expired but this is not happening with my code.
I have pasted my main.c and the software timer configurations in freeRTOSconfig.h below.
Do see that and tell me what I am doing wrong soon.
Thanks in advance.
#include "stm32f4xx_hal.h"
#include "cmsis_os.h"
osThreadId defaultTaskHandle;
osTimerId mytimerHandle;
void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
void StartDefaultTask(void const * argument);
void myfn(TimerHandle_t mytimer);
TimerHandle_t mytimer = NULL;
int main(void)
{
printf("dsfsdfsdfsd");
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
osKernelStart();
while (1)
{
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
void StartDefaultTask(void const * argument)
{
** vTaskStartScheduler();
mytimer = xTimerCreate( "Timer" , pdMS_TO_TICKS( 500 ) ,pdTRUE, "123" , myfn);
xTimerStart( mytimer, 0);**
}
**/* myfn Callaback function */
void myfn(TimerHandle_t mytimer)
{
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15);
}**
void Error_Handler(void)
{
while(1)
{
}
}
void assert_failed(uint8_t* file, uint32_t line)
{
}
/* Software timer definitions. */
**#define configUSE_TIMERS ** 1
**#define configTIMER_TASK_PRIORITY** ( configMAX_PRIORITIES - 1 )
**#define configTIMER_QUEUE_LENGTH ** 10
**#define configTIMER_TASK_STACK_DEPTH** 256