这段代码与外设时序相关,不能缩短执行时间。有什么好的方法能够让连接稳定吗?
Kevin Qiu1:
你把这部分具体代码贴出来
user4935757:
回复 Kevin Qiu1:
void readAllData(void){ TIMER3_CMD( ENABLE);//打开pwm输出 delay_ms(5);
TIMER3_CMD( DISABLE);//关闭pwm输出 delay_us(300);//start gap
WriteBitOne(); WriteBitZero();
WriteBitZero(); TIMER3_CMD( ENABLE);//打开pwm输出 delay_ms(5); //给一定的编程时间 sendFlag = 0;
DecodeMul(1);}
u8 DecodeMul(u8 mode){
u16 i = 0; u8 count = 0; u16 temp = 0; nowbit =0; u8 bitState[500] = {0};
for(i=0;i<28;i++) nowData[i] = 0; for(i=0;i<500;i++) bitState[i] = 0; /*开启捕获总开关*/ TimeOutFlg = 1; #if 1 i=0; while(i != 400) { if(isCapture()) { valBuffer_L[i] = LOW_temp; valBuffer_H[i] = TIM2CH1_CAPTURE_VAL; i++; setCaptureStart(StartClear);//开始下次捕获 } if(timerOutCheck()) break; } temp = 0;for(i=10;i<400;i++){ if(temp == 1) { if(valBuffer_L[i] >315) break; if(valBuffer_L[i] > 200) { bitState[bit++] = 0; bitState[bit++] = 0; }else if(valBuffer_L[i] > 70) { bitState[bit++] = 0; } if((valBuffer_H[i] > 700)) { bitState[bit++] = 1; bitState[bit++] = 1; }else if((valBuffer_H[i] > 600)) { bitState[bit++] = 1; bitState[bit++] = 0; bitState[bit++] = 1; } else if((valBuffer_H[i] > 200) ||(valBuffer_H[i] <100) ) { bitState[bit++] = 1; bitState[bit++] = 1; }else if(valBuffer_H[i] > 100) { bitState[bit++] = 1; }//暂时不考虑 小于 60情况更具实际情况调整 } if(bit ==500)break; if(temp == 0) { if((valBuffer_L[i] >315)&&(valBuffer_L[i+1] <300)) { temp =1; if( valBuffer_H[i] <100) { bitState[bit++] = 1; bitState[bit++] = 0; } } }}
//解码for(i=0;i<bit;i++){ if((bitState[i] == 0) &&(bitState[++i] == 1)) { nowData[nowbit/8] <<=1; nowbit++;//执行到这里表示上一个低电平为双信号表示信号0 }else if((bitState[i] == 1) &&(bitState[++i] == 0)) { nowData[nowbit/8] <<=1; nowData[nowbit/8] |=0x01; nowbit++;//执行到这里表示上一个低电平为双信号表示信号0 }else { i-=1; } // if(nowbit==32)break;} bit = 0;
#endif TIMER3_CMD( DISABLE);//关闭pwm输出 TimeOutFlg = 0; return 3;}#endif
Kevin Qiu1:
回复 user4935757:
你看下连接参数:广播间隔、最大连接间隔、最小连接间隔这些是否和你这部分代码有冲突,
调节一下这些参数看看
user4935757:
回复 Kevin Qiu1:
我修改了最大、最小连接间隔,但是没有找到广播间隔在那里设置。修改最大、最小连接间隔没有作用
user4935757:
回复 Kevin Qiu1:
能告诉一下,具体怎么计算这个参数吗?
Kevin Qiu1:
回复 user4935757:
间隔都是以1.25ms为基本单位,具体的计算和说明请看协议栈第五章:https://www.ti.com.cn/cn/lit/ug/swru271i/swru271i.pdf?ts=1592792409618&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Ftool%252Fcn%252FBLE-STACK
user5241018:
你好,我也遇到了你这个问题,请问你是怎么解决的,可以贴出连接参数的图吗?谢谢谢谢
user4935757:
回复 user5241018:
就修改了,连接间隔时间,和可忽略的次数。后面把代码做了优化,分任务处理就可以了呀。
user4935757:
回复 user5241018:
连接参数的计算,在Kevin Qiu1 给的链接里面,理解一下就可以了。