完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
重新连接主机的串口打印会出现 Write Error: 1.
我把我主机发送的程序屏蔽掉发现连接就没有问题代码我放在下面,各位大佬能否帮我看下哪里的问题 static char BLE_SEND_BUF[30] = {0}; static void BLE_SEND_DAT(const char *buf,u32 len) { //设置为写 centralDoWrite = 1; tmos_memset(BLE_SEND_BUF,0,30); tmos_memcpy(BLE_SEND_BUF,buf,len); //tmos_start_task( centralTaskId, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY); if( centralProcedureInProgress == FALSE ) { //if( centralDoWrite ) { // Do a write attWriteReq_t req; req.cmd = FALSE; req.sig = FALSE; req.handle = centralCharHdl; req.len = 25; req.pValue = GATT_bm_alloc(centralConnHandle,ATT_WRITE_REQ,req.len,NULL,0); if ( req.pValue != NULL ) { //*req.pValue = centralCharVal; tmos_memcpy(req.pValue,BLE_SEND_BUF,req.len); if( GATT_WriteCharValue(centralConnHandle,&req,centralTaskId) == SUCCESS ) { centralProcedureInProgress = TRUE; //centralDoWrite = !centralDoWrite; //tmos_start_task( centralTaskId, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY); } else { GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ); } } } } } |
|
相关推荐
1个回答
|
|
Write Error: 1. 意思是gatt的handle 不对,
在你的工程中,就是 centralCharHdl 的值,这个值代表从机中具体的characteristic, ,这个值初始化时候是0,当断开连接后也是0, 当连上后,主机发起查询请求,通常是根据uuid 进行一些列的查询,然后最终赋值给centralCharHdl 然后发送. 当你从机断开后, 这个值会在你主机端的断开事件里面 置0. 如果这时候你没有停止你的发送事件,当再次连上后,如果这个值没有正确的赋值,就会以handle为0 去发送,然后从机端协议栈会直接返回1,这实际上是上面的结果. 至于为什么连上后没有正确的对centralCharHdl 赋值, 因为你的write 事件并没有停止,导致ble协议栈发送在忙, 从而导致主机发起查询请求失败,centralCharHdl 一直为0,你一直产生 Write Error: 1. 你可以这样做: 1,主机端断开后,把发送事件关掉(建议) 或者: 2, 在服务查询失败时候,重启服务查询直到查询成功 |
|
|
|
只有小组成员才能发言,加入小组>>
297 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2769 浏览 2 评论
2275 浏览 1 评论
请问CH573怎么接到linux系统?能通过CH343串口模块接入吗?
364浏览 3评论
452浏览 2评论
973浏览 2评论
388浏览 2评论
248浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-12 03:58 , Processed in 0.847320 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191