![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
只接收标准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);
} } |
请问各位前辈 , stm32cubeIDE 烧录报错Error! Failed to read target status 错误!读取目标器状态失败 ,需要怎么解决
STM32F103 ADC利用DMA进行采样问题求解
stm32 usart+dma
各位大佬,那位知道stm32cubeied报:函数声明了未被调用警告怎么解决?(函数声明只是oled的显示功能)函数并没有语法错误
编译器跳出警告:函数声明未被调用警告怎么解决这个问题?(函数声明只是一个OLED显示功能)
使用ST-LINK Utility进行编程,勾选Full Flash Memory Checksum和设置读出保护后LSE不起振问题
想用STMF103ZET6产生两路频率、占空比、相位均可变的方波的话,相位和占空比可调是不是没有办法同时实现啊,只能实现其中一个吗
STM32CubeIDE printf浮点数,浮点数丢失数值
STM32F103ZET6 产生频率、占空比可变的pwm波
STM32F103RCT6使用bootloader跳转到app后无法操作SD卡。
按道理来说你可以看看滤波设置,还有就是如果你设置其他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).