【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"); //换行
}
}
}
}
期待您的点评!
顶起来!
sw2 开关要拨到靠近can芯片的那端! 确实不该啊,厂家要引起重视了。
而且,这板子都没有做过验证就发布了??
感谢楼主分享! chongdongchen 发表于 2020-4-30 09:28
确实不该啊,厂家要引起重视了。
而且,这板子都没有做过验证就发布了??
感谢楼主分享! ...
的确,板子都没有配套的例程! 本帖最后由 huangzushuimd 于 2020-4-30 12:03 编辑
hayden0 发表于 2020-4-30 10:15
的确,板子都没有配套的例程!
可以使用MiniBoard的样例验证测试;
本帖最后由 huangzushuimd 于 2020-4-30 12:31 编辑
上拨是连到板上的SPI FLASH和CAN,请参考如图修改CAN连线,去除R30,R31,R30,R31的pad 交叉飞线连接一下;或者把U3的PIN4 连接到CN9的PIN21, 把U3的PIN1连接到CN9的PIN22. huangzushuimd 发表于 2020-4-30 11:51
可以使用MiniBoard的样例验证测试;
我知道,但那是其他开发板的例程呀,不配套,要做部分修改,跟自己新建公车那个没什么两样了 MM32 eMiniBoard 自发自收实现了吗 谢谢楼主的资料。 CAN收发器芯片是什么呢 稳定性怎么样呢 这个需要CAN电阻吗 很给力 资料。 申请试试看,板子很棒。 给力啊,跟着楼主学习了。 isseed 发表于 2020-5-2 08:48
这个需要CAN电阻吗
电阻可以不要,直连也行
页:
[1]