您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > Noridc-nRF51822-BLE-to-UART
1nRF51822:BLE-UARTDemoGandyHuangGandy.huang@avnet.com2Open•C:\Keil\ARM\Device\Nordic\nrf51822\Board\pca10001\s110\experimental\ble_app_uart3可以修改蓝牙参数#defineDEVICE_NAME“Nordic_UART”//修改蓝牙名字#defineAPP_ADV_INTERVAL64//广播时间间隔,时间越长,广播电流越小#defineAPP_ADV_TIMEOUT_IN_SECONDS180//广播timeout时间,广播timeout后可以休眠,也可以重新打开广播#defineAPP_TIMER_PRESCALER0//RTC时钟参考,不需要修改#defineAPP_TIMER_MAX_TIMERS2//当你添加一个createtimer时,记得这里+1,最小为2#defineAPP_TIMER_OP_QUEUE_SIZE4//timer队列大小,一般情况6个都可以了#defineMIN_CONN_INTERVAL16//蓝牙连接后,通信的时间间隔,为了功耗处理,请尽量不要太小#defineMAX_CONN_INTERVAL60//蓝牙连接后,通信的最大时间间隔,一般手机会用这个间隔,因此也不要设的太大,以免传输速度比较慢#defineSLAVE_LATENCY0//蓝牙连接后,需要等待几个时间间隔后回应#defineCONN_SUP_TIMEOUT400//蓝牙连接后,timeout的时间#defineFIRST_CONN_PARAMS_UPDATE_DELAYAPP_TIMER_TICKS(5000,APP_TIMER_PRESCALER)//蓝牙连接后,多久之后使用上面的时间参数#defineNEXT_CONN_PARAMS_UPDATE_DELAYAPP_TIMER_TICKS(30000,APP_TIMER_PRESCALER)#defineMAX_CONN_PARAMS_UPDATE_COUNT3#defineBUTTON_DETECTION_DELAYAPP_TIMER_TICKS(50,APP_TIMER_PRESCALER)//按键的时间//下面是bonding需要参数,无需修改#defineSEC_PARAM_TIMEOUT30#defineSEC_PARAM_BOND1#defineSEC_PARAM_MITM0#defineSEC_PARAM_IO_CAPABILITIESBLE_GAP_IO_CAPS_NONE#defineSEC_PARAM_OOB0#defineSEC_PARAM_MIN_KEY_SIZE7#defineSEC_PARAM_MAX_KEY_SIZE164修改32.768时钟源staticvoidble_stack_init(void){uint32_terr_code;//InitializeSoftDevice.//如果使用外面32.768时钟SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM,false);//如果外面没有32.768时钟//SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION,false);5串口初始化staticvoiduart_init(void){/**@snippet[UARTInitialization]*/simple_uart_config(RTS_PIN_NUMBER,TX_PIN_NUMBER,CTS_PIN_NUMBER,RX_PIN_NUMBER,HWFC);//可以根据需要,设定串口对应的引脚,HWFC目前为true,使用4脚串口,为了传输数据跟稳定intmain(void){//Initializeleds_init();timers_init();buttons_init();//uart_init();//本教程不用串口,直接将BLE的数据返回ble_stack_init();gap_params_init();services_init();advertising_init();conn_params_init();sec_params_init();//simple_uart_putstring(START_STRING);6串口接收终端voidUART0_IRQHandler(void)//根据需求更改{staticuint8_tdata_array[BLE_NUS_MAX_DATA_LEN];staticuint8_tindex=0;uint32_terr_code;/**@snippet[HandlingthedatareceivedoverUART]*/data_array[index]=simple_uart_get();index++;if((data_array[index-1]=='\n')||(index=(BLE_NUS_MAX_DATA_LEN-1))){err_code=ble_nus_send_string(&m_nus,data_array,index+1);if(err_code!=NRF_ERROR_INVALID_STATE){APP_ERROR_CHECK(err_code);}index=0;}/**@snippet[HandlingthedatareceivedoverUART]*/}7蓝牙事件staticvoidon_ble_evt(ble_evt_t*p_ble_evt){switch(p_ble_evt-header.evt_id){caseBLE_GAP_EVT_CONNECTED://蓝牙连接成功事件,可加入相关指示等break;caseBLE_GAP_EVT_DISCONNECTED://蓝牙失去连接事件,可加入相关指示等break;caseBLE_GAP_EVT_TIMEOUT://蓝牙广播超时事件,可加入相关指示等if(p_ble_evt-evt.gap_evt.params.timeout.src==BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT){//Configurebuttonswithsenselevellowaswakeupsource.nrf_gpio_cfg_sense_input(WAKEUP_BUTTON_PIN,BUTTON_PULL,NRF_GPIO_PIN_SENSE_LOW);//配置IO,如果powerdonw后可以唤醒//Gotosystem-offmode(thisfunctionwillnotreturn;wakeupwillcauseareset)err_code=sd_power_system_off();//软件默认powerdown,可以继续打开广播APP_ERROR_CHECK(err_code);//advertising_start();//如果不想powerdonw,可以继续打开广播}8UUID更改1打开ble_nus.c2更改下面UUID,记得APP也需要同步修改uint32_tble_nus_init(ble_nus_t*p_nus,constble_nus_init_t*p_nus_init){uint32_terr_code;ble_uuid_tble_uuid;ble_uuid128_tnus_base_uuid={0x9E,0xCA,0xDC,0x24,0x0E,0xE5,0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x00,0x00,0x40,0x6E};9蓝牙的接收数据传输voidnus_data_handler(ble_nus_t*p_nus,uint8_t*p_data,uint16_tlength)//接收入口{uint32_terr_code=ble_nus_send_string(&m_nus,p_data,length);//发送函数if(err_code!=NRF_SUCCESS){//如果不成功,需要安排重新发送}//for(inti=0;ilength;i++)//默认是串口打印出来,这里更改为直接BLE数据返回//{//simple_uart_put(p_data[i]);//}//simple_uart_put('\n');}10烧录蓝牙协议栈1先擦除2选择蓝牙协议栈3Program4看到蓝牙协议栈11打开工程1选择对应的IC2编译3烧录4如果烧录不成功,打开属性12设置Jlink1选择Debug2选择jlink系列号3选择Sw4看到设备,如果没有设备,请看看接口和电源13设置Jlink1选择Flashdownload2添加nrf51xxx14打开mastercontrolpannel1如果无看到一个版本号2重新烧录15打开mastercontrolpannel1升级完成看到版本号2点击start3选择设备4selec16打开mastercontrolpannel1service2enableservice3点击RX4输入数据,按回车5看到接收数据17谢谢
本文标题:Noridc-nRF51822-BLE-to-UART
链接地址:https://www.777doc.com/doc-5424740 .html