串口透传主从模式设置问题

最近刚刚才接触BLE,把论坛的帖子都看了一遍,同时下载了串口透传的源码进行学习实验,不过还有很多基本问题不是很清楚,比如将一个模块作为透传主模式的时候:扫描,获取特征值,连接…这些动作应该如何进行调用操作的?请各路大神指点一下,感激不尽!
另外,串口透传源码里面介绍可以通过AT指令进行操作,我实验的时候,使用APP连接模块可以直接进行数据透传,但是使用串口向模块发送AT指令的时候并不是返回命令,而是作为普通数据透传到APP。请问若想调用AT控制指令,是不是还要进行一些设置?

我参考SDK里面的代码提取了扫描跟连接部分,不知道这样是否能够正常连接从机,有空的大神帮忙分析一下,谢谢!
struct bd_addr * addr;

// start device scan
app_gap_dev_inq_req(GAP_GEN_INQ_TYPE,QN_ADDR_TYPE);

// connect
for (uint8_t i = 0; i < app_env.inq_idx; i++)
{
		if (co_bt_bdaddr_compare(&app_env.inq_addr[i], addr))
		{
				app_gap_le_create_conn_req(&app_env.inq_addr[i],
																		app_env.addr_type[i],
																		QN_ADDR_TYPE,
																		GAP_INIT_CONN_MIN_INTV,
																		GAP_INIT_CONN_MAX_INTV,
																		GAP_CONN_SUPERV_TIMEOUT);
				break;
		}
}

我购买的开发板还没到货,现在只能闭着眼睛进行猜测分析。-_-!!!

sfc886 发表于 2015-12-3 09:19
我参考SDK里面的代码提取了扫描跟连接部分,不知道这样是否能够正常连接从机,有空的大神帮忙分析一下,谢 …

我现在也在做这一块, 发现设备后应该在响应函数里看到结果吧, 这个系统都是发消息,然后还跟着响应函数

现在已经实现了主机连接从机,并成功发送数据到从机。然而从机确无法向主机发送数据,主要是通过UART发送的数据从机收不到。从机的UART输入是参考主机进行配置的,P00_UART0_TXD_PIN_CTRL,P17_UART0_RXD_PIN_CTRL。
uart_init(QN_DEBUG_UART, USARTx_CLK(0), UART_9600);
uart_tx_enable(QN_DEBUG_UART, MASK_ENABLE);
uart_rx_enable(QN_DEBUG_UART, MASK_ENABLE);
并且可以成功调用初始化程序:
void app_uart_init(void)
{
#if (QN_DEMO_MENU || QN_UART_INT)
app_uart_env.len = 0;
uart_read(QN_DEBUG_UART, app_uart_env.buf_rx, 1, app_uart_rx_done);
#endif
}
“QN_UART_INT”是我自定义参数,在“QN_DEMO_MENU”(主机使用参数)设定的地方也都进行了设置。然而通过串口向从机发送数据时,从机的“app_uart_data_ind_handler”都没有产生反应:
#if (QN_DEMO_MENU || QN_EACI || QN_UART_INT)
/**


  • @brief Handles UART data indication.
  • @param[in] msgid APP_SYS_UART_DATA_IND
  • @param[in] param Pointer to struct app_uart_data_ind
  • @param[in] dest_id TASK_APP
  • @param[in] src_id TASK_APP
  • @return If the message was consumed or not.

*/
static int app_uart_data_ind_handler(ke_msg_id_t const msgid, struct app_uart_data_ind const *ind,ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
switch (ke_state_get(dest_id))
{
case APP_INIT:
break;
case APP_IDLE:
default:
#if QN_EACI
app_eaci_msg_hdl((src_id >> 8) & 0xFF,
src_id & 0xFF,
ind->len,
ind->data);
#elif QN_DEMO_MENU
if (ind->len != 0)
{
memcpy(app_env.input, ind->data, ind->len);
app_menu_hdl();
}
#elif QN_UART_INT
if (ind->len != 0)
{
memcpy(app_env.input, ind->data, ind->len);
app_uart_hdl();
}
#endif
break;
}

#if (QN_EACI&&(EACI_MSG_BUFFER_EN==TRUE))
if (eaci_msg_buf_used == EACI_BUF_DEEP) {
eaci_trans_init();
}
if (eaci_msg_buf_used) {
eaci_msg_buf_used–;
}
return (KE_MSG_NO_FREE);
#else
return (KE_MSG_CONSUMED);
#endif
}
#endif
请问UART设置部分有哪些地方是需要特别注意的?

原因找到了,串口中断唤醒没开:
#define UART_RX_ACTIVE_BIT_EN TRUE /*!< Enable/Disable uart rx active bit set */

蓝牙连接后,调用AT 命令,有个引脚使能的,蓝牙没有连接的情况下,所以都认为是at命令

楼主 能加个 好友吗 有问题 问你 谢谢了 1286181478

k693277161 发表于 2015-12-3 11:10
我现在也在做这一块, 发现设备后应该在响应函数里看到结果吧, 这个系统都是发消息,然后还跟着响应函数

是的,这玩意就像发短信,你发一个消息,就要等人家回消息才能继续下去,不能操之过急。