Недавно задавался таким же вопросом, решил - пусть будет *
unsigned long BlokRWCC2500(GPIO_TypeDef* CS_Port, unsigned long CS_Pin, unsigned char Adr, unsigned char Val)
{
Timer_us_t t1;//таймер для определения аварии
LL_GPIO_ResetOutputPin(CS_Port, CS_Pin);//CS=0
StartTimer_us(&t1, TimoutErrCC2500);
while(LL_GPIO_IsInputPinSet(MISO_Port, MISO_PIN)!=0)
{//Ожидаем нуля на входе MISO
if(Timer_us(&t1))
{//ошибка обмена, истек таймаут
LL_GPIO_SetOutputPin(CS_Port, CS_Pin);
return 0x80000000;//сообщение о ошибке
}
}
SpiCC2500RW(Adr,Val);//Отправляем запрос
StartTimer_us(&t1, TimoutErrCC2500);
while(SpiCC2500Complit()==0)
{//ожидаем ответ
if(Timer_us(&t1))
{//ошибка обмена, истек таймаут
LL_GPIO_SetOutputPin(CS_Port, CS_Pin);
return 0x80000000;//сообщение о ошибке
}
}
unsigned long tmp = SpiCC2500Res(); //считываем ответ
LL_GPIO_SetOutputPin(CS_Port, CS_Pin);//CS=!0
return tmp;
}
*