使用DSP28346与上位机进行CAN通信

本文介绍了如何使用DSP28346与上位机进行CAN通信,包括硬件连接、代码实现和上位机交互。通过配置GPIO、初始化eCAN模块,设置邮箱进行接收和发送报文,成功实现了双方的通信。同时提供了工程代码的下载链接以供参考。
摘要由CSDN通过智能技术生成

1.准备
DSP28346板子(DSP28335很相似,基本一样)、USB-CAN分析仪(只要能USB转CAN就可以,电子发烧友淘宝店有那种六合一的就可以,9.9包邮好像)、杜邦线;
2.搭建
用杜邦线按下图所示连接USB-CAN和DSP28346板子,通过USB线连接PC和USB-CAN分析仪;需要注意的是:USB-CAN需要与DSP板的数字地GND共地,直接短接即可
需要注意的是:USB-CAN需要与DSP板的数字地GND共地,直接短接即可]

3.代码实现
思路:1)配置GPIO、2)初始化eCAN模块,选择相应的模式,配置波特率、3)邮箱配置:我是用eCANb,邮箱15接收任何id的报文,邮箱16发送任何id的报文、4)写发送、接收函数

// TI File $Revision: /main/6 $
// Checkin $Date: August 19, 2008   14:09:24 $
//###########################################################################
//
// FILE:	DSP2834x_ECan.c
//
// TITLE:	DSP2834x Enhanced CAN Initialization & Support Functions.
//
//###########################################################################
// $TI Release: 2834x Header Files V1.12 $
// $Release Date: March 2011 $
//###########################################################################

#include "DSP2834x_Device.h"     // DSP28 Headerfile Include File
#include "DSP2834x_Examples.h"   // DSP28 Examples Include File
#include "DSP28x_Project.h"

struct ECAN_REGS ECanaShadow;
struct ECAN_REGS ECanbShadow;

Uint32 ecan_data_h;//获取接收报文的数据,用于CANOpen解析
Uint32 ecan_data_l;


//步骤一:ECana和ECanb模块的GPIO初始化设置

//********************************************************
//函数名称:InitECanbGpio()
//函数功能:初始化ECanb模块的GPIO引脚,要根据硬件来设置
//********************************************************
void InitECanbGpio(void)
{
   
	EALLOW;
//	GpioCtrlRegs.GPAPUD.bit.GPIO8 = 1;	  // Disable pull-up for GPIO8  (CANTXB)
//  GpioCtrlRegs.GPAPUD.bit.GPIO12 = 1;   // Disable pull-up for GPIO12 (CANTXB)
//  GpioCtrlRegs.GPAPUD.bit.GPIO16 = 1;   // Disable pull-up for GPIO16 (CANTXB)
    GpioCtrlRegs.GPAPUD.bit.GPIO20 = 1;   // Disable pull-up for GPIO20 (CANTXB)

//	GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0;	  // Enable pull-up for GPIO10 (CANRXB)
//  GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;   // Enable pull-up for GPIO13 (CANRXB)
//  GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;   // Enable pull-up for GPIO17 (CANRXB)
    GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;   // Enable pull-up for GPIO21 (CANRXB)

/* Set qualification for selected CAN pins to asynch only */
// Inputs are synchronized to SYSCLKOUT by default.
// This will select asynch (no qualification) for the selected pins.
// Comment out other unwanted lines.

//  GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 3; // Asynch qual for GPIO10 (CANRXB)
//  GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3; // Asynch qual for GPIO13 (CANRXB)
//  GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch qual for GPIO17 (CANRXB)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 3; // Asynch qual for GPIO21 (CANRXB)

/* Configure eCAN-B pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be eCAN functional pins.

//	GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 2;   // Configure GPIO8 for CANTXB operation
//  GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 2;  // Configure GPIO12 for CANTXB operation
//  GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 2;  // Configure GPIO16 for CANTXB operation
    GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 3;  // Configure GPIO20 for CANTXB operation

//	GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 2;  // Configure GPIO10 for CANRXB operation
//  GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 2;  // Configure GPIO13 for CANRXB operation
//  GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 2;  // Configure GPIO17 for CANRXB operation
    GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 3;  // Configure GPIO21 for CANRXB operation
    EDIS;
}


//步骤二:初始化eCANb模块
//***********************************************
//函数名称:InitECANb
//函数功能:初始化ECanb模块:波特率
//注意事项:ECanb模块初始化并没有配置邮箱方向和MSGID
//Author:Liuxiang 20191008
//***********************************************
void InitECANb()
{
   
	struct ECAN_REGS ECanbShadow;
	EALLOW;

	//CANTX和CANRX引脚设定
	ECanbShadow.CANTIOC.all = ECanbRegs.CANTIOC.all;
	ECanbShadow.CANTIOC.bit.TXFUNC = 1;
	ECanbRegs.CANTIOC.all = ECanbShadow.CANTIOC.all;

	ECanbShadow.CANRIOC.all = ECanbRegs.CANRIOC.all;
	ECanbShadow.CANRIOC.bit.RXFUNC = 1;
	ECanbRegs.CANRIOC.all = ECanbShadow.CANRIOC.all;

	ECanbShadow.CANMC.all = ECanbRegs.CANMC.all;
	ECanbShadow.CANMC.bit.SCB = 1;		//选择为eCAN模式
	ECanbRegs.CANMC.all = ECanbShadow.CANMC.all;

	//初始化消息控制寄存器
	ECanbMboxes.MBOX0.MSGCTRL.all = 0x00000000;
	ECanbMboxes.MBOX1.MSGCTRL.all = 0x00000000;
	ECanbMboxes.MBOX2.MSGCTRL.all 
  • 2
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值