工具/软件:Code Composer Studio
您好!
我想在 TMS320F28377S 中使用 CAN。 这是我的代码。 我应该每隔一秒发送一次数据。 但它在 CAN 引脚上持续发送帧,CAN 上没有任何内容发送到 USB 转换器(CAN 到 USB 正常工作,也不存在设置问题)。 因此、请帮助解决此问题。
#include "F28x_Project.h"
#include
#include
#include "F28x_Project.h"
#include
#include
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_ca.h"
#include "driverlib/CAN.h"
#include "CAN_lib.h"
//
//全局
//
volatile unsigned long g_ulMsgCount = 0;//跟踪的计数器
//发送次数
//成功。
volatile unsigned long g_BErrFlag = 0;//一个标志来指示某些标志
tCANMsgObject sRXCANMessage2;
tCANMsgObject sTXCANMessage;
tCANMsgObject sRXCANMessage;
#define TX_MSG_OBJ_ID 1.
#define RX_MSG_OBJ_ID2
#define MSG_DATA_LENGTH 8.
#define Transmit 数据长度6
//发生传输错误。
unsigned char ucTXMsgData[4]、ucRXMsgData[4];
unsigned char txMsgData[8]={0};
unsigned char rxMsgData[8];
void init_can (void)
{
EALLOW;
GPIO_SetupPinMux (30、GPIO_MUX_CPU1、1);//GPIO30 - CANRXA
GPIO_SetupPinOptions (30、GPIO_INPUT、GPIO_异 步);
GPIO_SetupPinMux (31、GPIO_MUX_CPU1、1);//GPIO31 - CANTXA
GPIO_SetupPinOptions (31、GPIO_OUTPUT、GPIO_PushPull);
EDIS;
CANInit (CANA_base);
//
//设置可以从 PLL 输出时钟计时
//
CANClkSourceSelect (CANA_base、0);// 500kHz CAN 时钟
//
//为每个模块将 CAN 总线位速率设置为500kHz
//此函数为标称配置设置 CAN 总线时序。
//您可以使用实现对 CAN 总线时序的更多控制
//函数 CANBitTimingSet()代替这个函数(如果需要)。
//此外、请查阅器件数据表以了解更多相关信息
// CAN 模块计时。
//
CANBitRateSet (CANA_base、200000000、250000);
sTXCANMessage.ui32MsgID = 0x1;// 29位标识符
sTXCANMessage.ui32MsgIDMask = 0;
sTXCANMessage.ui32Flags = 0;
sTXCANMessage.ui32MsgLen = Transmit 数据长度;
sTXCANMessage.pucMsgData = txMsgData;
//
//初始化要发送的发送消息对象数据缓冲区
//
txMsgData[0]= 0x7E;
txMsgData[1]= 0x01;
txMsgData[2]= 0x01;
txMsgData[3]= 0x00;
txMsgData[5]= 0x0D;
txMsgData[4]= check_can (txMsgData、4);
sRXCANMessage2.ui32MsgID = 0x01;
sRXCANMessage2.ui32MsgIDMask = 0;
sRXCANMessage2.ui32Flags = 0;
sRXCANMessage2.ui32MsgLen = MSG_DATA_LENGTH;
sRXCANMessage2.pucMsgData = rxMsgData;
CANMessageSet (CANA_base、RX_MSG_OBJ_ID2、&sRXCANMessage2、MSG_OBJ_TYPE_RX);
//
//启动 CAN 模块 A 和 B 操作
//
CANEnable (CANA_base);
}
void send_data_on CAN (void)
{
CANMessageSet (CANA_base、TX_MSG_OBJ_ID、&sTXCANMessage、MSG_OBJ_TYPE_TX);
返回;
}
void recive_data_on can (void)
{
CANMessageGet (CANA_base、2、&sRXCANMessage、true);
返回;
}
unsigned char check_can (unsigned char txMsgData[]、unsigned char len)
{
unsigned char i、chk = 0;
int sum =0;
for (i =0;<len;i++){
chk ^= txMsgData[i];
sum += txMsgData[i];
}
return ((chk^sum)&0xFF);
}
main (空)
{
init_cand();
while (1)
{
SEND_DATA_ON_CAN (); //每隔1秒发送一次数据
延迟(One_second);
}
}