mirror of
https://github.com/silenty4ng/uv-k5-firmware-chinese-lts
synced 2025-01-15 14:54:40 +00:00
写频
This commit is contained in:
parent
c2e83e9ae1
commit
8a0d2e38e8
3 changed files with 42 additions and 16 deletions
|
@ -512,7 +512,12 @@ bool UART_IsCommandAvailable(void)
|
||||||
|
|
||||||
CRC = UART_Command.Buffer[Size] | (UART_Command.Buffer[Size + 1] << 8);
|
CRC = UART_Command.Buffer[Size] | (UART_Command.Buffer[Size + 1] << 8);
|
||||||
// char b[2]="3K";
|
// char b[2]="3K";
|
||||||
UART_Send(UART_Command.Buffer, Size);
|
// uint8_t tmp[Size];
|
||||||
|
// for (int i = 0; i < Size; i++) {
|
||||||
|
// tmp[i]=UART_Command.Buffer[i];
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
return (CRC_Calculate(UART_Command.Buffer, Size)!= CRC) ? false : true;
|
return (CRC_Calculate(UART_Command.Buffer, Size)!= CRC) ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
45
driver/crc.c
45
driver/crc.c
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#include "bsp/dp32g030/crc.h"
|
#include "bsp/dp32g030/crc.h"
|
||||||
#include "driver/crc.h"
|
#include "driver/crc.h"
|
||||||
|
#include "driver/uart.h"
|
||||||
|
|
||||||
void CRC_Init(void)
|
void CRC_Init(void)
|
||||||
{
|
{
|
||||||
|
@ -47,20 +48,40 @@ void CRC_InitReverse(void)
|
||||||
CRC_IV = 0;
|
CRC_IV = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
uint16_t CRC_Calculate(const void *pBuffer, uint16_t Size)
|
// uint16_t CRC_Calculate(const void *pBuffer, uint16_t Size)
|
||||||
{
|
//{
|
||||||
|
// const uint8_t *pData = (const uint8_t *)pBuffer;
|
||||||
|
// uint16_t i, Crc;
|
||||||
|
// UART_Send(pData, Size);
|
||||||
|
//
|
||||||
|
// CRC_CR = (CRC_CR & ~CRC_CR_CRC_EN_MASK) | CRC_CR_CRC_EN_BITS_ENABLE;
|
||||||
|
// UART_Send(pData, Size);
|
||||||
|
//
|
||||||
|
// for (i = 0; i < Size; i++) {
|
||||||
|
// CRC_DATAIN = pData[i];
|
||||||
|
// }
|
||||||
|
// Crc = (uint16_t)CRC_DATAOUT;
|
||||||
|
//
|
||||||
|
// CRC_CR = (CRC_CR & ~CRC_CR_CRC_EN_MASK) | CRC_CR_CRC_EN_BITS_DISABLE;
|
||||||
|
//
|
||||||
|
// return Crc;
|
||||||
|
//}
|
||||||
|
#define CRC16_XMODEM_POLY 0x1021
|
||||||
|
|
||||||
|
uint16_t CRC_Calculate(const void *pBuffer, uint16_t Size) {
|
||||||
const uint8_t *pData = (const uint8_t *)pBuffer;
|
const uint8_t *pData = (const uint8_t *)pBuffer;
|
||||||
uint16_t i, Crc;
|
uint16_t crc = 0; // 初始CRC值为0
|
||||||
|
|
||||||
CRC_CR = (CRC_CR & ~CRC_CR_CRC_EN_MASK) | CRC_CR_CRC_EN_BITS_ENABLE;
|
while (Size--) {
|
||||||
|
crc ^= (*pData++) << 8; // 将数据字节的最高位与CRC异或
|
||||||
for (i = 0; i < Size; i++) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
CRC_DATAIN = pData[i];
|
if (crc & 0x8000) { // 检查最高位是否为1
|
||||||
|
crc = (crc << 1) ^ CRC16_XMODEM_POLY; // 如果最高位为1,执行CRC多项式计算
|
||||||
|
} else {
|
||||||
|
crc = crc << 1; // 如果最高位为0,继续左移
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Crc = (uint16_t)CRC_DATAOUT;
|
|
||||||
|
|
||||||
CRC_CR = (CRC_CR & ~CRC_CR_CRC_EN_MASK) | CRC_CR_CRC_EN_BITS_DISABLE;
|
|
||||||
|
|
||||||
return Crc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue