caizhiwei 发表于 2020-4-29 20:46

【MM32 eMiniBoard测评报告】+ 03.CAN问题解决,数据收发OK

1. 首先感谢论坛网友提前指出了这个巨坑!
在原理图上,错误之处为:MCU的CAN_TX 连接到了 CAN收发器芯片的 CAN_RX, MCU的CAN_RX 连接到了 CAN收发器芯片的 CAN_TX,
正确的连接方法为:
MCU_CAN_TX <----> CAN_TX,
MCU_CAN_RX <----> CAN_RX,
说干就干,直接把电阻跳线对换,只有这个办法了!

打开历程,默认是250k,参数稍微改一下,改成500k。
把接收发送历程融合在一起,哈哈,成功了!
main.c 如下:
CanTxMsg CAN_TX_Config ={TX_CANID,CAN_ID_STD,CAN_DATA_FRAME,8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
CanPeliRxMsg CanPeliRxMsgStructure;

u8 user_can_mode = 0;

int main(void)   
{
        int keycnt = 0;
        delay_init();
        delay_ms(3000);
        LED_Init();               
        KEY_Init();
        uart_initwBaudRate(115200);
        printf("CAN (500k) demo with mask id is 0x172,0x236!\r\n");
        CANM_Init();
        //只可接收验收代码寄存器中的两个CAN_ID的帧
        CAN_Config(CAN_500K,StandardFrame_DoubleFilter,0x172,0x236,0xff,0xff);               
       
        while(1)
{
       if(KEY4 == 0)
       {
               delay_ms(30);
               while(KEY4 == 0);        
                keycnt++;
                if(keycnt%2)
                {
                                LED2_ON();
                                LED4_OFF();
                                user_can_mode = 1; // r
                }
                else
                {
                                LED2_OFF();
                                LED4_ON();
                                user_can_mode = 0; // s
                }              
       }
       
          if(user_can_mode)
          {
                        Send_CANFrame(&CAN_TX_Config);                //发送一帧CAN数据
                        printf("CAN send data OK!\r\n");        //串口打印
                        delay_ms(300);
          }
          else
          {
                        if(flag)                                                                                                                                       
                        {
                          flag = 0;
                          LED4_TOGGLE();
                          printf("CANID:0x%x Data:",CanPeliRxMsgStructure.ID);        //串口打印
                          for(int i = 0; i < 8; i++)                                                                                                                       
                          {
                                printf("%02x ",CanPeliRxMsgStructure.Data);                //打印CAN报文内容
                          }
                          printf("\r\n");                                                                   //换行
                        }
          }
}

   
}




期待您的点评!



caizhiwei 发表于 2020-4-29 20:47


顶起来!

caizhiwei 发表于 2020-4-29 20:48


sw2 开关要拨到靠近can芯片的那端!

chongdongchen 发表于 2020-4-30 09:28

确实不该啊,厂家要引起重视了。
而且,这板子都没有做过验证就发布了??
感谢楼主分享!

hayden0 发表于 2020-4-30 10:15

chongdongchen 发表于 2020-4-30 09:28
确实不该啊,厂家要引起重视了。
而且,这板子都没有做过验证就发布了??
感谢楼主分享! ...

的确,板子都没有配套的例程!

huangzushuimd 发表于 2020-4-30 11:51

本帖最后由 huangzushuimd 于 2020-4-30 12:03 编辑

hayden0 发表于 2020-4-30 10:15
的确,板子都没有配套的例程!
可以使用MiniBoard的样例验证测试;

huangzushuimd 发表于 2020-4-30 11:56

本帖最后由 huangzushuimd 于 2020-4-30 12:31 编辑

上拨是连到板上的SPI FLASH和CAN,请参考如图修改CAN连线,去除R30,R31,R30,R31的pad 交叉飞线连接一下;或者把U3的PIN4 连接到CN9的PIN21, 把U3的PIN1连接到CN9的PIN22.

hayden0 发表于 2020-4-30 13:34

huangzushuimd 发表于 2020-4-30 11:51
可以使用MiniBoard的样例验证测试;

我知道,但那是其他开发板的例程呀,不配套,要做部分修改,跟自己新建公车那个没什么两样了

uiint 发表于 2020-5-2 08:47

MM32 eMiniBoard

hellosdc 发表于 2020-5-2 08:47

自发自收实现了吗   

mituzu 发表于 2020-5-2 08:47

谢谢楼主的资料。   

suzhanhua 发表于 2020-5-2 08:47

CAN收发器芯片是什么呢   

xietingfeng 发表于 2020-5-2 08:47

稳定性怎么样呢   

isseed 发表于 2020-5-2 08:48

这个需要CAN电阻吗   

wangdezhi 发表于 2020-5-2 08:48

很给力 资料。      

biechedan 发表于 2020-5-2 08:48

         

chenci2013 发表于 2020-5-2 08:48

申请试试看,板子很棒。   

gygp 发表于 2020-5-2 08:48

给力啊,跟着楼主学习了。

caizhiwei 发表于 2020-5-8 09:41

isseed 发表于 2020-5-2 08:48
这个需要CAN电阻吗

电阻可以不要,直连也行
页: [1]
查看完整版本: 【MM32 eMiniBoard测评报告】+ 03.CAN问题解决,数据收发OK