Firefly开源社区

标题: 串口透传主从模式设置问题 [打印本页]

作者: sfc886    时间: 2015-12-2 10:28
标题: 串口透传主从模式设置问题
最近刚刚才接触BLE,把论坛的帖子都看了一遍,同时下载了串口透传的源码进行学习实验,不过还有很多基本问题不是很清楚,比如将一个模块作为透传主模式的时候:扫描,获取特征值,连接......这些动作应该如何进行调用操作的?请各路大神指点一下,感激不尽!
另外,串口透传源码里面介绍可以通过AT指令进行操作,我实验的时候,使用APP连接模块可以直接进行数据透传,但是使用串口向模块发送AT指令的时候并不是返回命令,而是作为普通数据透传到APP。请问若想调用AT控制指令,是不是还要进行一些设置?
作者: sfc886    时间: 2015-12-3 09:19
我参考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;
                        }
        }
我购买的开发板还没到货,现在只能闭着眼睛进行猜测分析。-_-!!!
作者: k693277161    时间: 2015-12-3 11:10
sfc886 发表于 2015-12-3 09:19
我参考SDK里面的代码提取了扫描跟连接部分,不知道这样是否能够正常连接从机,有空的大神帮忙分析一下,谢 ...

我现在也在做这一块, 发现设备后应该在响应函数里看到结果吧, 这个系统都是发消息,然后还跟着响应函数
作者: sfc886    时间: 2015-12-7 15:13
现在已经实现了主机连接从机,并成功发送数据到从机。然而从机确无法向主机发送数据,主要是通过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设置部分有哪些地方是需要特别注意的?
作者: sfc886    时间: 2015-12-7 16:41
原因找到了,串口中断唤醒没开:
#define UART_RX_ACTIVE_BIT_EN                           TRUE       /*!< Enable/Disable uart rx active bit set */

作者: FireBLE_blue    时间: 2015-12-10 11:19
蓝牙连接后,调用AT 命令,有个引脚使能的,蓝牙没有连接的情况下,所以都认为是at命令
作者: 大钊要挣钱1    时间: 2016-3-14 14:52
楼主 能加个 好友吗  有问题 问你 谢谢了  1286181478
作者: 安安    时间: 2016-3-15 10:58
k693277161 发表于 2015-12-3 11:10
我现在也在做这一块, 发现设备后应该在响应函数里看到结果吧, 这个系统都是发消息,然后还跟着响应函数

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




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1