您好,
我尝试在 CAN 上发送一些内容、但它不起作用。 我已经放置了用于监控 TX 引脚 PB5的示波器、信号固定为3.3V、不发送串行信号。
我的代码如下:
//
//
// simple_tx.c -演示简单 CAN 消息传输的示例。
//
//版权所有(c) 2010-2017 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
#include
#include
#include "inc/hw_ca.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/CAN.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
//
//
//跟踪 TX 中断次数的计数器
//发生,它应与发送的 TX 消息数匹配。
//
//
volatile uint32_t g_ui32MsgCount = 0;
//
//
//指示发生了某些传输错误的标志。
//
//
volatile bool g_BErrFlag = 0;
//
//
//此函数使用简单的轮询方法提供1秒的延迟。
//
//
无效
SimpleDelay (空)
{
SysCtlDelay (16000000 / 3);
}
//
//
//此函数是 CAN 外设的中断处理程序。 它会进行检查
//查找中断原因,并保留所有消息的计数
//已传输。
//
//
无效
CANIntHandler (空)
{
uint32_t ui32Status;
ui32Status = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST);
if (ui32Status = CAN_INT_INTID_STATUS)
{
ui32Status = CANStatusGet (CAN0_BASE、CAN_STS_CONTROL);
G_bErrFlag = 1;
}
否则、如果(ui32Status = 1)
{
CANIntClear (CAN0_BASE、1);
G_ui32MsgCount++;
G_bErrFlag = 0;
}
其他
{
}
}
//
//
//配置 CAN 并输入循环以传输周期性 CAN 消息。
//
//
内部
main (空)
{
tCANMsgObject sCANMessage;
uint32_t ui32MsgData;
uint32_t TX_cnt;
uint32_t rx_cnt;
uint8_t * pui8MsgData;
pui8MsgData =(uint8_t *) ui32MsgData;
SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
GPIOPinConfigure (GPIO_PB4_CAN0RX);
GPIOPinConfigure (GPIO_PB5_CAN0TX);
GPIOPinTypeCAN (GPIO_PORTB_BASE、GPIO_PIN_4 | GPIO_PIN_5);
SysCtlPeripheralEnable (SYSCTL_Periph_CAN0);
CANInit (CAN0_BASE);
CANBitRateSet (CAN0_BASE、SysCtlClockGet ()、50000);
CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
IntEnable (INT_CAN0);
CANEnable (CAN0_BASE);
ui32MsgData = 0;
sCANMessage.ui32MsgID = 0x101;
sCANMessage.ui32MsgIDMask = 0;
sCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
sCANMessage.ui32MsgLen = sizeof (pui8MsgData);
sCANMessage.pui8MsgData = pui8MsgData;
while (1)
{
CANErrCntrGet (CAN0_BASE、&TX_cnt、&RX_cnt);
CANMessageSet (CAN0_BASE、1、&sCANMessage、MSG_OBJ_TYPE_TX);
SimpleDelay();
ui32MsgData++;
}
}