范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

nrf52832sdk15。2。0蓝牙主模式工作过程分析(uart官网实例)

  目的
  如何在从模式的工程增加一个蓝牙主模式服务,方便快速了解工程的整合,本例是在ble外设的uart蓝牙实例上添加来
  介绍的
  添加步骤
  step 1:
  在nRF_BLE目录中添加nrf_ble_scan.c和ble_db_discovery.c两个文件,在nRF_BLE_Services目录下添加
  ble_nus_c.c文件
  step 2:
  在C/C++选项的Include Paths中,添加以下路径
  step 3:
  在main.c中加入头文件
  #include "ble_db_discovery.h"
  #include "ble_nus_c.h"
  #include "nrf_ble_scan.h"
  #include "ble_advdata.h"
  step 4:
  定义以下几个变量
  BLE_NUS_C_DEF(m_ble_nus_c); /**< BLE Nordic UART Service (NUS) client instance. */
  BLE_DB_DISCOVERY_DEF(m_db_disc); /**< Database discovery module instance. */
  NRF_BLE_SCAN_DEF(m_scan); /**< Scanning Module instance. */
  /**@brief NUS UUID. */
  static ble_uuid_t const m_nus_uuid =
  {
  .uuid = BLE_UUID_NUS_SERVICE,
  .type = NUS_SERVICE_UUID_TYPE
  };
  static uint16_t m_center_handle = BLE_CONN_HANDLE_INVALID;
  step 5:
  在sdk_config.h中加入宏,注意红色字体的内容
  //  主扫描设置 //  BLE_DB_DISCOVERY_ENABLED  - ble_db_discovery - Database discovery module    #ifndef BLE_DB_DISCOVERY_ENABLED #define BLE_DB_DISCOVERY_ENABLED 1 #endif   //  NRF_BLE_SCAN_ENABLED - nrf_ble_scan - Scanning Module //========================================================== #ifndef NRF_BLE_SCAN_ENABLED #define NRF_BLE_SCAN_ENABLED 1 #endif //  NRF_BLE_SCAN_BUFFER - Data length for an advertising set.  #ifndef NRF_BLE_SCAN_BUFFER #define NRF_BLE_SCAN_BUFFER 31 #endif  //  NRF_BLE_SCAN_NAME_MAX_LEN - Maximum size for the name to search in the advertisement report.  #ifndef NRF_BLE_SCAN_NAME_MAX_LEN #define NRF_BLE_SCAN_NAME_MAX_LEN 32 #endif  //  NRF_BLE_SCAN_SHORT_NAME_MAX_LEN - Maximum size of the short name to search for in the advertisement report.  #ifndef NRF_BLE_SCAN_SHORT_NAME_MAX_LEN #define NRF_BLE_SCAN_SHORT_NAME_MAX_LEN 32 #endif  //  NRF_BLE_SCAN_SCAN_INTERVAL - Scanning interval. Determines the scan interval in units of 0.625 millisecond.  #ifndef NRF_BLE_SCAN_SCAN_INTERVAL #define NRF_BLE_SCAN_SCAN_INTERVAL 160 #endif  //  NRF_BLE_SCAN_SCAN_DURATION - Duration of a scanning session in units of 10 ms. Range: 0x0001 - 0xFFFF (10 ms to 10.9225 ms). If set to 0x0000, the scanning continues until it is explicitly disabled.  #ifndef NRF_BLE_SCAN_SCAN_DURATION #define NRF_BLE_SCAN_SCAN_DURATION 0 #endif  //  NRF_BLE_SCAN_SCAN_WINDOW - Scanning window. Determines the scanning window in units of 0.625 millisecond.  #ifndef NRF_BLE_SCAN_SCAN_WINDOW #define NRF_BLE_SCAN_SCAN_WINDOW 80 #endif  //  NRF_BLE_SCAN_MIN_CONNECTION_INTERVAL - Determines minimum connection interval in milliseconds.  #ifndef NRF_BLE_SCAN_MIN_CONNECTION_INTERVAL #define NRF_BLE_SCAN_MIN_CONNECTION_INTERVAL 7.5 #endif  //  NRF_BLE_SCAN_MAX_CONNECTION_INTERVAL - Determines maximum connection interval in milliseconds.  #ifndef NRF_BLE_SCAN_MAX_CONNECTION_INTERVAL #define NRF_BLE_SCAN_MAX_CONNECTION_INTERVAL 30 #endif  //  NRF_BLE_SCAN_SLAVE_LATENCY - Determines the slave latency in counts of connection events.  #ifndef NRF_BLE_SCAN_SLAVE_LATENCY #define NRF_BLE_SCAN_SLAVE_LATENCY 0 #endif  //  NRF_BLE_SCAN_SUPERVISION_TIMEOUT - Determines the supervision time-out in units of 10 millisecond.  #ifndef NRF_BLE_SCAN_SUPERVISION_TIMEOUT #define NRF_BLE_SCAN_SUPERVISION_TIMEOUT 4000 #endif  //  NRF_BLE_SCAN_SCAN_PHY  - PHY to scan on.   // <0=> BLE_GAP_PHY_AUTO  // <1=> BLE_GAP_PHY_1MBPS  // <2=> BLE_GAP_PHY_2MBPS  // <4=> BLE_GAP_PHY_CODED  // <255=> BLE_GAP_PHY_NOT_SET   #ifndef NRF_BLE_SCAN_SCAN_PHY #define NRF_BLE_SCAN_SCAN_PHY 1 #endif  //  NRF_BLE_SCAN_FILTER_ENABLE - Enabling filters for the Scanning Module. //========================================================== #ifndef NRF_BLE_SCAN_FILTER_ENABLE #define NRF_BLE_SCAN_FILTER_ENABLE 1 #endif //  NRF_BLE_SCAN_UUID_CNT - Number of filters for UUIDs.  #ifndef NRF_BLE_SCAN_UUID_CNT #define NRF_BLE_SCAN_UUID_CNT 1 #endif  //  NRF_BLE_SCAN_NAME_CNT - Number of name filters.  #ifndef NRF_BLE_SCAN_NAME_CNT #define NRF_BLE_SCAN_NAME_CNT 0 #endif  //  NRF_BLE_SCAN_SHORT_NAME_CNT - Number of short name filters.  #ifndef NRF_BLE_SCAN_SHORT_NAME_CNT #define NRF_BLE_SCAN_SHORT_NAME_CNT 0 #endif  //  NRF_BLE_SCAN_ADDRESS_CNT - Number of address filters.  #ifndef NRF_BLE_SCAN_ADDRESS_CNT #define NRF_BLE_SCAN_ADDRESS_CNT 0 #endif  //  NRF_BLE_SCAN_APPEARANCE_CNT - Number of appearance filters.  #ifndef NRF_BLE_SCAN_APPEARANCE_CNT #define NRF_BLE_SCAN_APPEARANCE_CNT 0 #endif   //  //  // 
  //  BLE_NUS_C_ENABLED - ble_nus_c - Nordic UART Central Service
  #ifndef BLE_NUS_C_ENABLED
  #define BLE_NUS_C_ENABLED 1
  #endif
  //  Requested BLE GAP data length to be negotiated.
  #ifndef NRF_SDH_BLE_GAP_DATA_LENGTH
  #define NRF_SDH_BLE_GAP_DATA_LENGTH 251
  #endif
  //  NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links.
  #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT
  #define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 1
  #endif
  //  NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links.
  #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT
  #define NRF_SDH_BLE_CENTRAL_LINK_COUNT 1
  #endif
  //  NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count.
  // Maximum number of total concurrent connections using the default configuration.
  #ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT
  #define NRF_SDH_BLE_TOTAL_LINK_COUNT 2
  #endif
  //  NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length.
  // The time set aside for this connection on every connection interval in 1.25 ms units.
  #ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH
  #define NRF_SDH_BLE_GAP_EVENT_LENGTH 6
  #endif
  //  NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size.
  #ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE
  #define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 247
  #endif
  //  NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4.
  #ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE
  #define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408
  #endif
  //  NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs.
  #ifndef NRF_SDH_BLE_VS_UUID_COUNT
  #define NRF_SDH_BLE_VS_UUID_COUNT 1
  #endif
  //  NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table.
  #ifndef NRF_SDH_BLE_SERVICE_CHANGED
  #define NRF_SDH_BLE_SERVICE_CHANGED 0
  #endif
  //  Enable/disable central-specific Peer Manager functionality.
  #ifndef PM_CENTRAL_ENABLED
  #define PM_CENTRAL_ENABLED 1
  #endif
  // 
  //
  step 6:
  在main.c中ble_evt_handler函数中加入代码,见红色字体
  /**@brief Function for handling BLE events.
  *
  * @param[in] p_ble_evt Bluetooth stack event.
  * @param[in] p_context Unused.
  */
  static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
  {
  uint32_t err_code;
  uint16_t conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
  uint16_t role = ble_conn_state_role(conn_handle);
  switch (p_ble_evt->header.evt_id)
  {
  case BLE_GAP_EVT_CONNECTED:
  // Based on the role this device plays in the connection, dispatch to the right handler.
  if (role == BLE_GAP_ROLE_PERIPH)
  {
  NRF_LOG_INFO("Connected");
  m_conn_handle = conn_handle;
  err_code = nrf_ble_qwr_conn_handle_assign(&m_qwr, m_conn_handle);
  APP_ERROR_CHECK(err_code);
  }
  else if (role == BLE_GAP_ROLE_CENTRAL)
  {
  m_center_handle = conn_handle;
  err_code = ble_nus_c_handles_assign(&m_ble_nus_c, m_center_handle, NULL);
  APP_ERROR_CHECK(err_code);
  // start discovery of services. The NUS Client waits for a discovery result
  err_code = ble_db_discovery_start(&m_db_disc, m_center_handle);
  APP_ERROR_CHECK(err_code);
  }
  break;
  case BLE_GAP_EVT_DISCONNECTED:
  NRF_LOG_INFO("Disconnected");
  // LED indication will be changed when advertising starts.
  if (role == BLE_GAP_ROLE_PERIPH)
  {
  m_conn_handle = BLE_CONN_HANDLE_INVALID;
  }
  else if (role == BLE_GAP_ROLE_CENTRAL)
  {
  m_center_handle = BLE_CONN_HANDLE_INVALID;
  }
  break;
  case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
  {
  NRF_LOG_DEBUG("PHY update request.");
  ble_gap_phys_t const phys =
  {
  .rx_phys = BLE_GAP_PHY_AUTO,
  .tx_phys = BLE_GAP_PHY_AUTO,
  };
  err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
  APP_ERROR_CHECK(err_code);
  } break;
  case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
  // Pairing not supported
  err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL);
  APP_ERROR_CHECK(err_code);
  break;
  case BLE_GATTS_EVT_SYS_ATTR_MISSING:
  // No system attributes have been stored.
  err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0);
  APP_ERROR_CHECK(err_code);
  break;
  case BLE_GATTC_EVT_TIMEOUT:
  // Disconnect on GATT Client timeout event.
  err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle,
  BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
  APP_ERROR_CHECK(err_code);
  break;
  case BLE_GATTS_EVT_TIMEOUT:
  // Disconnect on GATT Server timeout event.
  err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle,
  BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
  APP_ERROR_CHECK(err_code);
  break;
  default:
  // No implementation needed.
  break;
  }
  }
  step 7:
  在main.c中加入扫描数据报告代码
  typedef struct
  {
  uint8_t addr[6];
  uint8_t data[32];
  uint8_t len;
  int8_t rssi;
  }SCAN_DATA_INFO;
  SCAN_DATA_INFO scanInfo[16];
  uint8_t scanTotal;
  void clearScanInfo(void)
  {
  for(uint8_t i=0;iparams.p_not_found->peer_addr.addr[j])
  {
  if(++flag>=6)
  {
  return 0;
  }
  }
  }
  }
  return 1;
  }
  /**@brief Function for handling Scanning Module events.
  */
  static void scan_evt_handler(scan_evt_t const * p_scan_evt)
  {
  ret_code_t err_code;
  uint16_t data_offset = 0;
  uint8_t i;
  switch(p_scan_evt->scan_evt_id)
  {
  case NRF_BLE_SCAN_EVT_CONNECTING_ERROR:
  {
  err_code = p_scan_evt->params.connecting_err.err_code;
  APP_ERROR_CHECK(err_code);
  } break;
  case NRF_BLE_SCAN_EVT_NOT_FOUND:
  if(scanTotal < 16)
  {
  if(searchMac(p_scan_evt))
  {
  scanInfo[scanTotal].len = ble_advdata_search(p_scan_evt->params.p_not_found->data.p_data,
  p_scan_evt->params.p_not_found->data.len,
  &data_offset,
  BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME);
  if(scanInfo[scanTotal].len == 0)
  break;
  strncpy((char*)scanInfo[scanTotal].data,(const char*)&p_scan_evt->params.p_not_found
  ->data.p_data[data_offset],scanInfo[scanTotal].len);
  scanInfo[scanTotal].rssi = p_scan_evt->params.p_not_found->rssi;
  for(i=0;i<6;i++)
  {
  scanInfo[scanTotal].addr[i] = p_scan_evt->params.p_not_found->peer_addr.addr[i];
  }
  for(uint8_t j=0;jparams.connected.p_connected;
  // Scan is automatically stopped by the connection.
  NRF_LOG_INFO("Connecting to target %02x%02x%02x%02x%02x%02x",
  p_connected->peer_addr.addr[0],
  p_connected->peer_addr.addr[1],
  p_connected->peer_addr.addr[2],
  p_connected->peer_addr.addr[3],
  p_connected->peer_addr.addr[4],
  p_connected->peer_addr.addr[5]
  );
  clearScanInfo();
  } break;
  case NRF_BLE_SCAN_EVT_SCAN_TIMEOUT:
  {
  NRF_LOG_INFO("Scan timed out.");
  scan_start();
  } break;
  default:
  break;
  }
  }
  step 8:
  在main.c中定义定时器变量及定时事件函数
  #define TICK_1HZ_INTERVAL APP_TIMER_TICKS(1000)
  APP_TIMER_DEF(m_1hz_id);
  static volatile uint8_t tickFlag;
  /**@brief Function for handling the Battery measurement timer timeout.
  *
  * @details This function will be called each time the battery level measurement timer expires.
  *
  * @param[in] p_context Pointer used for passing some arbitrary information (context) from the
  * app_start_timer() call to the timeout handler.
  */
  static void tick_1hz_timeout_handler(void * p_context)
  {
  UNUSED_PARAMETER(p_context);
  tickFlag = 1;
  }
  /**@brief Function for starting application timers.
  */
  static void application_timers_start(void)
  {
  ret_code_t err_code;
  // Start application timers.
  err_code = app_timer_start(m_1hz_id, TICK_1HZ_INTERVAL, NULL);
  APP_ERROR_CHECK(err_code);
  }
  /**@brief Function for initializing the timer module.
  */
  static void timers_init(void)
  {
  ret_code_t err_code = app_timer_init();
  APP_ERROR_CHECK(err_code);
  err_code = app_timer_create(&m_1hz_id,
  APP_TIMER_MODE_REPEATED,
  tick_1hz_timeout_handler);
  APP_ERROR_CHECK(err_code);
  }
  step 9:
  在main.c中的ble_nus_chars_received_uart_print函数打印数据
  /**@brief Function for handling characters received by the Nordic UART Service (NUS).
  *
  * @details This function takes a list of characters of length data_len and prints the characters out on UART.
  * If @ref ECHOBACK_BLE_UART_DATA is set, the data is sent back to sender.
  */
  static void ble_nus_chars_received_uart_print(uint8_t * p_data, uint16_t data_len)
  {
  for (uint32_t i = 0; i < data_len; i++)
  {
  printf("%02x ",p_data[i]);
  }
  printf(" ");
  }
  step 10:
  在main函数中初时化及定时发送数据
  static uint32_t tick;
  static uint8_t sendBuf[4];
  static uint16_t len = 4;
  /**@brief Application main function.
  */
  int main(void)
  {
  // Initialize.
  uart_init();
  log_init();
  timers_init();
  power_management_init();
  ble_stack_init();
  db_discovery_init();
  scan_init();
  gap_params_init();
  gatt_init();
  conn_params_init();
  nus_c_init();
  services_init();
  advertising_init();
  // Start execution.
  printf("r UART started.r ");
  scan_start();
  advertising_start();
  application_timers_start();
  // Enter main loop.
  for (;;)
  {
  if(tickFlag)
  {
  tickFlag = 0;
  if(m_center_handle != BLE_CONN_HANDLE_INVALID)
  {
  tick++;
  sendBuf[0] = (tick>>24) & 0xff;
  sendBuf[1] = (tick>>16) & 0xff;
  sendBuf[2] = (tick>>8) & 0xff;
  sendBuf[3] = tick & 0xff;
  ble_nus_c_string_send(&m_ble_nus_c,sendBuf,len);
  }
  }
  else
  {
  idle_state_handle();
  }
  }
  }
  step 11:
  RAM地址设置
  Demo下载地址:https://download.csdn.net/download/mygod2008ok/11162759

东海颜值爆表浙江第一大海岛绿茶飘香滨海观光垂钓安排!春光明媚,东海风光正好,周末也我们滨海出游的好时节。潮新闻与浙江省海洋监测预报中心一起推出的浙江海岛百岛系列报道,这周带您走进浙江第一大岛舟山岛。舟山岛是浙江第一大岛,中国第四大岛保健酒变蛇尸酒?男人切记不能乱喝,注意事项已帮大家总结好了提到保健酒,大家应该都不陌生。毕竟很多酒友都说保健酒就是男人的加油站好兄弟,像劲酒鸿茅竹叶青三花酒都是身边酒友兄弟的心头好。因此,也有不少人仗着自己几十年酒龄,开始动手尝试用蛇药材又一次语出惊人,大陆吃不起鸡蛋就算了,高铁还没有靠背?有一个俗语叫做和尚打伞,我认为,有些人说的,和他们做的事情,就是在把这一个属于完完整整的体现出来。在前面的时候,有人说大陆很贫穷,连鸡蛋都吃不起,一个鸡蛋分给很多人吃,现在又有人说警花北京的春天虽然短暂但它很迷人吸引了全国各地的游客前来打卡留念自然而然有游客的地方必然有民警的身影让我们一起寻找北京春天的警花绽放在踏青出游路上芳菲四月,北京满城春意城市的各个角落已零突破!苏州发售跨区域跨币种长三角区域绿色存款计划长三角一体化发展突出生态绿色一体化高质量发展特色。近日,中国银行苏州分行联合江苏省分行宁波市分行设立的长三角区域绿色存款计划中银长三角新绿2号绿色存款计划成功发售,实现了绿色存款计在珠台胞组织开展净滩公益活动共建绿美珠海活动合影(图片来源珠海市台港澳事务局)中国台湾网4月13日讯近日,由珠海市台商投资企业协会青年会组织的一年一度的在珠台胞净滩公益活动在高栏港飞沙滩举行。在珠台胞以及其他社会公益组织她是越南世界小姐亚军,公开整容后的火辣身材,美得没法形容在富国岛发布的FashionVoyage秀中,KieuLoan以ChungThanhPhong介绍的一系列服装来彰显她火辣的身材。在节目前的一组预告照中,ChungThanhPho权志龙姐姐之后,郑秀妍也来北京开首店,女装韩流再起?继权志龙姐姐在北京三里屯开个人品牌店WE11DONE,又一韩国女星开出自己的品牌首店。近日,商业那点事儿小编发现,朝阳大悦城新增了一家全新的品牌门店,围挡上标注有围挡标注着BLAN北京奥运会投资3000亿,如今14年过去,亏了还是赚了?文拆东墙编辑布泉在阅读此文前,诚邀您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。众所周知,奥运会对于每个国家来说都非常重要。如果该国可以举办奥运会北京以三个一改革推动新一轮营商环境优化提升新华社北京4月12日电(记者郭宇靖)北京市加快优化营商环境,持续亮出改革实招。12日,北京市发布今年新一轮营商环境改革方案,将以一业一证改革,一件事集成服务,一体化综合监管等三个一再次突破!妇儿医院成功开展首例儿童甲状腺癌手术近期,北京儿童医院顺义妇儿医院甲状腺诊疗中心接诊一位10岁患儿。两年前,家人无意中发现孩子颈部有个肿块,不痛不痒。然在八个月前家长发现孩子脖子上隆起的肿块越来越大,父母才带孩子到北
情人节冷知识情侣间的打是亲骂是爱,是真的吗?常言道,打是亲骂是爱,趁2月14日情人节这个特殊的日子,今天咱们就来聊一个老生常谈的话题吵架到底会不会影响情侣间感情?有人说,谈恋爱在一起不吵架是不可能的,吵架才能发现平时发现不了适合40岁女人的品质感搭配,优雅高级,过年照着穿就可以了优雅得体的打扮可以对中年女人的形象起到修饰效果,特别是你对身材或者身高不太满意,又或者觉得自己已经不再年轻,那么都可以借助搭配来实现美的蜕变。而对于40岁女人来说,穿衣最重要的从来脸上容易长斑的5大原因,希望你没有一脸上容易长斑的原因1不防晒。紫外线对皮肤的伤害远比你知道的要严重得多,皮肤产生皱纹和斑点大部分都是因为光老化引起的2长时间戴浓妆。化妆品含有化学金属成分有吸光的作用,长期戴浓妆容个矮微胖的中年女人,冬季更要学会正确露脚踝,时尚又显比例人到中年后,大多会面临着身材走形或者赘肉囤积等问题,特别是一些个头在1米6以下的中年人,腿上或者腰腹部位赘肉变多,分分钟提升搭配难度,这也是很多人最烦恼的问题之一。其实无论是个头矮苏提达新造型成功,一袭粉色中式旗袍亮相,跟70岁泰王深情对望苏提达新造型成功,一袭粉色中式旗袍亮相,跟70岁泰王深情对望泰王就算是有佳丽三千,也照样需要中宫王后主持大局,重担就落到了四十四岁的苏提达身上。只能说西拉米没有赶上时候,在最美的年72岁张艺谋时隔14年,执导冬奥再让观众感动,此前他的方案险被否72岁张艺谋,再让观众感到2008年,张艺谋成为了北京奥运会开闭幕式的总导演的时候,他才不过58岁。当时张艺谋担任总导演,很多人都嫌弃张艺谋是否太老。2022年,张艺谋再度担任冬奥北京冬奥每日燃点中国钢架雪车期待创造历史,短道速滑再争金昨天冲击两块金牌未果之后,中国代表团今天将在短道速滑赛场上,继续向北京冬奥会的第四块金牌发起冲击。中国队三位选手韩雨桐张楚桐和曲春雨全部进入了今晚短道速滑女子1000米的四分之一决32,91分绝杀米兰旧将梅开二度,紫百合淘汰蓝黑军团,尤文怕吗北京时间2022年2月11日凌晨结束了意大利杯四分之一决赛一场引人关注的对决,由意甲排名第5的蓝黑军团亚特兰大坐镇自己的主场PK意甲联赛2次冠军得主目前意甲排名第8的紫百合佛罗伦萨韩媒曝韩短道速滑决定与匈牙利结盟李基兴剩余比赛我们决定合作北京时间2月11日,据韩联社最新报道,大韩体育会会长李基兴今日最新向韩国国内媒体透露,他们觉得在北京冬奥会上受到多次模棱两可的不公正判罚,感到万分委屈,他们决定在随后的比赛里与匈牙2月11日冬奥看点任子威武大靖联袂出战钢架雪车盼夺牌文案羊城晚报全媒体记者刘毅海报陈健怡刘毅2月11日,北京冬奥会共产生7枚金牌,中国代表团在短道速滑和钢架雪车赛场的表现值得期待。四年前,武大靖在平昌冬奥会夺得短道速滑男子500米金叶莲娜险遭虐杀冰刀插头骨2公分,战斗民族的花滑女王爱比死更冷!叶莲娜战斗民族的花滑女王在花样滑冰赛场上,俄罗斯选手一直散发着无与伦比的美丽,还有着逆天的实力。身怀绝技,今年冬奥的三位参赛者还被评花滑三套娃,一娃更比一娃强。叶莲娜别