- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
void Obmen_RS1(void)
{
uint8_t txbuf[7], rxbuf[43], CheckSum;
//если сформирован запрос на чтение по RS1 - SSPC data
if (SoftFlag.RS_Flag3.bit.RS1_Read_Req)
{
txbuf[0] = 0x7B; //{
txbuf[1] = SSPC_Addr_RS[RS1_Counter];
txbuf[2] = 0x00; //d0, b00000000 - команда для формирования и отправки посылки данных от SSPC
txbuf[3] = 0x00;
txbuf[4] = 0x00;
txbuf[5] = txbuf[1];//(txbuf[1] ^ txbuf[2] ^ txbuf[3] ^ txbuf[4]); //xor [1..4]
txbuf[6] = 0x7D; //}
HAL_UART_Transmit(&huart1, (uint8_t *)&txbuf, 7, 1);
//HAL_Delay(1)
if (HAL_UART_Receive(&huart1, (uint8_t *)&rxbuf, 43, 9) == HAL_OK)
{ //если пришел правильный пакет
if ((rxbuf[0] == 0x5B)
&& (rxbuf[40] == SSPC_Addr_RS[RS1_Counter])
&& (rxbuf[42] == 0x5D))
{ //считаем КС
for (j = 1; j < 41; j++)
CheckSum ^= rxbuf[j];
if (CheckSum == rxbuf[41]) //Если КС совпадает
{
for (j = 1; j < 41; j++) //Сохраняем пакет в двумерный буфер
RS1_Paket[RS1_Counter][j] = rxbuf[j];
}
else
{
for (j = 1; j < 41; j++)
RS1_Paket[RS1_Counter][j] = 0; //Иначе пишем нули
}
}
}
RS1_Counter++;
if (RS1_Counter > 15)
RS1_Counter = 0;
SoftFlag.RS_Flag3.bit.RS1_Read_Req = 0; //сбрасываем флаг запроса чтения данных и ждем следующего по таймеру (100мс)
}
}
Процедура чтения данных от 16 модулей управления нагрузками по RS-485...
для STM32F4x с использованием калокуба
SteadfastTinCock 10.07.2019 14:15 # −2
3oJIoTou_xyu 10.07.2019 14:36 # 0
SteadfastTinCock 10.07.2019 14:47 # −2
3oJIoTou_xyu 10.07.2019 15:57 # +1