добавлен дефайн для ошибок с корректным crc
т.к. при инверсии любого бита - автоматом появляется ошибка crc, может имеет смысл пересчитывать crc для инвертированных битов? отключен аппаратный can пока что, потому что надо еще как-то менять baud, пока не придумал
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#define CANCONFIG_H
|
||||
|
||||
#define CAN_ONLY_EMULATING
|
||||
//#define CAN_ERROR_WITH_CORRECT_CRC
|
||||
|
||||
|
||||
// Настройки GPIO и таймера
|
||||
|
||||
@@ -10,7 +10,6 @@ int transmit_prev = 0;
|
||||
void CAN_Init(CANEmu_HandleTypeDef *canemu)
|
||||
{
|
||||
#ifdef CAN_ONLY_EMULATING
|
||||
CANEmu_SendFrame(canemu);
|
||||
if(canemu->EmuFlag == 0)
|
||||
{
|
||||
CANEmu_Init(canemu, canemu->bitrate_bps);
|
||||
@@ -33,7 +32,7 @@ void CAN_SendFrame(CANEmu_HandleTypeDef *canemu)
|
||||
#ifdef CAN_ONLY_EMULATING
|
||||
CANEmu_SendFrame(canemu);
|
||||
#else
|
||||
if(canemu->errors.all)
|
||||
if(canemu->EmuFlag)
|
||||
CANEmu_SendFrame(canemu);
|
||||
else
|
||||
HAL_CAN_AddTxMessage(&hcan, &canemu->header, canemu->data, &mbox);
|
||||
@@ -42,7 +41,6 @@ void CAN_SendFrame(CANEmu_HandleTypeDef *canemu)
|
||||
|
||||
void CANEmu_Working(CANEmu_HandleTypeDef *canemu)
|
||||
{
|
||||
|
||||
if(flag_manual == 0)
|
||||
{
|
||||
canemu->start_poll = MB_DATA.Coils.START_POLLING;
|
||||
|
||||
@@ -155,7 +155,19 @@ void form_CAN_bitstream_full(const CAN_TxHeaderTypeDef *header, const uint8_t *d
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CAN_ERROR_WITH_CORRECT_CRC
|
||||
// Ошибки
|
||||
if (errors.bit.FF_SRS) flip_bit(srr_idx);
|
||||
if (errors.bit.FF_IDE) flip_bit(ide_idx);
|
||||
if (errors.bit.FF_RTR) flip_bit(rtr_idx);
|
||||
if (errors.bit.FF_R1) flip_bit(r1_idx);
|
||||
if (errors.bit.FF_R0) flip_bit(r0_idx);
|
||||
if (errors.bit.DATA) flip_bit(data_idx);
|
||||
// MSGID_ERR — переворачиваем 1-й бит ID (MSB ID[10]) для примера
|
||||
if (errors.bit.MSGID) flip_bit(id_start);
|
||||
#endif
|
||||
|
||||
|
||||
// 5. CRC
|
||||
uint16_t crc = compute_crc15(raw_bits, raw_len);
|
||||
uint32_t crc_start = raw_len;
|
||||
@@ -168,6 +180,7 @@ void form_CAN_bitstream_full(const CAN_TxHeaderTypeDef *header, const uint8_t *d
|
||||
// 6. CRC Delimiter (recessive)
|
||||
append_bit(raw_bits, &raw_len, 1);
|
||||
|
||||
#ifndef CAN_ERROR_WITH_CORRECT_CRC
|
||||
// Ошибки
|
||||
if (errors.bit.FF_SRS) flip_bit(srr_idx);
|
||||
if (errors.bit.FF_IDE) flip_bit(ide_idx);
|
||||
@@ -177,6 +190,7 @@ void form_CAN_bitstream_full(const CAN_TxHeaderTypeDef *header, const uint8_t *d
|
||||
if (errors.bit.DATA) flip_bit(data_idx);
|
||||
// MSGID_ERR — переворачиваем 1-й бит ID (MSB ID[10]) для примера
|
||||
if (errors.bit.MSGID) flip_bit(id_start);
|
||||
#endif
|
||||
|
||||
// 10. Apply bit stuffing, пропускаем вставку stuff bits если ошибка ERR_STUFF_BITS
|
||||
apply_bit_stuffing_with_error(raw_bits, raw_len, can_bits, &can_bits_len, errors.bit.STUFF_BITS);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include "canConfig.h"
|
||||
|
||||
|
||||
typedef union {
|
||||
|
||||
Reference in New Issue
Block a user