查看: 11292|回复: 15

s120主机 uart 代码,可以直接连上官方的uart从机

[复制链接]
  • TA的每日心情

    2016-5-6 08:34
  • 签到天数: 539 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-9-24 22:54:40 | 显示全部楼层 |阅读模式
    分享到:
    模仿官方的程序自己写的代码。代码中有比较多的调试代码,代码有没有优化过,只是简单的
    s120和S110都有在附件中。sdk是6   记得一定要配套,,
    更改过uart的管脚设置及波特率,其他没有变化。测试过程中如果连不上,记得要重新上电,避免芯片睡眠而导致连不上
    工程文件路径:Z:\nrf51822\Board\nrf6310\s120\experimental\ble_app_uart_c
    添加的文件有:ble_nus_c.c ble_nus_c.h
    NRF51822 SD_HEX.rar (535.52 KB, 下载次数: 258)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-10 15:47
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-9-25 07:39:56 | 显示全部楼层
    赞!我想用串口讲数据传到上位机上,一定下载来看看。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-10 15:47
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-9-25 07:42:32 | 显示全部楼层
    要是能有点教程,或者给出相关的参考文档就更好啦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-5-6 08:34
  • 签到天数: 539 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-9-25 09:08:58 | 显示全部楼层
    liubenyuan 发表于 2014-9-25 07:42
    要是能有点教程,或者给出相关的参考文档就更好啦

      第一次写这东西,而且我对蓝牙协议也不是很了解,怕误导别人,都是修修改改的,调试很久,我只有2个nrf51822,和一个下载器,所以比较麻烦。这个程序是有一点小bug在,你先测一下,如果过程中有问题,跟我说下,到时候有时间写一个比较好的中文注释,,,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-9-26 10:30
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-9-25 19:45:17 | 显示全部楼层
    您好,请问下,代码里是蓝牙如何知道rx有数据且数据长度的啊?且TX何时发完数据了啊?谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-5-6 08:34
  • 签到天数: 539 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-9-25 21:44:03 | 显示全部楼层
    wan112127391 发表于 2014-9-25 19:45
    您好,请问下,代码里是蓝牙如何知道rx有数据且数据长度的啊?且TX何时发完数据了啊?谢谢! ...


    主机串口接接收到的数据需要以'\n'结尾,在串口中断函数调用到这个函数
    主机调用的发送函数
    //p_ble_nus_c:保存的连接数据就是句柄及其他的
    //str:指向数据
    //len:长度
    void tx_send(ble_nus_c_t * p_ble_nus_c,char *str ,unsigned char len){

        tx_message_t * p_msg;
        if (len > WRITE_MESSAGE_LENGTH) {
            return ;
        }
    //m_tx_buffer是一个发送队列,
        p_msg              = &m_tx_buffer[m_tx_insert_index++];
        m_tx_insert_index &= TX_BUFFER_MASK;
    //拷贝函数
        strncpy( p_msg->req.write_req.gattc_value,str,len);
    //句柄
        p_msg->req.write_req.gattc_params.handle   = p_ble_nus_c->nus_tx_handle;
    //数据长度
        p_msg->req.write_req.gattc_params.len      = len;

    //指向数据的地址
    p_msg->req.write_req.gattc_params.p_value  = p_msg->req.write_req.gattc_value;

    //这个是偏移,,
    p_msg->req.write_req.gattc_params.offset   = 0;
    //写回复,要求接收端需要接受到数据后返回
        p_msg->req.write_req.gattc_params.write_op = BLE_GATT_OP_WRITE_REQ;
    /连接句柄
        p_msg->conn_handle                         = p_ble_nus_c->conn_handle;

    //不是协议的东西,就是为了一个判断而已
    p_msg->type                                = WRITE_REQ;

        tx_buffer_process();
    }

    跳到tx_buffer_process函数,发现就调用sd_ble_gattc_write这个函数,
    发送的数据有限制,长度应该是直接跟着数据发过去的,这个是nrf的库函数帮你做好了的,你就需要判断事件类型,如果事件是通知等数据操作的,就就直接获取长度及数据的指针,读出来就好了。
    主机----->>>>>>>>>从机 用的是BLE_GATT_OP_WRITE_REQ这个操作
    主机<<<<<------------从机用的是BLE_GATTC_EVT_HVX,你在主机的代码搜索一下就会发现,这两个的后面执行的就是从串口写读数据


    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-9-26 10:30
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-9-26 10:31:40 | 显示全部楼层
    本帖最后由 wan112127391 于 2014-9-26 10:33 编辑

    TX写的非常详细,万分感谢!!!
    不过如果有空的话,希望能把RX的代码也详细讲一讲啊,谢谢呀!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-19 10:02
  • 签到天数: 298 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-9-30 08:56:39 | 显示全部楼层
    谢谢分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-19 10:02
  • 签到天数: 298 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-10-11 21:02:43 | 显示全部楼层
    楼主这个好东西啊!但我编译过不了,这两天得研究研究了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-10-13 19:19:50 | 显示全部楼层
    谢谢楼主!
    双向通信都没问题!

    但我用PCA10000开发板(USB模块)作为主机,PC上运行Master Control Panel的时候,主机单次最多可以发送20个字节,但楼主的程序主机最多能发送16个字节,这是为什么呢?

    还有,如果从机发送过多,会发生断开的现象。但用PCA10000和Master control Panel的话不会发生。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-20 23:39 , Processed in 0.202674 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.