前面调CAN的时候,发现CAN的实际的波特率是设置的波特率的一半。然后还去看手册,推公式,改底层库的代码。后面发现不用这么麻烦,换一下使用的库和配置函数就行。使用CAN.h头文件的配置函数就会出现CAN的实际的波特率是设置的波特率的一半这个问题。
使用CAN.h头文件包含的库的函数配置,CAN实际波特率是配置波特率的一半
#include <CAN.h>
#define CAN_TX 26
#define CAN_RX 27
void setup()
{
Serial.begin(115200,SERIAL_8O1);//奇校验
CAN.setPins(CAN_RX,CAN_TX); //设置CAN引脚
if(!CAN.begin(1000E3)) //配置1M实际只有500K
{
Serial.println("Starting CAN failed !");
}
}
修改库,换写法重新配置CAN。先下载 ESP32-TWAI-CAN 这个库。然后配置CAN,配置多少波特率实际就是多少波特率
#include <ESP32-TWAI-CAN.hpp>
#define CAN_TX 26
#define CAN_RX 27
void setup()
{
Serial.begin(115200,SERIAL_8O1);//奇校验
//CAN.setPins(CAN_RX,CAN_TX);
ESP32Can.setPins(CAN_TX, CAN_RX);//设置CAN引脚
// You can set custom size for the queues - those are default
ESP32Can.setRxQueueSize(50); //设置CAN接收缓冲区大小
ESP32Can.setTxQueueSize(50); //设置CAN发送缓冲区大小
ESP32Can.setSpeed(ESP32Can.convertSpeed(1000));//设置波特率为1M
// You can also just use .begin()..
if(ESP32Can.begin())
{
Serial.println("CAN bus started!");
} else {
Serial.println("CAN bus failed!");
}
}