我用的是tm4c1233e6pm的芯片,哪位大哥能发个两块板子的通信例程给我看看,或者有相关借鉴的资料也行
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我用的是tm4c1233e6pm的芯片,哪位大哥能发个两块板子的通信例程给我看看,或者有相关借鉴的资料也行
用这个例程:
C:\ti\TivaWare_C_Series-2.1.0.12573\examples\boards\dk-tm4c123g\can
把两个板子的CANL CANH连一起,挂上120欧的匹配电阻。
您好 ,请问能不能告诉我TivaWare_C_Series-2.1.0.1257软件在那下载,给一个链接也行,谢谢!,我需要驱动库。
http://www.ti.com.cn/tool/cn/sw-ek-tm4c123gxl
应该是在这里下载的。TIVA WARE开发包。
请问TM4C129内部有集成CAN收发器吗? 直接将两个芯片的CAN 引脚对接可以通信吗?
不可以的,CAN走的协议不一样的,如要加CAN收发器,将TX和RX转换为CANH和CANL才可以进行收发的。
我的意思是 能不能不用can收发器,直接将两块板子的CAN TX和CAN RX对接进行通信?
对的,自己画板子的时候,必须加VP230这个器件。就像485一样,CAN的协议也是差分信号,CANH和CANL,必须要将IO口的TX和RX转为CANH和CANL才能走CAN总线协议的。
CAN控制器通过组成总线的2根线(CAN-H和CAN-L)的电位差来确定总线的电平,在任一时刻,总线上有2种电平:显性电平和隐性电平。
EK-TM4C129评估板好像没看到有集成了can收发器。不过我买了个CAN收发器模块。我按照官方例程初始化了CAN1不能用,用示波器检测PB0和PB1引脚电平不会变化(程序里连续发送数据)。
#define CAN1RXID 0
#define RX1BJECT 1
#define CAN1TXID 2
#define TX1BJECT 2
extern uint32_t ui32SysClock;
tCANMsgObject g_sCAN1RxMessage;
tCANMsgObject g_sCAN1TxMessage;
u8 g_ui8TXMsgData;
u8 g_ui8RXMsgData;
/*
================================================================================
描述 :
输入 :
输出 :
================================================================================
*/
void CAN1IntHandler(void)
{
uint32_t ui32Status;
u8 MsgData;
ui32Status = CANIntStatus(CAN1_BASE, CAN_INT_STS_CAUSE);
if(ui32Status == CAN_INT_INTID_STATUS)
{
ui32Status = CANStatusGet(CAN1_BASE, CAN_STS_CONTROL);
UARTCharPut(UART0_BASE,'3');
}
else if(ui32Status == RX1BJECT)
{
CANIntClear(CAN1_BASE, RX1BJECT);
g_sCAN1RxMessage.pui8MsgData = (u8 *) &MsgData;
CANMessageGet(CAN1_BASE, RX1BJECT, &g_sCAN1RxMessage, 0);
UARTCharPut(UART0_BASE,MsgData);
}
else if(ui32Status == TX1BJECT)
{
CANIntClear(CAN1_BASE, TX1BJECT);
UARTCharPut(UART0_BASE,'4');
}
else
{
UARTCharPut(UART0_BASE,'5');
}
}
/*
================================================================================
描述 :
输入 :
输出 :
================================================================================
*/
void CAN_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinConfigure(GPIO_PB0_CAN1RX);
GPIOPinConfigure(GPIO_PB1_CAN1TX);
GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN1);
CANInit(CAN1_BASE);
CANBitRateSet(CAN1_BASE, ui32SysClock, 500000);
CANIntRegister(CAN1_BASE,CAN1IntHandler);//注册中断函数
CANIntEnable(CAN1_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
IntEnable(INT_CAN1);
CANEnable(CAN1_BASE);
g_sCAN1RxMessage.ui32MsgID = 0;
g_sCAN1RxMessage.ui32MsgIDMask = 0;
g_sCAN1RxMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
g_sCAN1RxMessage.ui32MsgLen = sizeof(g_ui8RXMsgData);
CANMessageSet(CAN1_BASE, RX1BJECT, &g_sCAN1RxMessage, MSG_OBJ_TYPE_RX);
g_ui8TXMsgData = 0;
g_sCAN1TxMessage.ui32MsgID = 1;
g_sCAN1TxMessage.ui32MsgIDMask = 0;
g_sCAN1TxMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
g_sCAN1TxMessage.ui32MsgLen = sizeof(g_ui8TXMsgData);
g_sCAN1TxMessage.pui8MsgData = (uint8_t *)&g_ui8TXMsgData;
}
/*
================================================================================
描述 : 主程序内循环调用
输入 :
输出 :
================================================================================
*/
void CAN_Main(void)
{
g_ui8TXMsgData=0x37;
CANMessageSet(CAN1_BASE, TX1BJECT, &g_sCAN1TxMessage,MSG_OBJ_TYPE_TX);
UARTprintf("HJ\n");
}
我看EK-TM4C129x的板子,好像你作为CAN引脚的PB0和PB1没有被引出来,你是如何连接的呢?
是的,看错了。我看的是BoosterPack Interface的引脚图,直插的是引出来了。
初始化CAN引脚,并且抓不到波形,那肯定是你的CAN没有配置好,能抓到波形和你配置的一致,CAN才算配置OK的。至于CAN的配置,应该是这个例程可以拿来直接用的
ti\TivaWare_C_Series-2.1.3.156\examples\peripherals\can
不过具体没看他用的是CAN0还是CAN1
好像是评估板有点问题,我用自己制作的板子把 PB0 PB1直接引出来接CAN收发器就可以使用了。