Can communication example for Arduino Core STM32.
- STM32F103 Development Board.
- STM32F303 Development Board.
- STM32F405 Development Board.
- STM32F407 Development Board.
- STM32F446 Development Board.
- CAN Transceiver.
MCP2551/2561(5V)
TJA1040/1050/1055(5V)
SN65HVD230/231/232(3.3V)
NOTE:3V CAN Trasnceviers are fully interoperable with 5V CAN trasnceviers.
Check here and here.
STM32 core support for Arduino.
https://github.com/stm32duino/Arduino_Core_STM32
You can use this library.
You can use this library.
You can use this library.
ESP-IDE has a CAN Network example.
https://github.com/espressif/esp-idf/tree/master/examples/peripherals/can/can_network
Edit /boot/config.txt and reboot.
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
dtoverlay=spi-bcm2835-overlay
Make sure the device is ready after reboot.
$ dmesg | grep mcp251x
[ 19.992025] mcp251x spi0.0 can0: MCP2515 successfully initialized.
$ ls /sys/bus/spi/devices/spi0.0
driver modalias net of_node power statistics subsystem uevent
$ ls /sys/bus/spi/devices/spi0.0/net
can0
$ sudo /sbin/ip link set can0 up type can bitrate 1000000
$ dmesg | grep can0
[ 19.992025] mcp251x spi0.0 can0: MCP2515 successfully initialized.
[ 1309.525795] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
$ sudo ifconfig can0
can0: flags=193<UP,RUNNING,NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ sudo ifconfig can0 txqueuelen 1000
Install can-utils.
$ sudo apt-get install can-utils
#Receiver
$ candump can0
#Transmitter
$ cansend can0 123#11223344AABBCCDD
There is a module of SN65HVD230 like this.
The terminating resistance is 120 ohms.
A transmission error will occur.
I have removed the terminating resistor.
And I used a external resistance of 150 ohms.
The error is fixed.