cloudsong 发表于 2018-1-10 17:22:53

STM32F446 CAN通讯问题

本帖最后由 cloudsong 于 2018-1-18 08:51 编辑

设置成自发自收模式,调试过程中只能发送,无法接受,没有使用中断,按照例程上面代码来,但是连最简单的回环模式都不行,调试时候TxMessage有参数,但是接收的RxMessage 无法接收,没有数值。代码如下:参数全部按照例程的来,发现还是不行,求解惑下,哪里出错,感谢

Paderboy 发表于 2018-1-10 18:08:53

本帖最后由 Paderboy 于 2018-1-10 18:10 编辑

建议,先参考下HAL库里的can例程,然后你试试自己用cube配置下can,建个工程。。

http://blog.csdn.net/flydream0/article/details/52317532

我这个是103的can配置。。
void MX_CAN_Init(void)
{

hcan.Instance = CAN1;
hcan.pTxMsg=&TxMessage;   //·¢ËÍÏûÏ¢
hcan.pRxMsg=&RxMessage;   //½ÓÊÕÏûÏ¢
hcan.Init.Prescaler = 16;
hcan.Init.Mode = CAN_MODE_LOOPBACK;
hcan.Init.SJW = CAN_SJW_1TQ;
hcan.Init.BS1 = CAN_BS1_5TQ;
hcan.Init.BS2 = CAN_BS2_3TQ;
hcan.Init.TTCM = DISABLE;
hcan.Init.ABOM = DISABLE;
hcan.Init.AWUM = DISABLE;
hcan.Init.NART = DISABLE;
hcan.Init.RFLM = DISABLE;
hcan.Init.TXFP = DISABLE;
if (HAL_CAN_Init(&hcan) != HAL_OK)
{
    Error_Handler();
}
    CAN1_FilerConf.FilterIdHigh=0X0000;   //32λID
    CAN1_FilerConf.FilterIdLow=0X0000;
    CAN1_FilerConf.FilterMaskIdHigh=0X0000; //32λMASK
    CAN1_FilerConf.FilterMaskIdLow=0X0000;
    CAN1_FilerConf.FilterFIFOAssignment=CAN_FILTER_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0
    CAN1_FilerConf.FilterNumber=0;          //¹ýÂËÆ÷0
    CAN1_FilerConf.FilterMode=CAN_FILTERMODE_IDMASK;
    CAN1_FilerConf.FilterScale=CAN_FILTERSCALE_32BIT;
    CAN1_FilerConf.FilterActivation=ENABLE; //¼¤»îÂ˲¨Æ÷0
    CAN1_FilerConf.BankNumber=14;
      
    if(HAL_CAN_ConfigFilter(&hcan,&CAN1_FilerConf)!=HAL_OK){};
}


发表于 2018-1-11 09:04:15

我用407是没有问题的,楼主先用CAN收发器测试一下发送是否正常。收不到可能是发送未成功,也可能是滤波器设置的不对,滤波器要设置为全接收。
页: [1]
查看完整版本: STM32F446 CAN通讯问题