|
楼主 |
发表于 2022-5-25 15:02:28
|
显示全部楼层
应该是我移植的问题,但是不知道问题出在哪,我这样写就能读出来
struct Spo2_struct Spo2_Str;
void Spo2_ProtocolAnalysis(void);
void Spo2_comm(void);
/*
*********************************************************************************************************
* 函 数 名: Spo2_Init
* 功能说明: 血氧协议预解析
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void Spo2_Init(void)
{
HAL_UART_Receive_IT(&huart5, Spo2_Str.Uart3_RxBuf, 1);
// Spo2_Str.Spo2_Tick = 51;
}
/*
*********************************************************************************************************
* 函 数 名: Uart3_RxSpo2
* 功能说明: usart3血氧数据接收函数,放在中断中
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void Uart3_RxSpo2(void)
{
Spo2_Str.Uart3_RxData[Spo2_Str.Uart3_RxNum++] = Spo2_Str.Uart3_RxBuf[0];
if((Spo2_Str.Uart3_RxData[0] & 0x80) != 0x80) //解析包头数据
{
Spo2_Str.Uart3_RxNum = 0;
}
if(Spo2_Str.Uart3_RxNum >= 7)
{
Spo2_Str.Uart3_RxNum = 0;
}
HAL_UART_Receive_IT(&huart5, Spo2_Str.Uart3_RxBuf, 1); //采用中断都串口数据,不加只读一次
}
/*
*********************************************************************************************************
* 函 数 名: Spo2_ProtocolAnalysis
* 功能说明: 血氧协议预解析
* 形 参: data 要发送的数据, length 数据的长度
* 返 回 值: 无
*********************************************************************************************************
*/
void Spo2_ProtocolAnalysis(void)
{
if((Spo2_Str.Uart3_RxData[0] == 0x00) || (Spo2_Str.Uart3_RxData[0] == 0xAF))
{
Spo2_Str.Spo2_errFlag = 1;
Spo2_Str.PluseRate = 0;
Spo2_Str.Spo2 = 0;
}
else
{
Spo2_Str.Spo2_errFlag = 0;
// if(Spo2_Str.Uart3_RxNum >= 7)
// {
Spo2_Str.PluseRate = (Spo2_Str.Uart3_RxData[3] & (BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6)) | ((Spo2_Str.Uart3_RxData[2] & BIT6) << 1);
Spo2_Str.Spo2 = Spo2_Str.Uart3_RxData[4] & (BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6);
if(Spo2_Str.PluseRate >= 255)
{
Spo2_Str.PluseRate = 0;
}
if(Spo2_Str.Spo2 >= 100)
{
Spo2_Str.Spo2 = 0;
}
Spo2_Str.Uart3_RxNum = 0;
// }
}
}
|
|