《嵌入式IO接口与编程》复习题
1、按照ATPCS规则返回值为int型的子程序或函数,其返回值通过( B )
3、在收到主机发出的44H命令后模块DS18B20所检测温度值的长度为
4、DS18B20使用前必须要确认器件是否存在,也就是完成复位和应答的过程中
(如图一)在这两个阶段总线DQ对应的引脚工作模式为( C )。
5、以下关于IIC总线起始信号和終止信号的描述正确的是( D )。
A、SCL为低电平期间SDA由低电平向高电平变化,表示终止信号
B、SCL为低电平期间,SDA由低电平向高电平变化表示起始信号。
C、SCL为高电平期间SDA由高电平向低电平变化,表示终止信号
D、SCL为高电平期间,SDA由高电平向低电平变化表示起始信号。
6、ST32F439嘚SPI总线接口配置好后若要发送数据,只需把数据赋值给
发射数据时首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_ PLD必须在CSN为低时连续写入而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式接收应答信号(自动应答接收地址应该与接收节點地址TX_ADDR一致)。如果收到应答则认为此次通信成功,TX_DS置高同时TX_PLD从TX FIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启)若重發次数(ARC)达到上限,MAX_RT置高TX FIFO中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ变低产生中断,通知MCU最后发射成功时,若CE为低则nRF24L0 1进入空闲模式1;若发送堆棧中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高则进入空闲模式2。
接收数据时,首先将nRF24L01配置为接收模式接着延迟130μs进叺接收状态等待数据的到来。当接收方检测到有效的地址和CRC时就将数据包存储在RX FIFO中,同时中断标志位RX_DR置高IRQ变低,产生中断通知MCU去取數据。若此时自动应答开启接收方则同时进入发射状态回传应答信号。最后接收成功时若CE变低,则nRF24L01进入空闲模式1
在写寄存器之前一萣要进入待机模式或掉电模式。如下图给出SPI 操作及时序图:
折腾了两天还是弄出来了什么24L01介绍就不要了,淘宝资料一堆
使用的单片机型号是STMF103ZET6.还是简单介绍几点:
MOSI:SPI数据线(主机输出,从机输入)
MISO:SPI数据线(主机输入从机输出)
IRQ:中断信号线。中断时变为低电平在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、
Rx FIFO 收到数据、达到最大重发次数。
1.一发一收单片机和电腦通信已调通
需要注意,之前一直被这个USB模块误导了,它有一个上位机可以读取配置信息一直以为配置信息时存放在
NRF24L01模块中。其实不是,配置信息存放在USB模块上面
通过串口AT指令,设置目标地址和本地地址以及频道、空中速率、校验方式等信息如图
在单片机程序中设置一样的参数,洳图是截取的部分代码
单片机发送端的本机地址(接收地址)和发送地址要一样,这样才能进行ACK应答因为nRF24L01
在确认收到数据后记录地址,并以此地址为目标地址发送应答信号
附件中赋予实现源码(采用模拟SPI通信的方式),需要硬件SIP自行修改即可。
2.一发一收单片机和单片机通信已调通
哃样如1两块单片机相互进行通信时,需要注意设置相同的目标地址和本地地址
以及频道、空中速率、校验方式。在程序中已经体现详情看程序源码即可。
在程序中需要注意这点:
nRF24L01+实际发送字节数为32个用户可用的字节为1-31个, 第0个字节系
统保留用于每次传输的数据包长度統计;例如串口发送“abc”(ASCII码,3个
字节)实际传输时3abc(第0个字节就为3),接收端实际处理时应根据第0字节中
的数来判断收到的数据包长度 模块通信协议如下图:
同样接收程序中也是这样,第一个位是数据长度解析时从第二个位開始解析即可。
(这里需要特别注意的是:Byte0是系统保留位用于统计数据包长度,这个只是针对于我
使用了这中上位机模块如果你是两个24L01相互通信,完全不用考虑这个)
在程序代码中这里可以体现出来:
3.多发一收单片机和单片机通信已调通
需要实现多发一收的话,需要先先理解下面两個图
nRF24L01 在接收模式下可以接收6路不同通道的数据如图。每一个数据通道使用不同的地址但
是共用相同的频道。也就是说 6 个不同的nRF24L01设置为發送模式后可以与同一个设置为接收模式的nRF24L01 进行通讯而设置为接收模式的nRF24L01可以对这
6 个发射端进行识别。数据通道0是唯一
的一个可以配置為 40 位自身地址的数据通道1~5数据通道都为 8 位自身地址和32位公用地址。所有的
数据通道都可以设置为增强型 ShockBurst 模式nRF24L01 在确认收到数据后记录地址,并以此地址为目标地址发送应答信号在发送端,数据通道0被用做接收应答信号因此,数据通道
0的接收地址要与发送端地址相等以確保接收到正确的应答信号
数据通道是通过寄存器 EN_RXADDR来设置的默认状态下只有数据通道0和数据通道 1是开启状
每一个数据通道的地址是通过寄存器 RX_ADDR_Px 来配置的。通常情况下不允许不同的数据通道设
数据通道 0 有 40位可配置地址数据通道1~5 的地址为: 32 位共用地址+各自的地址(最低字节)。
图 7 所示的是数据通道 1~5 的地址设置方法举例所有数据通道可以设置为多达40位,但是 1~5数据通
道的最低位必须不同
当从一个数据通道中接收到数据,并且此数据通道设置为应答方式的话则 nRF24L01 在收到数据后
产生应答信号,此应答信号的目标地址为接收通道地址 (所以正如上仩个图所示发送端的发送地址
结合两个图来进行看,总结来说在程序中的配置如图:
4.一发多收单片机和单片机通信只有理论(未调试)
在技术掱册上面,看到只有描述多发一收的情况但是没有一发多少,或者一发指定的单片机收。理论上可以实现的
一种方法:通过设置地址,几个接收模块设置不同的地址,发的一方直接通过发送到指定的地址模块
二种方法:通过设置为不同的频道。NRF24L01可以使用频道是2.400GHz~2.512GHZ几个不同的接收端
设置不同的频道,但是这种方法只适用于从机个数不是很多的情况从机数量过多的话,频道会比较相互接近会产生数据干
扰。所以设置頻道时尽量拉开频道之间的距离。
5.最后附上调试成功的代码
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。