查看: 3124|回复: 1

STM32F107VC金龙开发板 第十七章 金龙107——NRF24L01实验

[复制链接]

该用户从未签到

发表于 2015-4-22 11:15:30 | 显示全部楼层 |阅读模式
分享到:
第十七章 金龙107——NRF24L01实验
17.1NRF24L01简介:
nRF24L01是一款新型单片射频收发器件无线模块,工作全球免申请2.4 GHz2.5 GHz ISM频段,最大发射功率0dBm1mW。内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01功耗低,在以-6dBm的功率发射时,工作电流也只有9 mA;接收时,工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。
主要特性:
1)支持六路通道的数据接收
2)低工作电压:1.9-3.6V低电压工作
3)高速率:2Mbps(软件设置1Mbps2Mbps
4)多点频:125频点,满足多点通信和调频通信需要(2400+RF_CH
5)nRF24L01集成了所有与RF协议相关的高速信号处理部分
6)SPI接口可以方便和单片机进行通信
图片5.png
如上图,nRF24L01与单片机的接口,具体功能如下表描述
引脚
名称
描述
[size=10.5000pt]1
GND
[size=10.5000pt]地
[size=10.5000pt]2
VCC
电源
[size=10.5000pt]3
CE
发送接收使能
[size=10.5000pt]4
CSN
片选(低电平使能)
[size=10.5000pt]5
SCK
SPI时钟
[size=10.5000pt]6
MOSI
SPI从机接收
[size=10.5000pt]7
MISO
SPI从机发送
[size=10.5000pt]8
IRQ
可屏蔽中断引脚(低电平使能)
17.2、工作模式:
nRF24L01有四种工作模式:
收发模式
配置模式
空闲模式
关机模式
图片4.png
数据发射:发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLDTX FIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TX FIFO中数据保留以便再次重发;MAX_RTTX_DS置高时,使IRQ变低,产生中断,通知MCU。最后发射成功时,若CE为低则nRF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2
数据接收:接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在RX FIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1
17.3nRF24L01读写时序:
stm32通过SPI接口对nRF24L01进行配置,具体指令及寄存器请参考手册,其指令格式如下
命令字:由高位到低位(每字节)
数据字节:低字节到高字节,每一字节高位在前
任何一条新指令均由CSN 的由高到低的转换开始,下图为SPI操作及时序。 在写寄存器之前一定要进入待机模式或掉电模式。
图片3.png
读操作
图片2.png
写操作
17.4、程序说明:
本次实验使用两块金龙107开发板(带nRF24L01无线模块)进行通信,板A为主动发射端,板B为接收板。
A:初始化完成后,进入主循环通过无线模块发送数据“abcd”。
B:初始化完成后进入循环等待接收,接收到数据后通过串口打印数据。
如下图是stm32nRF24L01的接口描述,其中PB3PB4PB5分别为SPI3SCKMISOMOSI引脚,PD3CEPA8CSNPB15接可屏蔽中断引脚,实验中需要将跳线帽JP1323
图片1.png
17.5 程序说明:
stm32nRF24L01的配置及读写代码如下:
void Init_24L01(void)
{
        uchar Channel=0x20;
        uchar Status;
        uchar CONFIG_data;       
        NRF24L01_Configuration();                //IO口初始化
        SPI_RW_Reg(WRITE_REGL + CONFIG,0x19);//屏蔽中断使能CRC接收模式
        CONFIG_data = SPI_Read(CONFIG);                       
        printf("The CONFIG_data is 0x%x",CONFIG_data);       
        SPI_RW_Reg(WRITE_REGL + EN_AA,0x00);                //禁止自动应答       
        SPI_RW_Reg(WRITE_REGL + EN_RXADDR,0x01);//允许接收通道0       
        SPI_RW_Reg(WRITE_REGL + SETUP_AW,0x03);        //接收发射地址5字节
        SPI_RW_Reg(WRITE_REGL + SETUP_RETR,0x00);//禁止自动重发       
        SPI_RW_Reg(WRITE_REGL + RF_CH,Channel);//设置工作通道频率       
        SPI_RW_Reg(WRITE_REGL + RF_SETUP,0x07);//传输速率1Mbps0dBm
        Status = SPI_Read(RF_SETUP);
        printf("The STATUS is 0x%x",Status);       
        SPI_RW_Reg(WRITE_REGL + STATUS,0x70);        //清空标志位
        Status = SPI_Read(STATUS);
        printf("The STATUS is 0x%x",Status);       
        SPI_Write_Buf(WRITE_REGL + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);        //接收通道0地址       
        SPI_Write_Buf(WRITE_REGL + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    //发送地址       
        SPI_RW_Reg(WRITE_REGL + RX_PW_P0,0x04);//接收数据通道0有效数据宽度4字节       
        CSN=0;
        SPI_RW(0xE2);        //清除RX FIFO寄存器
        CSN=1;       
        CSN=0;
        SPI_RW(0xE1);        //清除TX FIFO寄存器
        CSN=1;}
17.6. 实验现象:
插上串口和nRF24L01,下载程序后,重新上电,打开串口调试助手(波特率115200),板A从串口打印出来“NRF24L01 Test!”,板B从串口打印出来“Receive data is:abcd”。


【17】金龙板NRF24L01.rar (882.44 KB, 下载次数: 7)
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2015-4-23 14:21:59 | 显示全部楼层
第十八章 金龙107——收音机
18.1TEA5767简介:
TEA5767是飞利浦公司生产的一款收音机芯片,很多手机,MP3MP4里的收音机功能都是于他实现的,接收频率76MHz~108MHz(日本/美国/欧洲频段选择),中频频率225kHz,采用锁相环调谐系统,带有AGC电路,并可以使用软件进行静音和消除噪音。主要电性能指标:工作电压2.5V~5.0V,工作电流10mA,灵敏度15uA,立体声分离度30dB,信噪比60dB,输出信号电平75mV。总线通信可选IIC3线总线,具有RF信号强度ADC输出,软件静音。
18.2TEA5767读写:
金龙107开发板通过IIC总线与TEA5767模块连接,其电路接口如下图,PB11IIC数据线,PB10IIC时钟线,T1连接外接天线,FM_OUTLFM_OUTR为音频输出。
图片1.png
TEA5767I 2C总线的地址是C0是可收发的从器件结构,向TEA5767写入数据时,其低位地址为0C0,从TEA5767读出数据时其低位地址为1C1
写时序:

QQ图片20150423141830.png

其中传送数据中的bit位的含义可以参考芯片手册。
18.3、实验说明:
实验中使用到了TEA5767收音机模块和WM8978芯片,这里主要是将WM8978作为功率放大器,因此这里不做说明。
如下是向TEA5767写入数据
static void tea5767_Write(uint8_t *_ucaBuf, uint8_t _count)
{
        uint8_t i;
        uint8_t ucAck;
        i2c_Start();
        i2c_SendByte(TEA5767_SLAVE_ADDRESS | I2C_WR);/*发送设备写地址 */
        ucAck = I2C_WaitAck();        /*检测ACK*/
        if (ucAck == 1)
        {
                goto err_quit;
        }
        for (i = 0; i < _count; i++)
        {
                i2c_SendByte(_ucaBuf);/*发送数据 */
                ucAck = I2C_WaitAck();/*检测ACK*/
                if (ucAck == 1)
                {
                        goto err_quit;
                }
        }
err_quit:
i2c_Stop();
}
如下是从TEA5767读出数据
static void tea5767_Read(uint8_t *_ucaBuf)
{
        uint8_t i;
        uint8_t ucAck;
        i2c_Start();
        i2c_SendByte(TEA5767_SLAVE_ADDRESS | I2C_RD);/*发送设备读地址C1 */
        ucAck = I2C_WaitAck();/*检测ACK */
        if (ucAck == 1)
        {
                goto err_quit;
        }
        for (i = 0; i < 5; i++)
        {
                _ucaBuf = i2c_ReadByte();                //读取数据
                if (i == 4)
                {
                        i2c_Ack();                //发送ACK
                }
                else
                {
                        i2c_NAck();                //发送NACK
                }
        }
err_quit:
i2c_Stop();       
}
通过写入数据来设置TEA5767工作模式和调节频道,使用按键调节收音机音量频道等可以参考程序fm_radio.c文件。
18.4、实验现象:
插上串口线设置波特率为115200PB11IIC数据线需用10K上拉电阻,下载程序后复位开发板,开发板自动搜索到一个电台后开始播放,串口打印出电台频率等信息。使用方向键上下可以调节音量,左右调节频道,按键S1控制静音等。

金龙107原理图STM32F107VCT6_KIT_V1.1.pdf (131.28 KB, 下载次数: 5)
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /2 下一条



手机版|小黑屋|与非网

GMT+8, 2024-3-29 00:37 , Processed in 0.134540 second(s), 18 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.