
只接收标准ID=0X80的数据帧,标准数据帧={0x29, 0xF2, 0x01, 0x00, 0x01},匹配好,PB14/15置 低; 一,过滤器配置 void CAN_Filter_Init(void) { CAN_FilterTypeDef sFilterConfig; sFilterConfig.FilterBank = 0; / 过滤器组0 / sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST; / 屏蔽位模�? / sFilterConfig.FilterScale = CAN_FILTERSCALE_16BIT; / 32位�??/ sFilterConfig.FilterIdHigh =0x80; / 要过滤的ID高位 / sFilterConfig.FilterIdLow = 0xFFFF; sFilterConfig.FilterMaskIdHigh = 0xFFFF; / 过滤器高16位每位必须匹�? / sFilterConfig.FilterMaskIdLow = 0xFFFF; / 过滤器低16位每位必须匹�? / sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; / 过滤器被关联到FIFO 0 / sFilterConfig.FilterActivation = CAN_FILTER_ENABLE; / 使能过滤�? / sFilterConfig.SlaveStartFilterBank = 14; if( HAL_CAN_ConfigFilter(&hcan, &sFilterConfig)!=HAL_OK) {Error_Handler(); } if( HAL_CAN_Start(&hcan)!=HAL_OK) { Error_Handler(); } if( HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING)!=HAL_OK) { Error_Handler(); } } 二,中断回调函数 void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { uint32_t i; uint8_t aData[5],RxData[5]; if(hcan->Instance==CAN1) { if( HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, aData)==HAL_OK ) { for(i = 0; i<5; i++) { RxData[i] = aData[i]; } } if((RxData[0]==0x29) && (RxData[1]=0xF2) && (RxData[2]==0x01) && (RxData[3]==0x00) && (RxData[4]==0x01)) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,RESET);
} } |
STM32F103TBU6 封装是VFQFPN36 将PD0和PD1配置成CAN不成功是什么原因
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
STM32F103RCT6 定位孔 镂空,会影响使用吗?
HAL库1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死
L9663驱动开发
用rt_thread 环境编写,DAP-LINK 下载烧录,每一次空芯片下载之后就无法二次下载。求解
stm32cubemx F103芯片tim3 encoder模式pc6和pc7引脚,自动生成代码缺少gpio映射。
按道理来说你可以看看滤波设置,还有就是如果你设置其他ID就可以进中断了?如果是这样那就是滤波设置有问题。
你现在是16位列表模式,且使用标准ID,假设只有ID为0x123才能通过过滤。
你可以这样配置试试:
sFilterConfig.FilterIdHigh = (0x123 << 5);
sFilterConfig.FilterIdLow = (0x123 << 5);
sFilterConfig.FilterMaskIdHigh = (0x123 << 5);
sFilterConfig.FilterMaskIdLow = (0x123 << 5);
当然你可以只留下上面4行中的任意一行,其它换成不会出现的ID,
比方(0X7FF<<5)也可以。
你现在配置应该是有问题的,即使ID是0x80,那你赋值时应该
写成(0x80<<5).