以下是程序:
#include "DSP2833x_Deviceh" // DSP2833x Headerfile Include File
#include "DSP2833x_Examplesh" // DSP2833x Examples Include File
unsigned int Scib_VarRx[100];
unsigned int i;
unsigned int Send_Flag;
unsigned int RX_Flag;
unsigned int TX_Flag;
#define InitDIR() \
EALLOW; \
GpioCtrlRegsGPBPUDbitGPIO49 = 0; \
GpioCtrlRegsGPBDIRbitGPIO49 = 1; \
GpioDataRegsGPBCLEARbitGPIO49 = 1; \
EDIS;
#define RX_EN GpioDataRegsGPBCLEARbitGPIO49 = 1;;
#define TX_EN GpioDataRegsGPBSETbitGPIO49 = 1;
void InitScib(void){
ScibRegsSCICTL1bitSWRESET =0;
ScibRegsSCICCRall =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
ScibRegsSCICTL1all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
#if (CPU_FRQ_150MHZ)
ScibRegsSCIHBAUD =0x0001; // 9600 baud @LSPCLK = 375MHz
ScibRegsSCILBAUD =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
ScibRegsSCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz
ScibRegsSCILBAUD =0x0044;
#endif
ScibRegsSCICTL1all =0x0023; // Relinquish SCI from Reset
}
int ScibTx_Ready(void){
unsigned int i;
TX_Flag = ScibRegsSCICTL2bitTXRDY;
if(ScibRegsSCICTL2bitTXRDY == 1)
i = 1;
else
i = 0;
return(i);
}
int ScibRx_Ready(void){
unsigned int i;
RX_Flag = ScibRegsSCIRXSTbitRXRDY;
if(ScibRegsSCIRXSTbitRXRDY == 1)
i = 1;
else
i = 0;
return(i);
}
void main(void){
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
InitScibGpio();
InitDIR();
InitScib();
for(i = 0; i < 100; i++)
Scib_VarRx[i] = 0;
i = 0;
Send_Flag = 0;
for(;;){
if(ScibRx_Ready() == 1){
Scib_VarRx[i] = ScibRegsSCIRXBUFall;
Send_Flag = 1;
}
if((ScibTx_Ready() == 1) && (Send_Flag == 1)){
TX_EN;
ScibRegsSCITXBUF = Scib_VarRx[i];
RX_EN;
Send_Flag = 0;
i++;
if(i >= 100)
i = 0;
}
}
}
1、#ip link set canX down //关闭can设备;
2、#ip link set canX up //开启can设备;
3、#ip -details link show canX //显示can设备详细信息;
4、#candump canX //接收can总线发来的数据;
5、#ifconfig canX down //关闭can设备,以便配置;
6、#ip link set canX up type can bitrate 250000 //设置can波特率
7、#conconfig canX bitrate + 波特率;
8、#canconfig canX start //启动can设备;
9、#canconfig canX ctrlmode loopback on //回环测试;
10、#canconfig canX restart // 重启can设备;
11、#canconfig canX stop //停止can设备;
12、#canecho canX //查看can设备总线状态;
13、#cansend canX --identifier=ID+数据 //发送数据;
14、#candump canX --filter=ID:mask//使用滤波器接收ID匹配的数据
查错思路:
用回环模式测试收发功能是否正常
若正常,那就是另一台CAN节点有问题
注意,两台对接的节点都必须在正常模式下,才能发送成功,若其中一台不是正常模式,那另一台正常模式的节点是无法发送成功的
若不正常,那就是你的初始化程序有问题
STM32的CAN调试思路,应该是在回环模式下先调通一台,能正常接收自己发送的数据后,再在正常模式下接至少2个节点测试(且两个节点都必须是正常模式)
必须注意,CAN总线硬件有问题时可能初始化失败(比如CAN收发芯片坏了)
无法启动设备可做一下检查:
(1)确认CANTEST软件是否为最新版本,可在广州致远电子的网站上下载最新的软件安装包。
(2)确认驱动是否已正常安装,可观察设备上的“sys灯”的颜色,绿色表示已正常安装驱动,红色表示无安装好驱动,驱动文件可在致远网站上找到。
(3)更换电脑和USB线缆再做测试,若依旧存在问题,则可考虑将设备寄回厂家返修检测了。
在Python编程语言中,以下是能够引起"can中断里打断点异常"这一问题的一些原因和可能的解决方法:
原因:
1代码中存在语法错误或逻辑错误。
2代码中某些部分运行速度过慢或者出现死循环,导致内存占用过大,从而导致程序崩溃。
3代码出现溢出或栈溢出等异常。
解决方法:
1首先需要检查代码中是否存在语法或逻辑错误,应该逐条排查代码并进行调试和测试。同时,我们可以使用Python的调试工具,例如pdb或ipdb,在打断点的时候会详细展示异常信息,帮助我们更加准确定位问题。
2检查代码运行的速度和内存占用情况,特别是在对大数据集进行处理,或大规模循环嵌套和占用大量内存的情况下,应该注重运用优化和算法优化来减轻程序的资源占用,尽量避免程序崩溃。
3当程序发生溢出或栈溢出等异常时,应该检查代码中的类型和函数使用方式是否正确,并提高代码健壮性,避免这种异常的发生。比如可以使用try-except语句来捕获异常,避免程序直接崩溃。
必须要。
CAN总线也叫控制器局域网,是一种主要应用在汽车控制和工业控制上的工业现场总线类型,它的数据传输速度比较快,一般的工业总线可远远达不到这个水平,所以必须要can盒。
我用的USBCAN-E(2E)-U,比较简单,
1、找到该产品品的驱动。
2、到电脑的设备管理器右击 “未知设备”,点击“更新驱动”;
3、到驱动向导里,先点击“浏览计算机以查找驱动程序软件”;
4、点击右下方的“从磁盘安装”;
5、定位到驱动文件夹中的INF文件(路径),点击确定,下一步,即可安装。
以上就是关于dsp28335调试sci,can是什么意思全部的内容,包括:dsp28335调试sci,can是什么意思、linux can *** 作命令、stm32 can可以接收数据,但却无法发送数据,怎么回事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)