CAN发送
CAN1为例, main.c
中添加:
/\* USER CODE BEGIN PV \*/
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0};
uint32_t TxMailbox;
/\* USER CODE END PV \*/
/\* USER CODE BEGIN 2 \*/
if (HAL\_CAN\_Start(&hcan1) != HAL_OK) {
Error\_Handler();
}
TxHeader.StdId = 0x321;
TxHeader.ExtId = 0x01;
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.IDE = CAN_ID_STD;
TxHeader.DLC = 2;
TxHeader.TransmitGlobalTime = DISABLE;
TxData[0] = 0xAC;
TxData[1] = 0xAD;
/\* USER CODE END 2 \*/
/\* USER CODE BEGIN WHILE \*/
while (1)
{
/\* USER CODE END WHILE \*/
/\* USER CODE BEGIN 3 \*/
++TxData[1];
HAL\_CAN\_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox);
HAL\_Delay(10);
}
/\* USER CODE END 3 \*/
编译下载运行:
CAN接收
CAN接收需要先设置滤波器, 这里设为0, 全部接收:
/\* USER CODE BEGIN 0 \*/
void CAN1\_Config(void) {
/\*## Configure the CAN Filter ##\*/
CAN_FilterTypeDef sFilterConfig;
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;
sFilterConfig.SlaveStartFilterBank = 14;
if (HAL\_CAN\_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK) {
Error\_Handler(); /\* Filter configuration Error \*/
}
/\*## Start the CAN peripheral ##\*/
if (HAL\_CAN\_Start(&hcan1) != HAL_OK) {
Error\_Handler();
}
/\*## Activate CAN RX notification ##\*/
if (HAL\_CAN\_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK) {
Error\_Handler();
}
}
void CAN2\_Config(void) {
/\*## Configure the CAN Filter ##\*/
CAN_FilterTypeDef sFilterConfig;
sFilterConfig.FilterBank = 14;
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;
sFilterConfig.SlaveStartFilterBank = 14;
if (HAL\_CAN\_ConfigFilter(&hcan2, &sFilterConfig) != HAL_OK) {
Error\_Handler(); /\* Filter configuration Error \*/
}
/\*## Start the CAN peripheral ##\*/
if (HAL\_CAN\_Start(&hcan2) != HAL_OK) {
Error\_Handler();
}
/\*## Activate CAN RX notificati