野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10818|回复: 10

2.4G无线通信数据读取问题

[复制链接]
发表于 2017-8-11 08:54:02 | 显示全部楼层 |阅读模式
本帖最后由 小米 于 2017-8-11 08:56 编辑

火哥,请问下 SPI_NRF_ReadBuf(u8 reg, short *pBuf,u8 bytes)和SPI_NRF_WriteBuf(u8 reg, short *pBuf,u8 bytes),  我的*pBuf数组假如是 short a[3]={-10,-20,-30},地址是0X01,请问 u8 bytes这个值应该是多少 了?
我u8 bytes设置为2的时候,读出来的值是{1,1,-30},就只有第三个数值读出来了,如果u8 bytes设置为6时,读出来的值是{1,1,1},是哪里出问题了?谢谢!
回复

使用道具 举报

发表于 2017-8-11 09:08:09 | 显示全部楼层
你这函数参数怎么会是short类型的,
直接用程序原来u8类型的来发送就好

调用方式:
写入
short a[3]={-10,-20,-30};
SPI_NRF_WriteBuf(u8 reg ,(u8*)a,6)
读取的时候
u8 temp[10];
short * p = temp;
SPI_NRF_ReadBuf(u8 reg,(u8*)p,6)

printf("读取到的数据%d",*p++);
printf("读取到的数据%d",*p++);
printf("读取到的数据%d",*p++);

大概就是这样写,细节可能有bug,自己调下

注意NRF收发函数要用原来 u8类型的:

/**
  * @brief   用于向NRF的寄存器中写入一串数据
  * @param   
  *                @arg reg : NRF的命令+寄存器地址
  *                @arg pBuf:用于存储将被读出的寄存器数据的数组,外部定义
  *         @arg bytes: pBuf的数据长度
  * @retval  NRF的status寄存器的状态
  */
u8 SPI_NRF_ReadBuf(u8 reg,u8 *pBuf,u8 bytes)
{
         u8 status, byte_cnt;

          NRF_CE_LOW();
        /*置低CSN,使能SPI传输*/
        NRF_CSN_LOW();
               
        /*发送寄存器号*/               
        status = SPI_NRF_RW(reg);

         /*读取缓冲区数据*/
         for(byte_cnt=0;byte_cnt<bytes;byte_cnt++)                  
           pBuf[byte_cnt] = SPI_NRF_RW(NOP); //从NRF24L01读取数据  

         /*CSN拉高,完成*/
        NRF_CSN_HIGH();        
               
         return status;                //返回寄存器状态值
}

/**
  * @brief   用于向NRF的寄存器中写入一串数据
  * @param   
  *                @arg reg : NRF的命令+寄存器地址
  *                @arg pBuf:存储了将要写入写寄存器数据的数组,外部定义
  *         @arg bytes: pBuf的数据长度
  * @retval  NRF的status寄存器的状态
  */
u8 SPI_NRF_WriteBuf(u8 reg ,u8 *pBuf,u8 bytes)
{
         u8 status,byte_cnt;
         NRF_CE_LOW();
            /*置低CSN,使能SPI传输*/
         NRF_CSN_LOW();                        

         /*发送寄存器号*/        
           status = SPI_NRF_RW(reg);
         
            /*向缓冲区写入数据*/
         for(byte_cnt=0;byte_cnt<bytes;byte_cnt++)
                SPI_NRF_RW(*pBuf++);        //写数据到缓冲区         
                     
        /*CSN拉高,完成*/
        NRF_CSN_HIGH();                        
  
          return (status);        //返回NRF24L01的状态                 
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-11 09:37:00 | 显示全部楼层
flyleaf 发表于 2017-8-11 09:08
你这函数参数怎么会是short类型的,
直接用程序原来u8类型的来发送就好

我是想用2.4G无线通信来传输MPU6050的数据,MPU6050的数据类型是short类型的,NRF收发函数是一定要用原来 u8类型的吗?
回复 支持 反对

使用道具 举报

发表于 2017-8-11 09:38:24 | 显示全部楼层
小米 发表于 2017-8-11 09:37
我是想用2.4G无线通信来传输MPU6050的数据,MPU6050的数据类型是short类型的,NRF收发函数是一定要用原来 ...

用我上面的方案就是这样,不用改收发函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-11 09:51:03 | 显示全部楼层
flyleaf 发表于 2017-8-11 09:38
用我上面的方案就是这样,不用改收发函数

u8 temp[10];
short * p = temp;  这句话非法了呀, err:#144
回复 支持 反对

使用道具 举报

发表于 2017-8-11 09:58:45 | 显示全部楼层
小米 发表于 2017-8-11 09:51
u8 temp[10];
short * p = temp;  这句话非法了呀, err:#144

short * p = (short *)temp;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-11 10:08:18 | 显示全部楼层
flyleaf 发表于 2017-8-11 09:58
short * p = (short *)temp;

还是不行,读到的数据都是257,u8是无符号定义吧,不能表示负数吧?
回复 支持 反对

使用道具 举报

发表于 2017-8-11 10:14:06 | 显示全部楼层
小米 发表于 2017-8-11 10:08
还是不行,读到的数据都是257,u8是无符号定义吧,不能表示负数吧?

发送数据的时候用无符号、有符号、short都是没区别的,处理不同的数据就是使用不同的指针来读即可,
版主就是这个思路给你,同样的数据你尝试用 shrot * 指针读和u8*指针读就是不同,你可以看看FLASH存储浮点数据类型的例程,本质都是一样的
回复 支持 反对

使用道具 举报

发表于 2017-8-11 10:28:53 | 显示全部楼层
小米 发表于 2017-8-11 10:08
还是不行,读到的数据都是257,u8是无符号定义吧,不能表示负数吧?

读取部分改成这样试试
u8 temp[10];
short * p = (short *)temp;
SPI_NRF_ReadBuf(u8 reg,temp,6)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-14 08:52:30 | 显示全部楼层
flyleaf 发表于 2017-8-11 10:28
读取部分改成这样试试
u8 temp[10];
short * p = (short *)temp;

搞定了,就把读取函数改成NRF_Rx_Dat((u8*)Accel),就好了,原来这么简单,不过有点疑问,我改成这样到底是按照u8的类型读取还是short的类型读取,Accel是short类型的
回复 支持 反对

使用道具 举报

发表于 2017-8-14 09:01:27 | 显示全部楼层
小米 发表于 2017-8-14 08:52
搞定了,就把读取函数改成NRF_Rx_Dat((u8*)Accel),就好了,原来这么简单,不过有点疑问,我改成这样到 ...

存储的时候用u8 一个个存储进去,读取解释的时候是short,按2个字节解释
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 02:03 , Processed in 0.037282 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表