2021-08-19 05:30 AM
As an example, the following code is provided, the timers are started and stopped in app_ble.c.
I can run two of the three leds using two different timers and they work properly, but when I add the third one than the leds start working in an unexpected way. I tried to find details about the concurrent work in AN5289 but I couldn't find any information. I also played a bit with periods, but this also didn't give me any clarity of the server behaviour. May I ask for some support?
OK, with some changes it works much better now :)
#include "leds_task.h"
//#include "main.h"
//#define PERIOD_S (1 * 1000 * 1000 / CFG_TS_TICK_VAL) //1s
//#define PERIOD_S (20 * 1000 * 1000 / CFG_TS_TICK_VAL)//20s
#define PERIOD_LED_BLUE (1 * 1000 * 1000 / CFG_TS_TICK_VAL)//1s
#define PERIOD_BLUE_LED_OFF (1 * 1000 / CFG_TS_TICK_VAL)//1ms
#define PERIOD_LED_GREEN (1 * 1270 * 1000 / CFG_TS_TICK_VAL)//1s
#define PERIOD_GREEN_LED_OFF (1 * 1000 / CFG_TS_TICK_VAL)//100ms
#define PERIOD_LED_RED (5 * 1000 * 1000 / CFG_TS_TICK_VAL)//1s
#define PERIOD_RED_LED_OFF (1 * 1000 / CFG_TS_TICK_VAL)//500ms
uint8_t LEDSTimerId_BLUE_LED_R;
uint8_t LEDSTimerId_BLUE_LED;
uint8_t LEDSTimerId_GREEN_LED_R;
uint8_t LEDSTimerId_GREEN_LED;
uint8_t LEDSTimerId_RED_LED_R;
uint8_t LEDSTimerId_RED_LED;
void RegisterLED_BLUE(void)
{
HW_TS_Create(CFG_TIM_LED_BLUE, &LEDSTimerId_BLUE_LED_R, hw_ts_Repeated, TIM_SW_LED_BLUE);//creating repeated timer for blue led blinking period
HW_TS_Start (LEDSTimerId_BLUE_LED_R, PERIOD_LED_BLUE);//starting the timer for blue led blinking period
}
void RegisterLED_GREEN(void)
{
HW_TS_Create(CFG_TIM_LED_GREEN, &LEDSTimerId_GREEN_LED_R, hw_ts_Repeated, TIM_SW_LED_GREEN);//creating repeated timer for green led blinking period
HW_TS_Start (LEDSTimerId_GREEN_LED_R, PERIOD_LED_GREEN);//starting the timer for green led blinking period
}
void RegisterLED_RED(void)
{
HW_TS_Create(CFG_TIM_LED_RED, &LEDSTimerId_RED_LED_R, hw_ts_Repeated, TIM_SW_LED_RED);//creating repeated timer for red led blinking period
HW_TS_Start (LEDSTimerId_RED_LED_R, PERIOD_LED_RED);//starting the timer for red led blinking period
}
void TIM_SW_LED_BLUE(void)
{
HW_TS_Create(CFG_TIM_LED_BLUE_OFF, &LEDSTimerId_BLUE_LED, hw_ts_SingleShot, BLUE_LED_OFF);//creating single shot timer for blue led blinking ratio
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, SET);
HW_TS_Start (LEDSTimerId_BLUE_LED, PERIOD_BLUE_LED_OFF);//starting the timer
}
void TIM_SW_LED_GREEN(void)
{
HW_TS_Create(CFG_TIM_LED_GREEN_OFF, &LEDSTimerId_GREEN_LED, hw_ts_SingleShot, GREEN_LED_OFF);//creating single shot timer for green led blinking ratio
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, SET);
HW_TS_Start (LEDSTimerId_GREEN_LED, PERIOD_GREEN_LED_OFF);//starting the timer
}
void TIM_SW_LED_RED(void)
{
HW_TS_Create(CFG_TIM_LED_RED_OFF, &LEDSTimerId_RED_LED, hw_ts_SingleShot, RED_LED_OFF);//creating single shot timer for red led blinking ratio
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, SET);
HW_TS_Start (LEDSTimerId_RED_LED, PERIOD_RED_LED_OFF);//starting the timer
}
void BLUE_LED_OFF(void)
{
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, RESET);
HW_TS_Delete(LEDSTimerId_BLUE_LED);
}
void GREEN_LED_OFF(void)
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, RESET);
HW_TS_Delete(LEDSTimerId_GREEN_LED);
}
void RED_LED_OFF(void)
{
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, RESET);
HW_TS_Delete(LEDSTimerId_RED_LED);
}
void LEDS_START(void)
{
RegisterLED_BLUE();
RegisterLED_GREEN();
RegisterLED_RED();
}
void LEDS_STOP(void)
{
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, RESET);
HW_TS_Delete(LEDSTimerId_BLUE_LED_R);
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, RESET);
HW_TS_Delete(LEDSTimerId_GREEN_LED_R);
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, RESET);
HW_TS_Delete(LEDSTimerId_RED_LED_R);
}
void LEDS_ON(void)
{
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, SET);
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, SET);
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, SET);
}
void LEDS_OFF(void)
{
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, RESET);
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, RESET);
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, RESET);
}
2021-08-20 06:58 AM
Max numbers of timers is 255.