DW1000学习之路(二)--------使用DW1000接收数据

         DW1000接收流程:初始化与配置与上一篇的初始化配置相同接下来写不相同的地方---->DW1000接收使能---->读取DW1000状态寄存器是否接收完成或者接收错误---->读取数据长度---->将数据写入buf中---->写1清除接收完成位。

         主函数代码如下:

int main(void)
{
    int i;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    DW1000_IRQ_Init();
    DW1000_SPI_Init();
    if(DW1000_Wakeup() != DWT_SUCCESS)
        while(1);
    USART1_Init(115200);//将波特率设置为115200
    reset_DW1000();
    spi_set_rate_low();
    if (dwt_initialise(DWT_LOADNONE) == DWT_ERROR)
        USART1_SendStr("DW1000 INIT FAILED\r\n");
    spi_set_rate_high();
    dwt_configure(&config);//同上一篇

    while(1)
    {
        for(i=0;i<FRAME_LEN_MAX;i++)//帧最大长度为127
            rx_buffer[i]=0;
        dwt_rxenable(DWT_START_RX_IMMEDIATE);//立即开始接收
        while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)));//判断是否接收成功或者是接收错误
        if(status_reg & SYS_STATUS_RXFCG)
        {
            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);//将数据读到buf中
            }
            dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//写1清除
        }
        else
        {
            dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR);//错误也写1清除
        }
        for(i=0;i<frame_len;i++)//打印数据
            USART1_SendChar(rx_buffer[i]);
        USART1_SendStr("\r\n");
    }
}

      这样写,CPU会一直处于接收DW1000数据的状态,占用CPU,下篇写使用中断处理,当有接收到数据时,DW1000会产生中断,然后根据接收数据不同的结果进入不同的函数(成功、错误、超时),中断具体实现写在下一篇。

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值