初学者
10 分钟

使用SP1ML-915和PIC32MZ2048EFM100体验无线技术的未来

超越边界,连接您的世界

SPIRIT 2 Click with Curiosity PIC32 MZ EF

已发布 6月 26, 2024

点击板

SPIRIT 2 Click

开发板

Curiosity PIC32 MZ EF

编译器

NECTO Studio

微控制器单元

PIC32MZ2048EFM100

在915MHz ISM频段,我们的全集成RF模块在每一字节的数据传输中都体现出卓越品质,革新您的信息交换方式。

A

A

硬件概览

它是如何工作的?

SPIRIT 2 Click基于STMicroelectronics的SP1ML-915,这是一个集成MCU的低功耗RF模块。该模块集成了所有必要的组件,封装在一个非常紧凑的尺寸中,尺寸为14 x 13.4 x 2.5 mm。集成的32位MCU STM32L1设计时最大限度地考虑了节能特性,提供许多节能功能。这使整个模块的功耗更低,数据速率可达500 kbps。RF信号调制方案满足任何RF传输需求,允许对范围和功耗进行微调。SP1ML-915模块的主要功能是用作无线串行电缆替代品。Click板™具有SWD兼容的编程头,允许自定义固件上传到集成的MCU。然而,这可能会破坏工厂固件并使保修失效。该模块提供简单的UART接口,结合低功耗,是添加无线连接的理想解决方案,特别是对于IoT应用。

由于该模块设计用于无需广泛的RF通信经验,因此非常简单易用。Click板™提供两种操作模式:操作模式和命令模式。在操作模式下,从主机接收到的数据通过UART接口无线传输,使用当前的配置设置(频率、数据速率、调制和输出功率)。此外,任何符合配置过滤标准的数据将输出到UART接口。命令模式允许配置SP1ML-915模块。当Click板™收到逃脱序列“+++”后,至少500ms没有RX活动时,它将进入命令模式。通过使用一些简单的AT命令,开发人员可以配置设备的操作参数。完整的AT命令列表在SP1ML-915模块的数据手册中提供。如果不打算进入命令模式,则在正常操作期间不要发送逃脱序列。除了使用上述逃脱序列外,通过将Click板™的CMD

引脚驱动到低逻辑电平,也可以将模块置于命令模式。高逻辑电平将强制Click板™进入操作模式。更改此引脚状态后,Click板™应复位。要复位SP1ML-915模块,应将Click板™的RST引脚驱动到低逻辑电平。当RST引脚上存在低逻辑电平时,SP1ML-915模块将保持在RESET模式。通过在SHD引脚上施加低逻辑电平,Click板™将进入掉电模式。高逻辑电平将唤醒设备。数据流量由标记为TX/RX的LED指示。然而,使用指示器前应启用它。有关更多信息,请查阅SP1ML-915的数据手册。Click板™可以与3.3V和5V的MCU接口,无需任何外部组件。得益于TXB0106,6位双向电压电平转换器,Click板™可以简单地与各种不同的MCU一起使用。

SPIRIT 2 Click hardware overview image

功能概述

开发板

Curiosity PIC32 MZ EF 开发板是一个完全集成的 32 位开发平台,特点是高性能的 PIC32MZ EF 系列(PIC32MZ2048EFM),该系列具有 2MB Flash、512KB RAM、集成的浮点单元(FPU)、加密加速器和出色的连接选项。它包括一个集成的程序员和调试器,无需额外硬件。用户可以通过 MIKROE 

mikroBUS™ Click™ 适配器板扩展功能,通过 Microchip PHY 女儿板添加以太网连接功能,使用 Microchip 扩展板添加 WiFi 连接能力,并通过 Microchip 音频女儿板添加音频输入和输出功能。这些板完全集成到 PIC32 强大的软件框架 MPLAB Harmony 中,该框架提供了一个灵活且模块化的接口

来应用开发、一套丰富的互操作软件堆栈(TCP-IP、USB)和易于使用的功能。Curiosity PIC32 MZ EF 开发板提供了扩展能力,使其成为连接性、物联网和通用应用中快速原型设计的绝佳选择。

Curiosity PIC32MZ EF double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

PIC32

MCU 内存 (KB)

2048

硅供应商

Microchip

引脚数

100

RAM (字节)

524288

使用的MCU引脚

mikroBUS™映射器

NC
NC
AN
Reset
RA9
RST
Command Mode
RPD4
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
Shutdown Control
RPE8
PWM
NC
NC
INT
UART TX
RPD10
TX
UART RX
RPD15
RX
NC
NC
SCL
NC
NC
SDA
Power Supply
5V
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

SPIRIT 2 Click Schematic schematic

一步一步来

项目组装

Curiosity PIC32MZ EF front image hardware assembly

从选择您的开发板和Click板™开始。以Curiosity PIC32 MZ EF作为您的开发板开始。

Curiosity PIC32MZ EF front image hardware assembly
GNSS2 Click front image hardware assembly
Prog-cut hardware assembly
Board mapper by product7 hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
Curiosity PIC32 MZ EF MCU Step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

软件支持

库描述

该库包含 SPIRIT 2 Click 驱动程序的 API。

关键功能:

  • spirit2_power_module - 功能用于电源模式

  • spirit2_reset - 功能用于重置

  • spirit2_set_mode - 功能用于设置模式

开源

代码示例

完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio 应用程序代码也可以在MIKROE的GitHub账户中找到。

/*!
 * @file main.c
 * @brief SPIRIT 2 Click Example.
 *
 * # Description
 * This example reads and processes data from SPIRIT 2 Click.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initializes the driver and configures the Click board.
 *
 * ## Application Task
 * Depending on the selected mode, it reads all the received data or sends the desired message 
 * every 2 seconds.
 *
 * ## Additional Function
 * - static err_t spirit2_process ( void )
 *
 * @author Jelena Milosavljevic
 *
 */

// ------------------------------------------------------------------- INCLUDES

#include "board.h"
#include "log.h"
#include "spirit2.h"

#define PROCESS_BUFFER_SIZE    500
#define PROCESS_COUNTER        20

#define TEXT_TO_SEND           "MikroE - SPIRIT 2 Click board\r\n"

#define DEMO_APP_RECEIVER
//#define DEMO_APP_TRANSMITTER

static spirit2_t spirit2;
static log_t logger;

static char app_buf[ PROCESS_BUFFER_SIZE ] = { 0 };
static int32_t app_buf_len = 0;
static int32_t app_buf_cnt = 0;

/**
 * @brief SPIRIT2 2 data reading function.
 * @details This function reads data from device and concatenates data to application buffer.
 *
 * @return @li @c  0 - Read some data.
 *         @li @c -1 - Nothing is read.
 *         @li @c -2 - Application buffer overflow.
 *
 * See #err_t definition for detailed explanation.
 * @note None.
 */
static void spirit2_process ( void );

// ------------------------------------------------------ APPLICATION FUNCTIONS

void application_init ( void ) 
{
    log_cfg_t log_cfg;
    spirit2_cfg_t cfg;

    /** 
     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX 
     * are defined as HAL_PIN_NC, you will 
     * need to define them manually for log to work. 
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
     */
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    log_info( &logger, "---- Application Init ----" );

    //  Click initialization.

    spirit2_cfg_setup( &cfg );
    SPIRIT2_MAP_MIKROBUS( cfg, MIKROBUS_1 );
    spirit2_init( &spirit2, &cfg );
    Delay_ms ( 1000 );

    log_info( &logger, "---- Configuring the module ----" );
    spirit2_power_module( &spirit2, SPIRIT2_MODULE_WAKE_UP );
    spirit2_reset( &spirit2 );
    spirit2_set_mode( &spirit2, SPIRIT2_OPERATING_MODE );
    Delay_ms ( 1000 );
    log_printf( &logger, "COMMAND MODE\r\n" );
    spirit2_send_cmd( &spirit2, SPIRIT2_CMD_ENTER_COMMAND_MODE );
    spirit2_process( );
    log_printf( &logger, "FIRMWARE VERSION\r\n" );
    spirit2_send_cmd( &spirit2, SPIRIT2_CMD_READ_MODULE_VERSION );
    spirit2_process( );
    log_printf( &logger, "TXRX LED - OPEN DRAIN OUTPUT\r\n" );
    spirit2_send_cmd_with_parameter( &spirit2, SPIRIT2_CMD_CFG_TXRX_LED, SPIRIT2_PCFG_TXRXLED_OPEN_DRAIN );
    spirit2_process( );
    log_printf( &logger, "STORE CONFIG\r\n" );
    spirit2_send_cmd( &spirit2, SPIRIT2_CMD_STORE_CURRENT_CONFIG );
    spirit2_process( );
    log_printf( &logger, "OPERATING MODE\r\n" );
    spirit2_send_cmd( &spirit2, SPIRIT2_CMD_ENTER_OPERATING_MODE );
    spirit2_process( );
    log_info( &logger, "---- The module has been configured ----" );
#ifdef DEMO_APP_RECEIVER
    log_info( &logger, "---- RECEIVER MODE ----" );
#endif 
#ifdef DEMO_APP_TRANSMITTER
    log_info( &logger, "---- TRANSMITTER MODE ----" );
#endif 
    Delay_ms ( 1000 );
}

void application_task ( void ) {
#ifdef DEMO_APP_RECEIVER
    spirit2_process( );
#endif   
    
#ifdef DEMO_APP_TRANSMITTER 
    spirit2_generic_write( &spirit2, TEXT_TO_SEND, strlen( TEXT_TO_SEND ) );
    log_info( &logger, "---- The message has been sent ----" );
    Delay_ms ( 1000 );
    Delay_ms ( 1000 );
#endif
}

int main ( void ) 
{
    /* Do not remove this line or clock might not be set correctly. */
    #ifdef PREINIT_SUPPORTED
    preinit();
    #endif
    
    application_init( );
    
    for ( ; ; ) 
    {
        application_task( );
    }

    return 0;
}

static void spirit2_process ( void ) {
    int32_t rsp_size;
    
    char uart_rx_buffer[ PROCESS_BUFFER_SIZE ] = { 0 };
    uint8_t process_cnt = PROCESS_COUNTER;

    while( process_cnt != 0 ) {
       
        rsp_size = spirit2_generic_read( &spirit2, &uart_rx_buffer, PROCESS_BUFFER_SIZE );
        
        if ( rsp_size > 0 ) {  
            
            for ( uint8_t cnt = 0; cnt < rsp_size; cnt++ ) {
                
                log_printf( &logger, "%c", uart_rx_buffer[ cnt ] );
                if ( uart_rx_buffer[ cnt ] == '\n' ) {
                   
                    log_printf( &logger, "-----------------------------\r\n" );
                }
            }
        } 
        else {
           
            process_cnt--;
            
            // Process delay 
            Delay_ms ( 100 );
        }
    }
}

// ------------------------------------------------------------------------ END

额外支持

资源

喜欢这个项目吗?

'购买此套件' 按钮会直接带您进入购物车,您可以在购物车中轻松添加或移除产品。