小问题笔记

来源:互联网 发布:高新区山东广电网络 编辑:程序博客网 时间:2024/05/17 03:54

stm32f105c8t6,float浮点运算加减乘除,会导致丢失一点点数据,如果操作的乘除是2的幂次方,那么可以考虑位操作代替float浮点运算,可以得到想要的不丢失的数据。

比如计算剩余里程CAN数据:RxMessage:5F7 :0x03 ,0x82,0xD8,0xA4,0x00,0x00,0x03,0x00;(D3(低4位)+D2)/4;12位数;

1、CurMileageRemain =((RxMessage.Data[3]&0x0F)*256+RxMessage.Data[2])/4;得到的数据是:CurMileageRemain=309 ;

2、CurMileageRemain =((((RxMessage.Data[3]&0x0F)<<8)+RxMessage.Data[2])>>2);得到的数据是:CurMileageRemain=310 ;(正确)


if(SET == CAN_GetITStatus(CAN1, CAN_IT_FF0))
{
CAN_ClearITPendingBit(CAN1, CAN_IT_FF0);
}
else if(SET == CAN_GetITStatus(CAN1, CAN_IT_FOV0))
{
CAN_ClearITPendingBit(CAN1, CAN_IT_FOV0);
}
else
{
// CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0);
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
FIFO_PUT_ONE(CAN1_RxFifo, RxMessage); 

}


3、CAN中断的接收函数,清除标志位: CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0);这个函数中的参数CAN_IT_FMP0,在V3.5外设库中没有关于CAN_IT_FMP0参数的标志位,所以不存在清除此类的标志位。加入 CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0);会导致在断言检查时出现错误。

4.串口寄存器:

UART->SR //中断类型

UART->DR  //读写寄存器

UART->CR->bit7 //开启关闭发送中断

原创粉丝点击