环境:STM32CubeMx+Clion+Matlab+PCAN
利用STM32CubeMx配置STM32的CAN通信:
默认这两项终端是Enabled的,这里去掉,否则CAN无法同时收发,会卡在接收中断服务里:
通过STM32CubeMx配置的CAN后,还需要在生成的代码中声明CAN类型和对应ID、长度的信息,如下:
/* Private variables ---------------------------------------------------------*/
CAN_HandleTypeDef hcan;
/* USER CODE BEGIN PV */
CAN_FilterTypeDef sFilterConfig;
CAN_TxHeaderTypeDef TxHeader;
CAN_RxHeaderTypeDef RxHeader;
uint8_t TxData[8];
uint8_t RxData[8];
uint32_t TxMailbox;
/* USER CODE END PV */
声明变量hcan为CAN_HandleTypeDef结构体,后面直接通过hcan引用结构体成员;然后对CAN结构体内的成员进行配置:
/* USER CODE BEGIN 2 */
//配置CAN过滤器
sFilterConfig.FilterBank = 0;
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh = 0x0000;
sFilterConfig.FilterIdLow = 0x0000;
sFilterConfig.FilterMaskIdHigh = 0x0000;
sFilterConfig.FilterMaskIdLow = 0x0000;
sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
sFilterConfig.FilterActivation = ENABLE;
sFilterConf