如何在定时器中断回调函数中使用延迟函数?

时间:2015-06-12 03:42:45

标签: stm32f4discovery

我正在使用Xbee和STM32F4微控制器作为协调器和终端设备。我想在调用定时器中断时向我的终端设备发送3个不同的RF数据包。我目前的问题是,如果我将所有3个数据包一起发送到同一终端设备,那么我的终端设备将丢弃2个数据包并且只接收一个数据包。所以我想在不同的时间间隔内发送所有三个数据包。我发现我不能在定时器中断回调函数中使用延迟函数。那么任何人都可以告诉我如何在2次发送之间设置延迟,或者是否有其他方法来解决此问题。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
     uint8_t temp[10] = {0};

     // send query to Thermal Sensor
     temp[0] = EN_TYPE_QUERY_TO_PD;
     Send_To_Target(PD_SENSOR_ADDR_SL,temp,1);

     ***/*I want to Set Delay Here*/***

     //Send Data to Thermal Sensor
     temp[0] = EN_TYPE_DATA_TO_PD;
     Send_To_Target(PD_SENSOR_ADDR_SL,temp,1);

     ***/*I want to Set Delay Here*/***

     //Send command to Thermal Sensor
     temp[0] = EN_TYPE_COMMAND_TO_PD;
     Send_To_Target(PD_SENSOR_ADDR_SL,temp,1);
}

1 个答案:

答案 0 :(得分:0)

让ISR设置一个标志,外部函数将在ISR退出后读取。或者更好的是,将您要发送的数据放入一个外部函数将清空的队列中,并插入您想要的任何延迟。