feat: 添加协议处理和校验和计算功能,更新 UART 相关代码
This commit is contained in:
24
Core/Bsp/checksum.c
Normal file
24
Core/Bsp/checksum.c
Normal file
@@ -0,0 +1,24 @@
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @brief 计算校验和
|
||||
* @param buf: 数据缓冲区指针 (即你的 uart1_rx_buf)
|
||||
* @param start_pos: 校验数据的起始下标 (通常跳过帧头 "LOGI:")
|
||||
* @param length: 需要校验的数据长度 (不包含校验位本身和帧尾)
|
||||
* @return uint8_t: 计算得出的校验和
|
||||
*
|
||||
* 算法说明: 将所有字节相加,取低8位 (相当于 % 256)
|
||||
*/
|
||||
uint8_t Calculate_CheckSum(uint8_t *buf, uint16_t start_pos, uint16_t length)
|
||||
{
|
||||
uint32_t sum = 0; // 使用32位防止累加溢出,虽然uint8累加也不会溢出单片机寄存器
|
||||
uint16_t i;
|
||||
|
||||
for (i = 0; i < length; i++)
|
||||
{
|
||||
sum += buf[start_pos + i];
|
||||
}
|
||||
|
||||
// 返回低8位,相当于 sum % 256
|
||||
return (uint8_t)(sum & 0xFF);
|
||||
}
|
||||
Reference in New Issue
Block a user