I can't experiment - I can't receive parcels with a CAN harness and special software.
Hello! I can't experiment - I can't receive parcels with a CAN harness and special software. Here is a similar experiment https://www.programmersought.com/article/2185872275/.
I have elements:
1 stm32f103c8t6 board,
2 Debugger st-link v2 (china),
3 SN65HVD230 CAN Bus transceiver,
4 Danfoss CG150 CAN harness.
I have software:
1 STM32CUBEMX 6, FW_F1 V1.8.3
2 Keil 5,
3 Danfoss CAN King (CAN wiretapping software).
Everything is being built and debugged, I have met all the conditions, but I do not see the parcels sent by me in CAN King. Can you help? Thank you in advance! Thank you for understanding.
* USER CODE BEGIN PV */
extern CAN_HandleTypeDef hcan;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_NVIC_Init(void);
/* USER CODE BEGIN PFP */
extern uint8_t CAN_TxMessage(uint8_t ide,uint32_t id,uint8_t len,uint8_t *data);
extern void CAN_Config(void);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
uint8_t data[8]={1,2,3,4,5,6,7,8};
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
MX_CAN_Init();
/* Initialize interrupts */
MX_NVIC_Init();
/* USER CODE BEGIN 2 */
CAN_Config (); // Конфигураци�? фильтра
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
if(!CAN_TxMessage (0,0x222,8, data))// МОЖЕТ отправить
HAL_GPIO_TogglePin(LedGreen_GPIO_Port,LedGreen_Pin);
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/* CAN init function */
void MX_CAN_Init(void)
{
hcan.Instance = CAN1;
hcan.Init.Prescaler = 6;
hcan.Init.Mode = CAN_MODE_NORMAL;
hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan.Init.TimeSeg1 = CAN_BS1_8TQ;
hcan.Init.TimeSeg2 = CAN_BS2_7TQ;
hcan.Init.TimeTriggeredMode = DISABLE;
hcan.Init.AutoBusOff = ENABLE;
hcan.Init.AutoWakeUp = ENABLE;
hcan.Init.AutoRetransmission = DISABLE;
hcan.Init.ReceiveFifoLocked = DISABLE;
hcan.Init.TransmitFifoPriority = DISABLE;
if (HAL_CAN_Init(&hcan) != HAL_OK)
{
Error_Handler();
}
}
/* USER CODE BEGIN 1 */
void CAN_Data_Send(void)
{
CAN_TxHeaderTypeDef Tx_Header;
Tx_Header.ExtId = 0x0CFFEAD2;
Tx_Header.RTR = CAN_RTR_DATA;
Tx_Header.IDE = CAN_ID_EXT;
Tx_Header.DLC = 8;
uint32_t mail_Box;
uint8_t Tx_Data[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
HAL_CAN_AddTxMessage(&hcan, &Tx_Header, Tx_Data, &mail_Box);
}
void CAN_Config(void)
{
CAN_FilterTypeDef CAN_FilterType;
CAN_FilterType.FilterBank=0;
CAN_FilterType.FilterIdHigh=0x0000;
CAN_FilterType.FilterIdLow=0x0000;
CAN_FilterType.FilterMaskIdHigh=0x0000;
CAN_FilterType.FilterMaskIdLow=0x0000;
CAN_FilterType.FilterFIFOAssignment=CAN_RX_FIFO0;
CAN_FilterType.FilterMode=CAN_FILTERMODE_IDMASK;
CAN_FilterType.FilterScale=CAN_FILTERSCALE_32BIT;
CAN_FilterType.FilterActivation=ENABLE;
CAN_FilterType.SlaveStartFilterBank=14;
if(HAL_CAN_ConfigFilter(&hcan,&CAN_FilterType)!=HAL_OK)
{
Error_Handler();
}
if(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING)!=HAL_OK)
{
Error_Handler();
}
if(HAL_CAN_Start(&hcan)!=HAL_OK)
{
Error_Handler();
}
}
uint8_t CAN_TxMessage(uint8_t ide,uint32_t id,uint8_t len,uint8_t *data)
{
uint32_t TxMailbox;
CAN_TxHeaderTypeDef CAN_TxHeader;
HAL_StatusTypeDef HAL_RetVal;
uint16_t i = 0;
if(ide == 0)
{
CAN_TxHeader.IDE = CAN_ID_STD;
CAN_TxHeader.StdId = id;
}
else
{
CAN_TxHeader.IDE = CAN_ID_EXT;
CAN_TxHeader.ExtId = id;
}
CAN_TxHeader.DLC = len;
CAN_TxHeader.RTR = CAN_RTR_DATA;
CAN_TxHeader.TransmitGlobalTime = ENABLE;
while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0)
{
i++;
if(i>0xfffe)
return 1;
}
HAL_Delay(500);
HAL_RetVal = HAL_CAN_AddTxMessage(&hcan,&CAN_TxHeader,data,&TxMailbox);
if(HAL_RetVal != HAL_OK)
{
return 1;
}
return 0;
}
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
CAN_RxHeaderTypeDef CAN_RxHeader;
HAL_StatusTypeDef HAL_Retval;
uint8_t Rx_Data[8];
uint8_t Data_Len=0;
uint32_t ID=0;
//uint8_t i;
HAL_Retval = HAL_CAN_GetRxMessage(hcan,CAN_RX_FIFO0,&CAN_RxHeader,Rx_Data);
if(HAL_Retval == HAL_OK)
{
Data_Len = CAN_RxHeader.DLC;
if(CAN_RxHeader.IDE)
ID = CAN_RxHeader.ExtId;
else
ID = CAN_RxHeader.StdId;
//printf("id:%x\r\n",ID);
//printf("Data_Len:%d\r\n",Data_Len);
//for(i=0;i<8;i++)
//printf("Rx_Data[%d]=%x\r\n",i,Rx_Data[i]);
}
}
/* USER CODE END 1 */
