请教各位大侠,在手册中写有 CAN在接收到有效报文后存入接收FIFO邮箱中,应用程序只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文,读取报文后通过软件释放输出邮箱以便接收下个报文。
现有问题,软件释放输出邮箱后邮箱内容是否为空?我在线调试是发现释放后并不为空,而是显示最先收到的报文,这样正常吗?这种现象导致3个邮箱满后不能实时接收之后报文,程序总是显示FIFO中最先收到的报文,就好像软件释放输出邮箱不起作用似的。PS:接收程序根据固件库函数编写,释放输出邮箱程序如下:
void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber)
{
/* Check the parameters */
assert_param(IS_CAN_ALL_PERIPH(CANx));
assert_param(IS_CAN_FIFO(FIFONumber));
/* Release FIFO0 */
if (FIFONumber == CAN_FIFO0)
{
CANx->RF0R |= CAN_RF0R_RFOM0;//对RF0R寄存器的RFOM0置1为释放输出邮箱
}
/* Release FIFO1 */
else /* FIFONumber == CAN_FIFO1 */
{
CANx->RF1R |= CAN_RF1R_RFOM1;
}
}
请各位大侠解答下,不甚感激!! |