本帖最后由 lixiangnew 于 2012-11-8 08:03 编辑
我在用nrf241u1p设计usb部分时,遇到莫名其妙的问题
1:我的硬件上面是nrf24lu1p外挂at45db041,由于引脚有限,串口和flash不能共同使用,我在删除串口程序文件的时候,usb系统就不识别了,添加串口文件后,不调用任何函数,usb就可以识别。而我在公司另外一台电脑上面也出现同样的问题,我又换到公司一个同事的笔记本上,让他帮我调试,结果他删除了串口文件,usb居然能识别。本来应该没有影响的,但是出现这个问题搞的一头雾水,没有搞明白是怎么回事,我这边删除串口就不识别usb,不删除就100%的能识别usb,串口文件现在还保留在程序里面。
2:在for循环里面我将收到的8个字节赋值给数组,结果赋值没有成功,读出来的数据不对,我一个一个赋值就可以
void main(){
// uint16_t j,t;
unsigned char databuf[32];
flash_init();
usb_init(); // Initialize USB
EA=1; // Enable global IRQ
P00=0;
databuf[0]=1;
databuf[1]=2;
databuf[2]=3;
bufferwrite(1,1,databuf,2);
delay_ms(10);
buffertopage(1,1);
databuf[0]=0;
databuf[1]=0;
databuf[2]=0;
pagetobuffer(1,1);
bufferread(1,1,databuf,2);
if(databuf[0]==1){
P00=1;
}else{
P00=0;
}
if(databuf[1]==2){
P01=1;
}else{
P01=0;
}
程序到这里运行完全正常,上电写flash正确,读出也正确,两个led都亮
while(1){
if(Ep1OutIsBusy==1){ 这里就有莫名奇妙的问题,这个是usb接收数据中断,接收到8个字节数据,我用led点亮测试,是正确的,但是在下面的赋值语句却不对
// for(j=0;j<8;j++){
// pRecData[j]= map->out1buf[j]; 这条语句感觉就是没有执行,读出来的数据不一致
//
// }
pRecData[0]= map->out1buf[0]; 但是用这样赋值就可以,读出来数据一致
if(pRecData[0]==1){
P00=1;
}else{
P00=0;
}
bufferwrite(1,1,pRecData,2); 写flash的buf也不行,读出来的值不是不对
// buffertopage(1,1);
// pagetobuffer(1,1);
bufferread(1,1,databuf,2);
if(databuf[0]==1){
P01=1;
}else{
P01=0;
}
Ep1OutIsBusy=0;
}
// if(Ep1InIsBusy==0){
// SendReport();
// }
}
}
flash的代码是同事给我的,我直接移植下添加到程序里面,就老出现错误,函数重命名什么的,但是明明没有重命名,后来我一个代码一个代码敲进去,居然好了,编译通过,各个功能都正常,我问同事是怎么回事,他说之前他也遇到过这样的问题,可能是编译器哪里兼容性问题,是在搞不懂,我想不应该有这样的问题的,是不是我哪里设置的问题,不知道坛子里有没有哪位大侠遇到相似的问题的,请指导下,先谢谢了。
一周热门 更多>