最近买了一块STM32F103RCT的核心版,引出了PB8,PB9,连TJA1050(网上有卖的,几块钱一个)可以做can通讯收发,can发送搞了一两天才搞出来,遇到了一些坑,记录一下。如果你也出现了STM32CAN通讯发不出报文,可以参考下面的方案。
STM32板子最好用电源供电,如果是ST-LINK供电的话,TJA1050也要用ST-LINK上的5V供电,TJA1050是5V供电的,如果STM32板子只用ST-LINK供电,板子上输出的可能没有5V,导致TJA1050无法工作。
TJA1050上的TX接STM32上的TX,RX接STM32上的RX,正常STM32can用的引脚是PA11(RX)和PA12(TX),而复用的引脚是PB8(RX),PB9(TX),这个不要接错了。TJA1050上的CANH接USBCAN的CANH,CANL接USBCAN的CANL。
关于如何复用引脚,其他文章里有说明,不再叙述。
可以用ST-LINK调试,先把CAN设置成回环模式,看发送是否正常,如果正常的话,那就是TJA1050到USBCAN的线路上的问题。如果回环模式发送的都有问题,那大概率就是配置的问题了。
最重要的一点,can线一定要构成回路,不然的话stm32can无法发送数据,导致一直卡在pending中,单引两根线出来,不接其他can通讯设备或can盒的话,是无法通讯的。这个坑了我好久,我之前一直以为不连USBCAN也可以一直发送CAN数据。
**接收端一定要开启一次接收,**STM32才能正常发发送,后面再关掉接收也可以正常发送,这个原因未知,感觉应该跟stm32的can配置有关。
USBCAN连接接收CAN数据时,波特率也要选对,不然的话也会导致STM32CAN发不出来数据。
终于把can发送搞出来了。。。。后面有空再搞接收。。。。希望后面遇到这种问题的童靴可以少走弯路~~
附图一张,延时0.5s发送一帧的数据