|
只接收标准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);
} } |
有没有大佬知道这个电路输出为什么只有1V多?按数据手册接的,设置外部输出,输出值也不对
有没有大佬有1602的HAL库驱动
stm32 spi从机实现bissc通信(在线等)
stm32 定时器外部时钟1的TI1FP1及TI2FP2的设置问题
STM32F1定时器中触发信号TRC的来源及选择配置是怎么样的
输入捕获测频率返回异常?
STM32F103 bug
怎么将keil工程更换为vscode工具链?
HAL_UART_Receive_IT不管设置size是多少,我串口一次性发4个字符,最后保存在buffer的也只有一个元素
Error in final launch sequence: Failed to execute MI command: target remote localhost:61234
微信公众号
手机版
按道理来说你可以看看滤波设置,还有就是如果你设置其他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).