问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F303CCT6只能发送NMEA2000消息但是接收不到NMEA2000消息

接收 GD32F303cct6 2000

GD32F303CCT6只能发送NMEA2000消息但是接收不到NMEA2000消息

SIDH2026-04-18
我移植了一个官方写的STM32F429的NMEA2000工程代码到GD32F303CCT6上,但是移植完了之后发现单片机只能发送消息不能接收消息,对着官方代码逻辑看了几遍也是一样的,真是没辙了。
1. 在加NMEA2000协议文件上去之前我已经做了普通CAN测试,收发都没有问题
2. 电脑发送的NMEA2000消息我用CAN分析仪试了,总线信号是没问题的
3. 我在debug中发现是 if (can_receive_message_length_get(CAN0, CAN_FIFO0) > 0) 这个判断一直不成立导致后面所有的逻辑代码全进不去,但是波特率250k,滤波也是配置全接收。
回答 +关注 0
401人浏览 3人回答问题 分享 举报
3 个回答
  • MCU的CAN外设外面应该连接了一个CAN收发器芯片吧?可以测试一下软件到收发器这边有没有收到数据?
    SIDH 2026-4-21 14:53 回复TA
    软件到收发器这边,我用示波器量了CAH_H和CAN_L引脚,只会隔一会儿就跳出几个方波然后消失 
  • 单片机的CAN总线接收数据是通过CAN中断接收的吗?仿真看下,软件发送数据时候,有没有进过CAN接收中断?如果没有,那就再仔细排查一下CAN底层配置,有时候问题就出现在一个特别细节的配置上面。仿真的时候,也可以同步看下相关的寄存器配置。
    SIDH 2026-4-21 09:32 回复TA
    用示波器看CAN收发器芯片引脚波形,TX引脚有正常波形,RX引脚没有波形,CAN_H和CAN_L引脚的波形一会有一会没有,很微弱 
    SIDH 2026-4-21 09:30 回复TA
    我是通过轮询的方式来判断里面有没有数据,然后接收,这个函数 if (can_receive_message_length_get(CAN0, CAN_FIFO0) > 0) 进不去。我用的CAN底层配置是我前面测试没问题的CAN2.0B代码,  
  • 从你的描述上来看,感觉是单片机发送的CAN数据有点问题吧?抓过发送数据是没问题的?
    SIDH 2026-4-20 13:45 回复TA
    单片机发送过去的数据在软件上显示是没有问题的,但是软件发送过来的数据单片机接收不到,我拿CAN分析仪看了,总线发来的数据没有问题 

您需要登录后才可以回复 登录 | 注册