我使用的是STM32F103对DW1000进行处理,F103的外部中断线配置我就不再这里说了,网上的资源一找一大把。

STM32的对应的中断服务函数里只是在有外部中断的情况下,执行port_deca_isr()函数,该函数为DW1000官方命名的void(*port_deca_isr_t)(void);定义的函数指针。该函数通过执行port_set_deca_isr()的时候赋值,赋值的函数为官方例程中的void dwt_isr(void)函数,而在这个函数中赋值了四个回调函数,当然是函数指针,对应了dwt_local_data_t这个结构体下的四个成员,分别是发送的配置时间,接收的接收完成事件,超时事件,错误事件。

说了这么一大堆,似乎有些绕绕弯弯,但是没办法,官方就是这么写的,简而言之,就是写几个函数,函数类型为void(*dwt_cb_t)(const dwt_cb_data_t *)的函数,对应着上一段所说的几个事件,并通过设置回调函数dwt_setcallbacks(),将你所写的函数名字放进去,中断产生之后就执行了这些你写的函数。继而设置所需要的中断源。这样,等到相应的中断事件产生之后,就会执行中断,然后根据中断事件来执行上面说的回调函数。

dwt_isr()官方函数在deca_device.c官方文件里两千一百行,看得懂就看一下,看不懂的话就跳过去吧

我只写了接收的三个事件。名字分别为rx_cb_ok,rx_cb_error,rx_cb_to;好了,下面写主函数所需要的配置。

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);//将波特率设置为115200reset_DW1000();spi_set_rate_low();if (dwt_initialise(DWT_LOADNONE) == DWT_ERROR)USART1_SendStr("DW1000 INIT FAILED\r\n");spi_set_rate_high();//dwt_forcetrxoff();dwt_configure(&config);//多么眼熟的配置,没错和上两篇一摸一样。
/**
*@brief  :之前一直没有说到一个问题就是上面dwt_configure()函数执行的时候,DW1000需要为空闲状态
*         也就是说不能处于接收接收状态,如果处于接收状态,则使用dwt_forcetrxoff()函数关闭就好
*///中断服务处理port_set_deca_isr(dwt_isr);//传参为dw1000的中断服务函数例程dwt_setcallbacks(NULL,&rx_cb_ok,&rx_cb_to,&rx_cb_error);//第一个用于发送我没有写,后三个为接收的三个中断事件,函数名字上面有写//dwt_enableframefilter(DWT_FF_DATA_EN);//帧过滤,使能则DW1000自动过滤掉帧数不匹配的数据,但是不使能也能正常接收while(1);//这里我就不写了,不同的功能不同的写法,不同的要求不一样的写法,建议使用一个标志位,判断标志位来决定主函数的功能
}

rx_cb_ok函数如下

/**
*@struct member:dwt_cb_data_t 结构体成员uint32 status;      //initial value of register as ISR is entereduint16 datalength;  //length of frameuint8  fctrl[2];    //frame control bytesuint8  rx_flags;    //RX frame flags, see above
*/
/**
*@note         :dwt_cb_data_t 该结构体已经通过dwt_isr()函数全部赋值过了
*/
static __INLINE void rx_cb_ok(const dwt_cb_data_t *data)
{u8 buf[127];//数据最大长度为127u8 len;//数据长度,我只是读出来而已,不使用。需要用的话应该定义为全局变量,上同len=data.datalength-2;dwt_readrxdata(buf,len,0);//将接收到的数据放入buf,为0代表从第0位开始读,此数根据自己定义的通讯协议还有帧过滤来决定
}

rx_cb_to函数如下

static __INLINE void rx_cb_to(const dwt_cb_data_t *data)
{//嘿嘿,偷个懒,不写了,反正正常执行不会到这里,就算到这里了重新使能接收就可以了dwt_rxenable(DWT_START_RX_IMMEDIATE);
}

rx_cb_error函数如上

DW1000学习之路(三)--------DW1000的中断处理问题相关推荐

  1. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. 我们就 ...

  2. typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)

    提起类,不得不说一下,强类型编程语言,如php,java,c++等都有类的概念.而js作为一门弱类型语言,是没有类这个概念的,虽然也能模拟类的实现,但总归不是类.so,ts也只是模拟类而已,使得更贴切 ...

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

    DW1000接收流程:初始化与配置与上一篇的初始化配置相同接下来写不相同的地方---->DW1000接收使能---->读取DW1000状态寄存器是否接收完成或者接收错误---->读取 ...

  4. 函数式编程学习之路(三)

    入门: 函数式编程之艰难,在于这玩意更接近数学,就是数学之"用",大牛们在云端,玩纯数学去了,弄出一堆公式及概念,码农们爬在地上,辛苦耕耘,要的是看得见摸得着的,函数式编程就是要打 ...

  5. ZYNQ学习之路(三):自定义IP实现PL处理PS写入BRAM的数据

    目录 一.实验简介 二.vivado部分处理 三.SDK编程 四.实验测试 五.总结 一.实验简介 ZYNQ系列嵌入式FPGA可以使PS将数据写入PL部分BRAM,PL可以将数据读取后再重新写入BRA ...

  6. Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)

    创建精灵表单: 创建动画先要把图片整合到一个图片上然后生成plist文件: 方法下载Zwoptex软件:http://www.zwopple.com/zwoptex/ 然后打开选择 create ne ...

  7. 学习之路三十一:Varchar和NVarchar的理解

    前段时间在测试的时候发现了一个问题,看过Log之后发现在插入数据到数据库的时候发生异常了! 原因是由于插入的字符串太长,项目中的用到的类型是NVARCHAR,下面就是对它们的理解: 1.VARCHAR ...

  8. MongoDB学习之路(三)

    数据库 一个MongoDB可以建立多个数据库. MongoDB的默认数据库为"db",该数据库存储在data目录中. MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自 ...

  9. Object-c学习之路三(@class与#import的区别)

    //@class只是为了声明B是一个类  当两个类相互包含的时候#import是做不到的 //一般在.h文件中用@class声明一个类成员 在..m文件中具体用到时才用#import应用 //二者区别 ...

最新文章

  1. xdoj(1187~1195 )Orz熊猫杯。
  2. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | ClassLoader#loadClass 函数分析 | BaseDexClassLoader#findClass 分析 )
  3. java方面的文献综述怎么写_文献综述应该怎么写?
  4. VisualStudio.gitignore git 忽略
  5. 牛客网_PAT乙级_1023旧键盘打字(20)【别人代码里用到的hash是啥】
  6. Activity后台运行一段时间回来crash问题的分析与解决
  7. 17-mysql-数据定义语言-ddl
  8. ABB机器人VGT文件_ABB机器人与焊机之间通讯方式
  9. ftp4j的android应用
  10. 【个人笔记】OpenCV4 C++ 快速入门 23课
  11. MySQL更新死锁问题
  12. Linux AHCI驱动分析之设备初始化
  13. 推荐系统论文阅读:Entire Space Multi-Task Model
  14. linux磁盘写保护怎么修改_linux 文件、目录写保护
  15. 启动root用户 银河麒麟_银河麒麟V10启用VNCServer
  16. 用友添加附件设置文件服务器,用友服务器怎么配置上传附件
  17. @Transactional的介绍和使用
  18. UI设计入门:五种基本APP界面类型【萧蕊冰】
  19. 用EXCEL统计分段数据的个数
  20. 百度网盘开放平台接入(Python)

热门文章

  1. 转 Unity绳子插件Obi+Rope下载与简单使用方法
  2. 国产示波器采用的ADC芯片
  3. 教程:游戏LOGO=游戏符号+名字
  4. Oracle 动态游标 PL/SQL 动态SQL语句 open for [using] 语句
  5. 我的刻骨铭心的2018——致未来的自己和现在的你
  6. 三十五 我在软件园的那些日子里
  7. 新房装修流程详细步骤有哪些? 新房装修流程注意事项有哪些?
  8. 域名CNAME记录不能同时适配根域名和www的解决方法
  9. outlook邮箱pc/mac客户端下载 含最新版
  10. 子选择器和后代选择器