Skip to content

Commit

Permalink
Продолжаю работать над рацией, разобрал наконец фрейм
Browse files Browse the repository at this point in the history
  • Loading branch information
iamsaywhat committed Mar 11, 2020
1 parent 4305690 commit 574e488
Show file tree
Hide file tree
Showing 5 changed files with 129 additions and 35 deletions.
38 changes: 34 additions & 4 deletions BUP.uvoptx
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,24 @@
<Name>-UV0010M9E -O142 -S0 -C0 -P00 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO23 -FD20000000 -FC8000 -FN1 -FF01986BE9x.FLM -FS08000000 -FL020000 -FP0($$Device:MDR1986BE93$Flash/1986BE9x.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>101</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134257292</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\custom.drivers\otherlib.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
Expand Down Expand Up @@ -274,7 +291,7 @@

<Group>
<GroupName>source</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
Expand Down Expand Up @@ -561,7 +578,7 @@

<Group>
<GroupName>custom.drivers</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
Expand Down Expand Up @@ -621,7 +638,7 @@
<GroupNumber>6</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
Expand Down Expand Up @@ -721,6 +738,19 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\custom.drivers\radiostation.c</PathWithFileName>
<FilenameWithoutPath>radiostation.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>

<Group>
Expand Down
5 changes: 5 additions & 0 deletions BUP.uvprojx
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,11 @@
<FileType>1</FileType>
<FilePath>.\custom.drivers\sws.c</FilePath>
</File>
<File>
<FileName>radiostation.c</FileName>
<FileType>1</FileType>
<FilePath>.\custom.drivers\radiostation.c</FilePath>
</File>
</Files>
</Group>
<Group>
Expand Down
8 changes: 4 additions & 4 deletions custom.drivers/include/radiostation.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
Аппаратнозависимая конфигурация
************************************************************/
#define RADIO_BAUDRATE 9600 // Бит/с скорость обмена с СНС
#define RADIO_BYTE_TIMEOUT 1 // Величина таймаута на приём байта, мс
#define RADIO_FIFO_TIMEOUT 2 // Величина таймаута на очистку FIFO, мс
#define RADIO_RECEIVE_TIMEOUT 2
#define RADIO_BYTE_TIMEOUT 2 // Величина таймаута на приём байта, мс
#define RADIO_FIFO_TIMEOUT 16 // Величина таймаута на очистку FIFO, мс
#define RADIO_RECEIVE_TIMEOUT 10

//#define SNS_REQUESTS_CNT 5 // Количество повторных запросов (при отсутствии ответа)
//#define SNS_BYTE_TIMEOUT 2 // Величина таймаута на приём байта, мс
Expand All @@ -32,7 +32,7 @@ typedef union {
uint8_t Buffer[9];
}RadioBaseFrameType;


void sendToRadio(uint8_t *data, uint8_t size);


void getDeviceName(void);
Expand Down
74 changes: 56 additions & 18 deletions custom.drivers/radiostation.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,6 @@ enum SlipMarkers{
TFESC = 0xDD, /* Если FESC - не разделитель, то посылается как FESC TFESC */
};

/**************************************************************************************************************
Radio_RetargetPins - Функция переопределения UART1 на другие пины, для работы радиостанции
Параметры: NONE
***************************************************************************************************************/
static void Radio_RetargetPins (void)
{
/* Инициализируем пины UART под радиостанцию */
Pin_initialize (RADIO_RX);
Pin_initialize (RADIO_TX);
}

/**************************************************************************************************************
Radio_initialize - Инициализация UART под радиостанцию
Expand All @@ -40,6 +30,10 @@ static void Radio_initialize (void)
{
UART_InitTypeDef UART_InitStructure;

/* Инициализируем пины UART под радиостанцию */
Pin_initialize (RADIO_RX);
Pin_initialize (RADIO_TX);

UART_DeInit(RADIO_UART); /* Сброс конфигуряции UART1 */
UART_StructInit (&UART_InitStructure); /* Заполнение структуры по-умолчанию */
UART_BRGInit (RADIO_UART, UART_HCLKdiv1); /* Установка предделителя блока UART1_CLK = HCLK */
Expand Down Expand Up @@ -70,33 +64,51 @@ static void Radio_deinitialize (void)
static uint16_t receiveByte(MDR_UART_TypeDef* UARTx);
static int16_t sendByte (MDR_UART_TypeDef* UARTx, uint16_t byte);
static uint16_t sendFend (MDR_UART_TypeDef* UARTx);
static uint32_t swapUint16 (uint16_t value);
static uint32_t swapUint32 (uint32_t value);


static void sendToRadio(uint8_t *data, uint8_t size)
void sendToRadio(uint8_t *data, uint8_t size)
{
TimeoutType timeout;
RadioBaseFrameType radioData;
static uint8_t frameIndex = 0;
uint16_t packetSize;
uint8_t special[2] = {0x0D, 0x0A};

Radio_initialize();

while (UART_GetFlagStatus (RADIO_UART, UART_FLAG_RXFE) != SET) /* Вычищаем FIFO от мусора и ждем пока не появится заголовок */
UART_ReceiveData(RADIO_UART);

if (size == 0) // Как минимум пакет будет состоять из 6 байт
packetSize = 6;
else // Индекс, адрес, длина(4 байта) + тип данных, длина данных(4 байта)
packetSize = 4 + 3 + size + 2; // + данные + crc(2 байта)
else // Индекс, адрес, длина(4 байта) + тип данных, длина данных(3 байта)
packetSize = 11 + size; // + данные(size байт) + спецсимволы:0D,0A(2байта) + crc(2 байта)

radioData.Struct.index = 0;
radioData.Struct.index = frameIndex;
radioData.Struct.address = 1;
radioData.Struct.lenght = packetSize-6;
radioData.Struct.dataType = HOST_DATA;
radioData.Struct.dataLenght = size;
radioData.Struct.dataType = AT_COMMAND;
radioData.Struct.dataLenght = size+2;
radioData.Struct.crc = 0xFFFF;

// Для удобства отправления перевернём в big-endian
radioData.Struct.lenght = swapUint16(radioData.Struct.lenght);
radioData.Struct.dataLenght = swapUint16(radioData.Struct.dataLenght);


// Подсчитываем контрольную сумму
radioData.Struct.crc = Crc16(&radioData.Buffer[0], 4, radioData.Struct.crc);
if(size != 0) {
radioData.Struct.crc = Crc16(&radioData.Buffer[4], 3, radioData.Struct.crc);
radioData.Struct.crc = Crc16(data, size, radioData.Struct.crc);
radioData.Struct.crc = Crc16(special, 2, radioData.Struct.crc);
}


radioData.Struct.crc = swapUint16(radioData.Struct.crc);

// Начинаем отправлять
sendFend (RADIO_UART);
for(uint16_t i = 0; i < 4; i++)
Expand All @@ -106,12 +118,29 @@ static void sendToRadio(uint8_t *data, uint8_t size)
sendByte (RADIO_UART, radioData.Buffer[i]);
for(uint16_t i = 0; i < size; i++)
sendByte (RADIO_UART, data[i]);
for(uint16_t i = 0; i < 2; i++)
sendByte(RADIO_UART, special[i]);
}
for(uint16_t i = 7; i < 9; i++)
sendByte (RADIO_UART, radioData.Buffer[i]);

// sendFend (RADIO_UART);

// Дождемся пока все отправится из FIFO
setTimeout (&timeout, RADIO_FIFO_TIMEOUT);
while ((UART_GetFlagStatus (RADIO_UART, UART_FLAG_TXFE) != SET)
&& (timeoutStatus(&timeout) != TIME_IS_UP));

uint8_t temp;
for(uint16_t i = 0; i < packetSize; i++)
temp = receiveByte(RADIO_UART);

Radio_deinitialize();

frameIndex++;
}

static void receiveFromeRadio(uint8_t* data)
static void receiveFromRadio(uint8_t* data)
{

}
Expand All @@ -120,7 +149,6 @@ static void receiveFromeRadio(uint8_t* data)

void getDeviceName(void)
{
Radio_RetargetPins();
Radio_initialize();
}

Expand Down Expand Up @@ -224,3 +252,13 @@ uint16_t receiveByte(MDR_UART_TypeDef* UARTx)
}
return byte;
}
uint32_t swapUint16 (uint16_t value)
{
return (uint16_t)((value & 0x00FF) << 8 | (value & 0xFF00) >> 8);
}
uint32_t swapUint32 (uint32_t value)
{
value = (value & 0x00FF00FF) << 8 | (value & 0xFF00FF00) >> 8;
value = (value & 0x0000FFFF)<< 16 | (value & 0xFFFF0000) >> 16;
return value;
}
39 changes: 30 additions & 9 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
// #include "debug.h" // Отладочный модуль трассировки внутрисистемных переменных в CAN
#endif //************************************************************************** !DEBUG_VARS

#include "radiostation.h"

int main(void)
{
Expand All @@ -50,15 +51,35 @@ int main(void)
stopIndication(); /* Отключаем мигание */


// while(1)
// {
// //BUP_DataUpdate ();
// //GetBatteryCharge();
//
// SelfTesting_SNS();
// BUP_UpdateDataFromSNS ();
//
// }
uint8_t buffer[] = "AT+GMI";
while(1)
{
//BUP_DataUpdate ();
//GetBatteryCharge();

//SelfTesting_SNS();
//BUP_UpdateDataFromSNS ();



sendToRadio(NULL, 0);
delay_ms(40);
sendToRadio(NULL, 0);
delay_ms(40);
sendToRadio(NULL, 0);
delay_ms(40);
sendToRadio(NULL, 0);
delay_ms(40);
sendToRadio(NULL, 0);
delay_ms(40);
sendToRadio(NULL, 0);
delay_ms(40);
sendToRadio(buffer, sizeof(buffer)-1);
delay_ms(40);
sendToRadio(NULL, 0);
delay_ms(40);

}

if(!CONNECT_ZPZ_CHECK) /* Проверяем подключение разъема ЗПЗ */
{
Expand Down

0 comments on commit 574e488

Please sign in to comment.