tracy 发表于 2020-8-15 16:28:51

移植bphero_uwb程序,基站中断接收失败

本帖最后由 tracy 于 2020-8-15 16:33 编辑

移植坛主基于STM32F401的tuzhuke-twr_location_v1版本程序到stm32f072芯片;现在标签端程序运行时,dw1000的接收发送指示灯都会闪烁;但是基站端只有接收指示灯闪烁;调试基站端程序发现:基站接收程序能够进接收中断回调处理函数,但是一直卡在if (status_reg & SYS_STATUS_RXFCG)这句,接收失败。因为我的板子没有PA,移植过程中我直接把tuzhuke-twr_location_v1中的PA相关程序注释掉了,不知道有没有影响。我强制进入 if (status_reg & SYS_STATUS_RXFCG)语句,将接收到的数据打印出来,发现接收到的数据和标签发送的数据不一致。现在没有了调试思路,走投无路,来找坛主大神和坛友指导:'(,万分感谢!

int rx_main(void)
{

   dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS);
   //dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);
          //dwt_setpreambledetecttimeout(PRE_TIMEOUT);
          dwt_setrxtimeout(0);
    dwt_enableframefilter(DWT_FF_DATA_EN);
    dwt_rxenable(0);
    bphero_setcallbacks(Simple_Rx_Callback);
    //KalMan_Init();

    if(SHORT_ADDR == 0x0001)
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
//    if(SHORT_ADDR == 0x0002)
//      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
//    if(SHORT_ADDR == 0x0003)
//      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
    while (1)
    {
    }
}
void Simple_Rx_Callback()
{
          uint32 status_reg = 0,i=0;
    uint32 poll_tx_ts, resp_rx_ts, final_tx_ts;
    uint32 poll_rx_ts_32, resp_tx_ts_32, final_rx_ts_32;
    double Ra, Rb, Da, Db;
    int64 tof_dtu;
    char dist_str = {0};
    for (i = 0 ; i < FRAME_LEN_MAX; i++ )
    {
      rx_buffer = '\0';
    }
    dwt_enableframefilter(DWT_FF_RSVD_EN);//disable recevie
    status_reg = dwt_read32bitreg(SYS_STATUS_ID);
    //printf("RECIEVE POLL MESSAGE00!\r\n");
<font color="#ff0000"><b>    if (status_reg & SYS_STATUS_RXFCG)</b></font>
    {
      /* A frame has been received, copy it to our local buffer. */
      printf("RECIEVE POLL MESSAGE11!\r\n");
                        frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;
                       
      if (frame_len <= FRAME_LEN_MAX)
      {
            dwt_readrxdata(rx_buffer, frame_len, 0);
            msg_f = (srd_msg_dsss*)rx_buffer;
            msg_f_send.destAddr = msg_f->sourceAddr;
            msg_f_send.destAddr = msg_f->sourceAddr;
            msg_f_send.seqNum = msg_f->seqNum;
                                        //printf("RECIEVE DATA type:%c\r\n",msg_f->messageData);
                                        //printf("0x%04X <--> 0x%02X%02X\r\n",SHORT_ADDR,msg_f->sourceAddr,msg_f->sourceAddr);
            switch(msg_f->messageData)
            {
                                                        case 'P':
                                                                          printf("RECIEVE DATA LEN:%d\r\n",frame_len);
                                                                   // printf("RECIEVE DATA LEN:%u\r\n",msg_f->messageData);
                  msg_f_send.messageData='A';//Poll ack message
                  int temp = (int)(distance]*100);//convert m to cm
                  msg_f_send.messageData=temp/100;
                  msg_f_send.messageData=temp%100;
//                  dwt_writetxdata(ANCH_RESPONSE_MSG_LEN, (uint8 *)&msg_f_send, 0) ; // write the frame data
//                  dwt_writetxfctrl(ANCH_RESPONSE_MSG_LEN, 0);
                                                                  dwt_writetxdata(14, (uint8 *)&msg_f_send, 0) ; // write the frame data
                  dwt_writetxfctrl(14, 0);
                  //printf("RECIEVE POLL MESSAGE!\r\n");
                  /* Start transmission. */
                  dwt_starttx(DWT_START_TX_IMMEDIATE);
                  //MUST WAIT!!!!!
                  while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS))
                  { };
                                                                          poll_rx_ts = get_rx_timestamp_u64();

                  break;

                case 'F':
                  resp_tx_ts = get_tx_timestamp_u64();
                  final_rx_ts = get_rx_timestamp_u64();
                  final_msg_get_ts(&msg_f->messageData, &poll_tx_ts);
                  final_msg_get_ts(&msg_f->messageData, &resp_rx_ts);
                  final_msg_get_ts(&msg_f->messageData, &final_tx_ts);

                  poll_rx_ts_32 = (uint32)poll_rx_ts;
                  resp_tx_ts_32 = (uint32)resp_tx_ts;
                  final_rx_ts_32 = (uint32)final_rx_ts;
                  Ra = (double)(resp_rx_ts - poll_tx_ts);
                  Rb = (double)(final_rx_ts_32 - resp_tx_ts_32);
                  Da = (double)(final_tx_ts - resp_rx_ts);
                  Db = (double)(resp_tx_ts_32 - poll_rx_ts_32);
                  tof_dtu = (int64)((Ra * Rb - Da * Db) / (Ra + Rb + Da + Db));

                  tof = tof_dtu * DWT_TIME_UNITS;
                  distance_temp = tof * SPEED_OF_LIGHT;
                  distance] = distance_temp - dwt_getrangebias(config.chan,(float)distance_temp, config.prf);//¾ààë¼õ襽ÃÕyÏμêy
                  //kalman filter
                  //distance] = KalMan(distance]);
                  printf("0x%04X <--> 0x%02X%02X :%.02f cm\n",SHORT_ADDR,msg_f_send.destAddr,msg_f_send.destAddr,distance]);
//                  sprintf(dist_str, "Dis: %.02f m", distance]);//m
//                  OLED_ShowString(0, 6,dist_str);
                  break;

                case 'M':
                                                                                USART_puts(&msg_f->messageData,16);
                  break;

                default:
                  break;
            }
      }
      dwt_write32bitreg(SYS_STATUS_ID, (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR));
      dwt_enableframefilter(DWT_FF_DATA_EN);
//      dwt_setrxtimeout(0);
      dwt_rxenable(0);
    }
    else
    {
      dwt_write32bitreg(SYS_STATUS_ID, (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR));
      //enable recive again
      dwt_enableframefilter(DWT_FF_DATA_EN);
      dwt_rxenable(0);
    }
}

蓝点无限 发表于 2020-8-15 16:42:30

你把你巴拉子工程能不能共享出来,大家一起搞搞,我手边正好有072 的主控:D

蓝点无限 发表于 2020-8-15 16:45:28

蓝点无限 发表于 2020-8-15 16:42
你把你巴拉子工程能不能共享出来,大家一起搞搞,我手边正好有072 的主控

stm32基础不好的话,想我这样的,最好一半一半移植。
先把标签下载好,用stm32F4,
然后改rx到072上,直到072 的基站和401的标签通信完毕,说明移植完成

tracy 发表于 2020-8-15 17:21:55

蓝点无限 发表于 2020-8-15 16:45
stm32基础不好的话,想我这样的,最好一半一半移植。
先把标签下载好,用stm32F4,
然后改rx到072上, ...

坛主太谦虚了。。你都做出成品来了,还这么低调。

tracy 发表于 2020-8-15 17:28:42

蓝点无限 发表于 2020-8-15 16:42
你把你巴拉子工程能不能共享出来,大家一起搞搞,我手边正好有072 的主控

可以的,只要能解决dw1000定位的问题,072的工程可以互通

woshi123 发表于 2020-8-21 08:47:14

楼主解决了吗

tracy 发表于 2020-9-23 10:40:10

问题早已解决,感谢坛主支持!

qb123 发表于 2022-4-25 11:10:52

原来是这样啊
页: [1]
查看完整版本: 移植bphero_uwb程序,基站中断接收失败