|
芯片:STM32F723VGT3
使用CubeMX生成的CMSIS-V2版本的FreeRTOS
创建了一个二值信号量用来同步CAN接收数据
问题:使用标志位可以接收数据,但是信号量不行
这个是can中断函数
extern osSemaphoreId_t CAN_Recv_SemHandle;
int flag_can_recv = 0;
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
{
if((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != RESET)
{
if(hfdcan == &hfdcan1)
{
flag_can_recv = 1;
//osSemaphoreRelease(CAN_Recv_SemHandle);
}
}
}
这个是can数据接收任务
for(;;)
{
if(flag_can_recv == 1)
//if(osSemaphoreAcquire(CAN_Recv_SemHandle, osWaitForever) == osOK)
{
flag_can_recv = 0;
if(HAL_FDCAN_GetRxMessage(&hfdcan1,FDCAN_RX_FIFO0, &fdcan_RxHeader, can_rx_data) == HAL_OK)
{
//fdcanx_send_data(&hfdcan1, 0x111, can_rx_data, 8);
//printf("ID=0x%x\r\n",fdcan_RxHeader.Identifier);
}
}
}
|
|