DW1000学习之路(一) -------- 使用DW1000发送数据

        DECAWAVE上给了好多例程,第一个便是使用DW1000发送数据,但是官方例程全部都是使用的IDE是CooCox,想要看官方源码的又没有的可以留言找我要。

        我是用的驱动方式为SPI,但是SPI的有四种工作模式,由GPIO.5和GPIO.6上拉或者下拉来决定,具体见下表。

DW1000学习之路(一) -------- 使用DW1000发送数据_第1张图片

       我使用的为第一种工作模式,因此在第一个跳变沿出发,空闲状态为低电平。

         DW1000发送流程:SPI初始化---->中断初始化---- >复位DW1000---->设置SPI速率为3MHZ以下---->初始化DW1000---->设置SPI速率为高速率模式---->将配置好的结构体写入DW1000---->将需要发送的数据写入DW1000---->DW1000的帧格式控制---->发送数据---->读DW1000寄存器发送状态是否发送完成---->发送完成在该位写1清除标志---->完成。

        以下为代码片

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//中断分组
    delay_init(72);//延时初始化
    DW1000_IRQ_INIT();//中断初始化
    DW1000_SPI_INIT();//SPI初始化
    if(DW1000_Wakeup() != DWT_SUCCESS)//DW1000不能被RESET线唤醒,所以需要将将其唤醒
        while(1);
    reset_DW1000();//复位DW1000
    spi_set_rate_low();//设置DW1000为SPI波特率
    if (dwt_initialise(DWT_LOADNONE) == DWT_ERROR)//初始化DW1000,官方例程
        while (1);
    spi_set_rate_high();//把DW1000的SPI波特率重新设置为高
    dwt_configure(&config);//将配置结构体写入DW1000
    while(1)
    {
        dwt_writetxdata(sizeof(buf), buf, 0); //写数据
        dwt_writetxfctrl(sizeof(buf), 0, 0);//数据格式与是否测距
        dwt_starttx(DWT_START_TX_IMMEDIATE);//开始发送
        while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS));//等待发送完成
        dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_TXFRS);//清除标志位
        delay_ms(1000);//1s发送一次
    }
}

配置结构体

static dwt_config_t config = {
    2,               /*DW1000频道,频道相同才可通讯*/
    DWT_PRF_64M,     /* 脉冲重复频率. */
    DWT_PLEN_1024,   /* 前导码长度. Used in TX only. */
    DWT_PAC32,       /* 接收PAC大小. Used in RX only. */
    9,               /* 发送的前导字节长度,用于侦控制 */
    9,               /* 接收的前导字节长度,用于侦控制 */
    1,               /* 0 使用标准 SFD, 1 使用非标准 SFD. */
    DWT_BR_110K,     /* 数据波特率,相同波特率才可通讯 */
    DWT_PHRMODE_STD, /* PHR长度. */
    (1024 + 1 + 64 - 32) /* SFD 超时时间 (preamble length + 1 + SFD length - PAC size). Used in RX only. *///
};

下图给出了接收时建议使用的PAC大小配置,本文使用前导码长度为1024,PAC大小为32.

DW1000学习之路(一) -------- 使用DW1000发送数据_第2张图片

发送的数据buf

static u8 buf[]={'M','o','l','i','a','m','!'};

----------------------------再次编辑分割线(2020/3/24)---------------------------

我已经在我的资源里上传了官方例程的代码,以及cocox的IDE安装包。

例程以及cocox

相关文档,共有五份

你可能感兴趣的:(DW1000)