Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解nRF24L01无线收发模块设计(附完整源码)

详解nRF24L01无线收发模块设计(附完整源码)

作者头像
飞哥
发布于 2020-07-10 02:18:57
发布于 2020-07-10 02:18:57
10.1K0
举报

*******************************************

近日有粉丝朋友留言,希望介绍一下nRF24L01这款无线收发芯片,正巧前不久的电赛有些涉及,因此将自己的一些经验写在这里,希望能有所收获。

*******************************************

前面我们介绍过单片机的几种通信协议,并且初步了解如何操作寄存器进而控制芯片的工作等等。那么,今天我们将利用之前的知识来对无线收发模块编写驱动程序。

首先,介绍我们今天用到的无线收发模块——NRF24L01芯片

nRF24L01简介:nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设置可以通过SPI 接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。

管脚图:

各个管脚的具体功能可自行参考数据手册,由于高频信号对线路设计要求十分严格,我们没有必要去手焊电路,直接采用现成模块即可。

接线图:

从它的接线图也很容易可以看出它是利用SPI与单片机进行通信的,而且有5根线需要与单片机I/O口连接。

以上为硬件部分连接,接下来具体讲一讲软件设计

我们拿到一块芯片,肯定要先看它的数据手册,了解它是如何工作的,然后还得重点了解一下这块芯片到底有哪些寄存器,这些寄存器的地址是什么,控制字是什么,时序图怎么样。所以我们从寄存器开始入手。

nRF24L01有多达25个寄存器,其中大部分是8位的,有两个数据缓冲器是32字节的,还有3个是40位的(发送地址和通道0、通道1接收地址),我们选择其中几个寄存器来进行说明。

名称:CONFIG 地址:00H

作用:可以用来决定是否屏蔽发送完成中断、接收完成中断、最大重发次数中断,还有芯片是上电还是掉电,工作在发射模式还是接收模式等。

名称:EN_AA 地址:01H

作用:用来使能各个通道的应答

名称:RX_ADDR 地址:02H

作用:接收地址允许位

名称:SETUP_AW 地址:03H

作用:用来设置地址宽度(3、4、5字节)

名称:SETUP_RETR 地址:04H

作用:建立自动重发,高四位决定自动重发的延时,低四位决定重发次数

名称:STATUS 地址:07H

作用:这是一个状态寄存器,从名字可以看出这个寄存器是描述状态的。高4位可读可写,最高位保留,其中bit6~bit4分别可以产生接收数据中断、发送数据中断、最大重发次数中断。bit3~bit1可以判断是哪个通道获得数据,只能读不能写,最低位保留。

名称:RX_ADDR_P0 地址:0AH

作用:它是数据通道0的接收地址,最多5个字节,从低字节开始,字节数量由前面的SETUP_AW决定,还有10H的发送地址,需要与这个地址一致

还有一些其他的寄存器就不多说了。这些寄存器大部分是比较重要的,我们在写芯片的初始化程序的时候,就是对这些寄存器进行配置。(注意:我们在写芯片的驱动程序,基本上是从芯片的初始化开始的,而芯片要初始化,当然要搞清楚它的各个寄存器地址、作用,才能进行配置)

上面提到的自动重发可能会不理解,原来一个发送过程并不只是发送机独自一个人的事情。一开始, 发送机发送连同身份地址在内的数据包给接收机,接收机收到数据并确认正确后,就以刚才发送机发来的身份地址回发一个确认信号,而此时发送机会自动切换到接收状态,当收到确认信号与通道0的地址进行比较,地址相吻合,就知道对方收到数据,这样一次发送数据才算完毕。当然,这个过程是模块内部自动完成的,不用人为干预。因此这就叫做增强模式。在这个过程中发送双方都最少各有一次发送和接收的过程。这样就保证了数据可靠收到。如果发送一次,接收机没有收到,模块具有允许重发,和重发次数设置寄存器,当你设置了允许重发,并设置好重发次数。在发送机发送完-一个数据包,等待会儿, 如果没有接收到应答信号, 发送机就会重发一次,如此直到重发完你设定的次数,再收不到它就产生一个中断信号给IRQ,告诉模块没有发送成功,由程序根据情况再决定是否重发。

除了寄存器之外,还有芯片的一些命令格式也要注意

那么要如何来理解上面这张表呢?我们可以看一下。指令R_REGISTER和指令W_REGISTER的前三位可以确定是读还是写,如果是000就是读,如果是001就是写,后面的5位是寄存器的地址。合起来就构成了一个8位字节,就可以确定对哪个寄存器进行读或写了。我们可以将R_REGISTER宏定义为0x00,如果某个寄存器A的地址为0x12,那么指令(R_REGISTER+A)不就是对寄存器A进行读的操作吗?那有人可能会问,万一寄存器地址很大,他们加起来不就会让高三位超过000和001吗?在这里是不可能的,后面的5位地址可以有32个寄存器,而这块芯片没有这么多寄存器,因此不会超过。前两个指令也就很好理解了。

后面的几个指令都是专用指令,只要发送相应的代码,就会执行右边说明的操作,比如发送指令W_RX_PAYLOAD,那么就是往TX FIFO寄存器里写数据。也很好理解。

指令和寄存器都介绍完了,因此,我们可以先建一个头文件,把各个寄存器的地址和指令先用宏定义好。(部分截图如下)

这些寄存器的名称、作用和地址都是从数据手册上可以直接获取的,我们以宏的形式将它们封装好。

然后是它的时序图

上图就是NRF24L01模块与单片机建立通讯的时序图。看懂它,是用单片机控制这个模块,与它建立通讯的基础条件。很多串行通讯设备都采用这种方式,也叫SPI.它一般有四根连线:第一根是片选信号线,单片机可以同时连接多个功能相同或不同的模块,为了节省输入输出(I/0)信号线的资源,一般都将多个模块连接在相同的SCK、MOSI、 MIS0线 上,这叫串行总线。那单片机发出指令后,模块怎么知道指令是发给自己的而不是发给其它模块的呢?这就靠每个模块上和单片机专线连接的CSN片选信号线,平时CSN是 高电位的,当把这根线的电位拉低那一时刻,模块就知道单片机要给自己发指令了。

从时序图上我们可以看出,读操作的时候,主机先发送指令位,同时接收从机的状态寄存器数据,然后再接收从机发送的数据。写操作时,一样是主机先发送指令位,同时接收从机的状态寄存器数据,然后再发送你要的数据。

而且,根据经验,在利用SPI通信时,我们至少要写这两部分的程序,一个是发送/接收一个字节,这一部分的写法是固定的,完全可以照抄。另一个是根据时序,对芯片的读写操作。

但是在这里,稍稍有点不同的是,因为有两个寄存器是32个字节的,还有3个是5个字节的,其他的都是8位的寄存器,因此,这些寄存器的读写程序要单独写。根据以上分析,我们可以写出如下4个程序。

uint SPI_RW(uint dat) //利用SPI单独写一个字节,并返回状态值

/*这是最基本的一个函数,几乎所有函数都要调用这个函数,它就是将一个8位字节从高位开始 ,一位一位的放到数据总线上,由于左移位后会补0,因此低位也可以顺便接收来自MISO总线上的数据,作为返回值。*/

当然,执行一次这个函数并不算是一次通信,一次通信至少要发送两个字节,地址和指令,于是有了下面的函数。

uchar NRF24L01_Read(uchar reg) //读出一个寄存器的数据,发送寄存器地址(包括读写位+地址)用以选择寄存器,然后执行空操作NOP,目的是读出数据。(空操作是一种指令格式,上面有提到)

uint NRF24L01_write_Reg(uchar reg, ucharvalue) //往一个寄存器里写一个字节,并且返回寄存器状态值

uint SPI_Read_Buf(uchar reg, uchar *pBuf,uchar uchars)

/*读出缓冲寄存器里的数据,最多32个字节,这个与上面的读其实是类似的,只不过这个加了个for循环,目的是读出多个字节*/

uint SPI_Write_Buf(uchar reg, uchar *pBuf,uchar uchars)

/*往缓冲寄存器里写数据,至多32个字节*/

以上几个程序的编程思路是比较经典的编程思路,从发送字节开始,到芯片发送寄存器地址和命令。(源码将在文末附上)

写完这几个函数,也就完成了工作的一半了。然后我们还要编写一个发射成功的判断函数和一个接收成功的判断函数,可以通过这个函数的返回值来判断是否接收或者发送成功。

在main函数的第一句,我们还可以编写一个函数,用来检测24L01是否存在。当然,不写这个也可以。

前面部分的编程都只能算是准备阶段,从芯片的初始化开始才能算是真正的编程。

所以,接下来,我们得利用前面写好的这些函数,来对芯片进行初始化。

初始化主要有以下几个方面

(1)设置接收数据长度

(2)写TX节点地址

(3)设置RX节点地址,主要为了使能ACK

(4)使能通道0的自动应答(多通道暂不考虑)

(5)使能通道0的接收地址

(6)设置自动重发间隔时间和最大自动重发次数

(7)设置RF通道为0 收发必须一致,0为2.4GHz

(8)设置TX发射参数,0db增益,1Mbps,低噪声增益开启

(9)配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断

这些可以参考数据手册的寄存器部分。

到这里,我们就可以在main函数里开始调用前面编写的程序了。

进入main函数,首先是调用初始化程序,然后就可以读取缓冲寄存器里的值或者是写入数据。main函数部分根据用户需要编写。比如发射机可以用按键按下来发送数据,接收机则通过查看IRQ管脚来判断是否接收到数据,接收到数据后再执行你要的程序,比如控制小灯亮等等。

最后,我们来理一下编程思路

①首先,我们先明确了它是利用SPI的通信方式来对芯片控制的。不管是什么通信,无非就是读和写操作而已。读和写无非就是发送地址+命令。通常有一位是读写方向位的,这个查看手册就可以知道。因此,肯定要先编写一个“发送函数”,把字节发送出去,其实也就是单片机通过MOMI输出高低电平而已。然后,前面也提到过,发送一个字节是没有意义的,一次通信至少要包含两个字节,第一个字节包含了读写的方向位以及待操作寄存器的地址,第二个字节是具体的命令。我们将发送这两个字节的语句,结合时序“打包”在一起,就是对芯片寄存器的读写函数了。写可以理解成先发送地址(同时返回状态值),再发送命令。读可以理解成先发送地址,再执行空语句(执行空语句的目的是为了读出寄存器值)。

②上一步是实现了对寄存器读写一个字节,但是我们知道有的寄存器不止一个字节,比如发送地址和接收地址都有5个字节,发射接收缓冲器有32个字节等。因此我们可以编写一个函数,连续读出或者写入多个字节,实现也很简单,就是定义一个数组,读的话就把数据读出放入到这个数组中,写的话就是把你数组里的内容写进去。

③以上两步是如何实现读和写。这还不够,我们还得搞清楚具体读写什么内容。这就得回到它的各个寄存器上去了。我们要根据手册的说明,看各个寄存器有什么用,这在前面已经讲过了。主要是在初始化程序中比较重要。

④光有读和写不够,我们还得知道每一次通信是否成功。因此,还得编写两个函数。比如接收,我们要先读出状态寄存器STATUS的值,来判断是否接收成功,接收成功是会产生接收中断的,我们看相应的位就能知道有没有接收成功了。如果接收成功,我们把数据转移到我们自己定义的一个数组中,方便使用。如果是发送,我们只要把要发送的数据放在数组里,然后发送出去即可,然后还要读取状态寄存器的值,看是否发送成功,或者是否达到最大重发次数,返回相应的值。

⑤有了上面的这些基础,我们就可以在main函数里先进行初始化,然后写我们的发射程序和接收程序了。在发射函数里,每次先配置一下寄存器CONFIG,然后再利用我们前面的程序发射。接收比较简单,只要看IRQ是否产生中断即可。

以上就是整个编程思路。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子技术研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
51单片机对无线模块nRF24L01简单的控制收发程序
这段代码主要先看全局变量,通过对IO口的赋值(如按键、led、无线模块的端口CE/IRQ等)可以知道电路图的绘制。
啊源股
2019/09/11
2.6K0
(38)STM32——NRF24L01无线通信
        在Enhanced ShockBurstTM收发模式下,NRF24L01 自动处理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,在发送模式下,置CE为高,至少10us, 将使能发送过程。
小点点
2022/12/12
1.6K0
(38)STM32——NRF24L01无线通信
NRF24L01多通道通讯
nRF24L01 是一款工作在 2.4~2.5GHz 世界通用 ISM 频段的单片无线收发器芯片。 NRF24L01 单通道实现通讯很简单,只要收发方地址设置正确,就能正常通讯。 但是 NRF24L01 多通道通信,有很多误区。官网的数据手册描述的也是模糊不清,经过我 不断的调试和收集资料,有了点小成果。 一: NRF24L01 支持多通道收发 对于这个多通道有很多理解,(特别和啊海的理解冲突), 现在实验证明: NRF24L01 只有通道 0 可以发射数据和接收,通道 12345 只能接收数据。 而且通道 2345 的高字节 bit39~8 和地址 1 共用。设置为发送模式时不需要选择通道,因为 硬件默认设置发送模式下为通道 0 发送。 正常通讯的结构是 6 个发射机发数据给 1 个接收机接收。 二: RX --TX 地址设置 一个芯片最多可以设置 6 个接收地址。 所以多对一发送比较简单。 但是想要一对多发送的话 就只能一个一个发送了。 nRF24L01 配置为接收模式时可以接收 6 路不同地址,相同频率 的数据 每个数据通道拥有自己的地址, 并且可以通过寄存器来进行分别配置-。 每一个数据 通道的地址是通过寄存器 RX_ADDR_Px 来配置的,正常通讯情况下不允许不同的数据通 道设置完全相同的地址。 u8 TX_ADDRESS0[TX_ADR_WIDTH]={0x00,0xc2,0xc2,0xc2,0xc2}; //发送地址(地址要和接收通道地址一致) u8 RX_ADDRESS0[RX_ADR_WIDTH]={0x00,0xc2,0xc2,0xc2,0xc2}; //接收0 通道地址(地址要和发射地址一致) u8 RX_ADDRESS1[RX_ADR_WIDTH]={0x01,0xc2,0xc2,0xc2,0xc2};//接收1 通道地址 u8 RX_ADDRESS2[RX_ADR_WIDTH]={0x02,0xc2,0xc2,0xc2,0xc2,};//接收2 通道地址 u8 RX_ADDRESS3[RX_ADR_WIDTH]={0x03,0xc2,0xc2,0xc2,0xc2,};//接收3 通道地址 u8 RX_ADDRESS4[RX_ADR_WIDTH]={0x04,0xc2,0xc2,0xc2,0xc2,};//接收4 通道地址 u8 RX_ADDRESS5[RX_ADR_WIDTH]={0x05,0xc2,0xc2,0xc2,0xc2}; //接收5 通道地址 上面地址标记为蓝色的可以可以随便修改, 其他的被固化了, 不能修改, 写地址时是低位先 写 要想成功通讯的条件: 1 接收地址和发射地址必须一致 2 无线模块 0x05 寄存器的值必须一致(发射/接收这2 模块) 3 无线模块从 0x00 寄存器往后的(各个 bit 位的功能)去看下手册 三:多个 NRF24L01 组网 正常情况下, NRF24L01 只能一对 6 进行通信, 如果超过 6 个模块进行通信就无法实现。 但是可以通过轮询来区分: 比如一个空间内要实现 100 个温度实时监测,就可以主机用轮询的方式来进行通信, 从机地址都可以设置一样, 通过主机给从机发命令, 让指定从机发送数据回来。 在同一 时间内只能是一个从机和主机进行通信,因为多个节点同时发数据有问题,会造成 24L01 芯片死机(我调试时碰到过)。 在用 STM32F103ZET6 板子调试时,发现 24L01 的几个问题: 1. 作为发送时,和容易出现发送-----但是不判断返回值强行发送却 能发送成功。 2、无论发送与接收,数据传输速率很低,实时性很差,反应很迟钝。 3、无论发送与接收,稳定性很差,模块时而检测到时而检测不到;时而接受到数据 ,时而 接收不到数据----不清楚是代码问题还是硬件问题,个人觉得是硬件问题。
DS小龙哥
2022/01/07
7880
关于G-MAXTEX GS881的接收机
比较nrf24l01的数据手册和BK2423数据手册很多内容(包括寄存器库)完全相同,不同的大概是nrf24l01的datasheet更详细。所以,以下内容通用。都是使用的SPI接口 datasheet里的“channel”:信道,信息的通道。当然,实际上芯片是向四面八方发射电磁波的。
云深无际
2022/02/09
1.3K0
关于G-MAXTEX GS881的接收机
无线键鼠的监听、劫持与防护
键盘连接到计算机有多种方式,有线键盘鼠标在生活中最常见,适用范围也很广泛,但有线连接不仅对操作距离有限制,而且给携带造成了不便。不仅如此,繁杂的线缆还很容易把桌面弄得凌乱不堪。无线键鼠非常好地解决了上述问题。无线键鼠又分为蓝牙类型和2.4GHz 类型,文中所指的无线鼠标一般指2.4GHz 类型。值得注意的是,虽然蓝牙键鼠的工作频段也是2.4GHz 频段,使用的却是蓝牙通信协议,符合蓝牙标准。而2.4GHz 类型的键鼠主要指利用专属无线协议开发的无线产品。2.4GHz 类型的无线键鼠,一般在计算机的USB 接口处插上一个适配器,鼠标和键盘通过电池供电。
博文视点Broadview
2020/06/11
1.9K0
被低估的NRF240L1模块,伪双工下的双向通信?
对很多单片机初学者或者爱好者来说,NRF24L01这个模块应该是比较熟悉了。如果你看过我的51视频就知道,我还在里面粗略的讲过,分享了两个简单的收发程序。
MCU起航
2021/09/24
1.4K0
多协议模块-Bayang协议(NRF24L01芯片)
这个东西,是个芯片,在飞控里面 https://datasheet.lcsc.com/szlcsc/XN297L_C88025.pdf
云深无际
2021/11/15
1.9K0
多协议模块-Bayang协议(NRF24L01芯片)
基于nRF24L01的一对多节点通信(一收多发)
Jack_Cui
2017/12/28
1.5K0
自制SBUS接收端代码分析.上
看这篇文章前先看下面这篇 自制S-Bus接收器(控制dji EP车) 我们继续看这个,这个是发射端的数结构包 使用这段代码发送出去 接收端的代码,多了一个舵机的库 int ch_width_1 = 0, ch_width_2 = 0, ch_width_3 = 0, ch_width_4 = 0, ch_width_5 = 0, ch_width_6 = 0; 这里使用int的类型,声明几个通道 Servo ch1; Servo ch2; Servo ch3; Servo ch4; Ser
云深无际
2021/09/14
9290
自制SBUS接收端代码分析.上
BH1750光照传感器超详细攻略(从原理到代码讲解,看完你就懂了)
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说BH1750光照传感器超详细攻略(从原理到代码讲解,看完你就懂了),希望能够帮助大家进步!!!
Java架构师必看
2022/08/09
2K0
BH1750光照传感器超详细攻略(从原理到代码讲解,看完你就懂了)
spi总线协议及spi时序图详解_奔创spi
上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法。
全栈程序员站长
2022/11/07
5.2K0
STM32学习笔记(超详细整理145个问题)
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备;
全栈程序员站长
2022/08/18
1.5K0
STM32学习笔记(超详细整理145个问题)
『51单片机』串口通信
🚩write in front🚩   🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ创作者~周榜137﹣总榜1040⇿全网访问量30w+🏅 🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知⚠  📝个人主页-謓泽的博客_CSDN博客 📃 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏-【51单片机】系列_謓泽的博客-CSD
謓泽
2022/12/12
1.8K0
『51单片机』串口通信
单片机通信之SPI通信
之前已经给大家介绍过了单片机的UART通信和IIC通信,大家可以点击“利用IIC协议实现单片机对EEPROM的读和写操作”、“单片机通信之串口通信”进行回顾。那么在这里讲解另一个单片机常用到的通信方式——SPI通信。在这里以ds1302芯片为例,实现单片机对ds1302的读写操作。
飞哥
2020/07/10
1.2K0
单片机通信之SPI通信
4.3 51单片机-串口通信
对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”;没有通信,单片机所实现的功能仅仅局限于单片机本身,就无法通过其它设备获得有用信息,也无法将自己产生的信息告诉其它设备。如果单片机通信没处理好的话,它和外围器件的合作程度就受到限制,最终整个系统也无法完成强大的功能,由此可见单片机通信技术的重要性。
DS小龙哥
2022/01/12
1.3K0
4.3 51单片机-串口通信
STM32入门开发: 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)
SPI总线: STM32本身支持SPI硬件时序,本文示例代码里同时采用模拟时序和硬件时序两种方式读写W25Q64。
DS小龙哥
2022/01/12
4.4K0
STM32入门开发: 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)
mcu单片机开发_AVR单片机
MCU是Microcontroller Unit的简称,中文叫微控制器,俗称单片机,是把CPU的频次与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,构成芯片级的计算机,为不同的应用场合做不同组合控制,诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。
全栈程序员站长
2022/11/10
9710
mcu单片机开发_AVR单片机
基于红外传输的多点温度采集系统
今天分享的是基于红外通信的多点温度采集系统。先简单说一下要实现的功能:使用三个温度传感器采集三路温度信号,然后将采集的信号通过红外的方式发射出去,主机接收红外信号并解码,将温度信息在上位机上面显示出来。
飞哥
2020/07/10
1.1K0
基于红外传输的多点温度采集系统
设计分享|基于单片机LCD数字测速仪的设计
51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。
电子工程师成长日记
2022/07/27
4570
设计分享|基于单片机LCD数字测速仪的设计
关于串口数据的发送和接收(调试必备)
对于串口的数据发送和接收,大多是都是利用串口中断来进行的,但是这样对于编程方面有一定要求,并且程序也不太好写,比如说,如果让你随意接收一段数据,然后利用串口将它发送出来,第一个需要考虑的问题就是接收数据的长度,怎么才知道一段数据是否结束?或者说如果串口助手上面没有可以在数据末尾加上结束标志的时候,你如何知道数据的结束?,这必然牵涉到一定的编程技巧。但是,之前在接触C语言的时候,我们就利用过printf和Scanf,那么我们能否利用它们?如果能够利用的话,那么就很方便了。
全栈程序员站长
2022/09/14
5.9K0
关于串口数据的发送和接收(调试必备)
相关推荐
51单片机对无线模块nRF24L01简单的控制收发程序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档