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.

[参考译文] CCS/TM4C1294NCPDT:TM4C1294NCPDT

Guru**** 2442090 points
Other Parts Discussed in Thread: TM4C1294NCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/628050/ccs-tm4c1294ncpdt-tm4c1294ncpdt

器件型号:TM4C1294NCPDT

工具/软件:Code Composer Studio

请帮助。 我发现了代码错误:并且无法理解错误:

/*
* CAN 总线 LED 控制器主固件
*为 TI Tiva TM4C1294NCPDT 编写
*

#include
#include
#include

#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ca.h"
#include "inc/hw_ints.h"
#include "driverlib/CAN.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/uart.h"
#include "driverlib/pin_map.h"

#include "utils/uartstdio.h"

#define PI 3.14159265359f

易失性 bool 错误标志= 0;//传输错误标志
unsigned int sysClock;//时钟速度,单位为 Hz

volatile bool rxFlag = 0;//收到 msg 标志

void delay (unsigned int milliseconds){
SysCtlDelay ((sysClock / 3)*(毫秒/ 1000.0f));

// CAN 中断处理程序
void CANIntHandler (void){

无符号长整型状态= CANIntStatus (CAN1_base、CAN_INT_STS_CAUST);//读取中断状态

if (status =CAN_INT_INTID_STATUS){//控制器状态中断
状态= CANStatusGet (CAN1_base、CAN_STS_CONTROL);//读回错误位,对它们执行什么操作?
错误标志= 1;
}否则,如果(status ==1)
{//消息对象1
CANIntClear (CAN1_base、1);//清除中断
错误标志= 0;//清除任何错误标志
rxFlag = 1;//设置 Rx 标志
}否则{//永远不会发生
UARTprintf ("意外的 CAN 总线中断\n");

int main (void){

tCANMsgObject msg;// CAN 报文对象
unsigned char msgData[8];//用于 Rx 消息数据的8字节缓冲区
unsigned char * msgDataPtr =(unsigned char *)&msgData;//创建指向 msgData 的指针,以便我们可以访问各个字节

//从 PLL 以120MHz 运行。
SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_main | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);

//设置调试 UART
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);//启用 UART0 GPIO 外设
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
UARTStdioConfig (0、115200、sysClock);// 115200波特

//设置 CAN1
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);//启用 CAN1 GPIO 外设
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、sysClock、50000);
CANIntRegister (CAN1_base、CANIntHandler);//使用动态矢量表分配
CANIntEnable (CAN1_base、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
IntEnable (INT_CAN1);
CANEnable (CAN1_base);

//设置 msg 对象
MSG.ui32MsgID = 1;
MSG.ui32MsgIDMask = 0;
MSG.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
MSG.ui32MsgLen = sizeof (msgDataPtr);
MSG.pui8MsgData = msgDataPtr;

CANMessageSet (CAN1_base、1、&msg、MSG_OBJ_TYPE_RX);


unsigned int t = 0;//循环计数器
float freq = 0.3;//频率分频器
unsigned int color[3];
浮动强度;


while (1){

if (rxFlag){//发生 Rx 中断

MSG.pui8MsgData = msgData;//设置指向 Rx 缓冲区的指针
CANMessageGet (CAN1_base、1、&msg、0);//从 CAN 外设读取 CAN 消息对象1

rxFlag = 0;//清除 Rx 标志

if (msg.ui32Flags & MSG_obj_data_lost){//检查消息是否丢失
UARTprintf ("检测到 CAN 消息丢失\n");

//从 Rx 缓冲器中读取彩色数据(对于 LED 驱动器、从0-255到0-0xFFFF 缩放)
color[0]= msgData[0]* 0xFF;
color[1]= msgData[1]* 0xFF;
color[2]= msgData[2]* 0xFF;
强度= msgData[3]/255.0f;//从0-255缩放至 float 0-1

//写入 UART 进行调试
UARTprintf ("接收到的颜色\tr:%d\TG:%d\TB:%d\ti:%d\n"、msgData[0]、msgData[1]、msgData[2]、msgData[3]);

返回0;

 错误为:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Azim Ali"] 错误为:

    ???

    Robert

    也可以使用粘贴代码 图标以附加您的代码。 标准剪切和粘贴会破坏空白、使代码很难读取。

    这也将有助于获得适当的主题行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    什么、"柜台生产效率?"   我们得到保证,最近的论坛工作(被视为)是"升级!"