中级
30 分钟

使用CYBT-343026-01和STM32F031K6创造一些惊人的无线奇迹

用蓝牙简化您的生活

BT-EZ Click with Nucleo 32 with STM32F031K6 MCU

已发布 10月 01, 2024

点击板

BT-EZ Click

开发板

Nucleo 32 with STM32F031K6 MCU

编译器

NECTO Studio

微控制器单元

STM32F031K6

以无与伦比的轻松程度在兼容设备之间流式传输、共享和控制数据。

A

A

硬件概览

它是如何工作的?

BT-EZ Click 基于 Infineon 的 CYBT-343026-01 模块,具有一些令人印象深刻的特性,其中包括它包含一个免版税的蓝牙堆栈,支持蓝牙 5.0 和 BLE。此外,低功耗模式使模块在深度睡眠模式下的功耗仅为 2.69µA,非常适用于便携式、可穿戴和各种其他电池供电的设备和应用。BT-EZ Click 是一个完全集成的蓝牙智能就绪无线模块,具有板载晶振、被动元件、闪存存储器和来自 Infineon 的 CYW20706 硅器件。CYBT-343026-01 模块还包括一个 Cortex-M3 32 位处理器和 512 KB 的板载串行闪存存储器。它设计用于独立运行,而集成功率放大器用于实现 I 或 II 类输出功率能力。BT-EZ Click 板使用 UART 通信和 GPIO 引脚与主 MCU 进行通

信。BT-EZ Click 支持两种 UART 通信模式。HCI UART 接口是一个标准的、四线接口 (RX、TX、RTS 和 CTS),可调波特率从 38400 bps 到 4 Mbps。在初始引导期间,UART 速度可能限制为 750 kbps。波特率可以通过供应商特定的 UART HCI 命令进行选择。UART 时钟默认设置为 24MHz,可以运行高达 48 MHz 以支持高达 4 Mbps。CYBT-343026-01UART 模块的波特率由两个值控制:时钟除数 (设置在 DLBR 寄存器中),将 UART 时钟除以 16 的整数倍;波特率调整值 (设置在 DHBR 寄存器中),用于指定在每个位时间的第一半或第二半中要插入的 UART 时钟周期数。BT-EZ Click 还具有第二个 UART (PUART) 模式,可用于与其

他外设进行接口。该外设 UART 通过可选的 I/O 端口访问,这些端口可以单独和分别配置每个信号。外部 I2C 接口提供了一个 2 引脚主 I2C 接口,可以从外部 EEPROM 检索配置信息或与鼠标设备中使用的轨迹球或触摸板模块和运动跟踪 IC 进行通信。此接口与 I2C 从设备兼容。I2C 不支持多主机能力或灵活的等待状态插入,无论是主机还是从机设备。此 Click board™ 只能使用 3.3V 逻辑电压电平操作。在使用具有不同逻辑电平的 MCU 之前,板必须执行适当的逻辑电压电平转换。此外,它配备了一个包含函数和示例代码的库,可用作进一步开发的参考。

BT-EZ Click top side image
BT-EZ Click bottom side image

功能概述

开发板

Nucleo 32开发板搭载STM32F031K6 MCU,提供了一种经济且灵活的平台,适用于使用32引脚封装的STM32微控制器进行实验。该开发板具有Arduino™ Nano连接性,便于通过专用扩展板进行功能扩展,并且支持mbed,使其能够无缝集成在线资源。板载集成

ST-LINK/V2-1调试器/编程器,支持通过USB重新枚举,提供三种接口:虚拟串口(Virtual Com port)、大容量存储和调试端口。该开发板的电源供应灵活,可通过USB VBUS或外部电源供电。此外,还配备了三个LED指示灯(LD1用于USB通信,LD2用于电源

指示,LD3为用户可控LED)和一个复位按钮。STM32 Nucleo-32开发板支持多种集成开发环境(IDEs),如IAR™、Keil®和基于GCC的IDE(如AC6 SW4STM32),使其成为开发人员的多功能工具。

Nucleo 32 with STM32F031K6 MCU double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

ARM Cortex-M0

MCU 内存 (KB)

32

硅供应商

STMicroelectronics

引脚数

32

RAM (字节)

4096

你完善了我!

配件

Click Shield for Nucleo-32是扩展您的开发板功能的理想选择,专为STM32 Nucleo-32引脚布局设计。Click Shield for Nucleo-32提供了两个mikroBUS™插座,可以添加来自我们不断增长的Click板™系列中的任何功能。从传感器和WiFi收发器到电机控制和音频放大器,我们应有尽有。Click Shield for Nucleo-32与STM32 Nucleo-32开发板兼容,为用户提供了一种经济且灵活的方式,使用任何STM32微控制器快速创建原型,并尝试各种性能、功耗和功能的组合。STM32 Nucleo-32开发板无需任何独立的探针,因为它集成了ST-LINK/V2-1调试器/编程器,并随附STM32全面的软件HAL库和各种打包的软件示例。这个开发平台为用户提供了一种简便且通用的方式,将STM32 Nucleo-32兼容开发板与他们喜欢的Click板™结合,应用于即将开展的项目中。

Click Shield for Nucleo-32 accessories 1 image

使用的MCU引脚

mikroBUS™映射器

NC
NC
AN
Reset
PA11
RST
UART CTS
PA4
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
NC
NC
PWM
UART RTS
PA12
INT
UART TX
PA10
TX
UART RX
PA9
RX
NC
NC
SCL
NC
NC
SDA
NC
NC
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

BT-EZ Click Schematic schematic

一步一步来

项目组装

Click Shield for Nucleo-144 front image hardware assembly

从选择您的开发板和Click板™开始。以Nucleo 32 with STM32F031K6 MCU作为您的开发板开始。

Click Shield for Nucleo-144 front image hardware assembly
Nucleo 144 with STM32L4A6ZG MCU front image hardware assembly
Stepper 22 Click front image hardware assembly
Prog-cut hardware assembly
Board mapper by product8 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
STM32 M4 Clicker HA MCU/Select 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

软件支持

库描述

该库包含 BT-EZ Click 驱动程序的 API。

关键功能:

  • btez_generic_write - 通用写函数

  • btez_generic_read - 通用读函数

  • btez_send_command - 发送命令函数

开源

代码示例

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

/*!
 * \file 
 * \brief BtEz Click example
 * 
 * # Description
 * This example reads and processes data from BT-EZ Clicks.
 *
 * The demo application is composed of two sections :
 * 
 * ## Application Init 
 * Initializes the driver and configures the Click board.
 * 
 * ## Application Task  
 * Checks for the received data, reads it and replies with a certain message.
 * 
 * ## Additional Function
 * - btez_process ( ) - Logs all received messages on UART, and sends the certain
 * message back to the connected device.
 * 
 * @note
 * We have used the Serial Bluetooth Terminal smartphone application for the test. 
 * A smartphone and the Click board must be paired in order to exchange messages
 * with each other.
 * 
 * \author MikroE Team
 *
 */
// ------------------------------------------------------------------- INCLUDES

#include "board.h"
#include "log.h"
#include "btez.h"
#include "string.h"

#define PROCESS_COUNTER 100
#define PROCESS_RX_BUFFER_SIZE 200

#define CMD_PING           "/PING"
#define CMD_DEVICE_NAME    "SDN,N=BT-EZ_Click"
#define CMD_SAVE           "SDA$,A=0080"
#define CMD_GDN            "GDN"
#define SEND_DATA          "MikroE // BT-EZ Click\r\n"

// ------------------------------------------------------------------ VARIABLES

static btez_t btez;
static log_t logger;
static uint8_t config_mode = 0;
static char current_parser_buf[ PROCESS_RX_BUFFER_SIZE ];

// ------------------------------------------------------- ADDITIONAL FUNCTIONS

static void btez_process ( void )
{
    int32_t rsp_size;
    uint16_t rsp_cnt = 0;
    uint8_t ret_flag = 0;
    
    char uart_rx_buffer[ PROCESS_RX_BUFFER_SIZE ] = { 0 };
    uint8_t check_buf_cnt;
    uint8_t process_cnt = PROCESS_COUNTER;
    
    // Clear current buffer
    memset( current_parser_buf, 0, PROCESS_RX_BUFFER_SIZE ); 
    
    while( process_cnt != 0 )
    {
        rsp_size = btez_generic_read( &btez, &uart_rx_buffer, PROCESS_RX_BUFFER_SIZE );

        if ( rsp_size > 0 )
        {  
            // Validation of the received data
            for ( check_buf_cnt = 0; check_buf_cnt < rsp_size; check_buf_cnt++ )
            {
                if ( uart_rx_buffer[ check_buf_cnt ] == 0 ) 
                {
                    uart_rx_buffer[ check_buf_cnt ] = 13;
                }
            }
            // Storages data in current buffer
            rsp_cnt += rsp_size;
            if ( rsp_cnt < PROCESS_RX_BUFFER_SIZE )
            {
                strncat( current_parser_buf, uart_rx_buffer, rsp_size );
            }
            
            if ( strchr ( uart_rx_buffer, '@' ) )
            {
                ret_flag = 1;
                process_cnt = 3;
            }
            else if ( config_mode == 0 )
            {
                btez_send_command( &btez, SEND_DATA );
                ret_flag = 2;
                process_cnt = 3;
            }
            
            // Clear RX buffer
            memset( uart_rx_buffer, 0, PROCESS_RX_BUFFER_SIZE );
        } 
        else 
        {
            process_cnt--;
            
            // Process delay 
            Delay_ms ( 100 );
        }
    }
    
    if ( ret_flag != 0 )
    {
        log_printf( &logger, "%s", current_parser_buf );
    }
}

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

void application_init ( void )
{
    log_cfg_t log_cfg;
    btez_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.

    btez_cfg_setup( &cfg );
    BTEZ_MAP_MIKROBUS( cfg, MIKROBUS_1 );
    btez_init( &btez, &cfg );
    Delay_ms ( 100 );

    log_printf( &logger, "Configuring the module...\r\n" );
    config_mode = 1;
    
    btez_module_reset( &btez );
    btez_process( );
    btez_send_command( &btez, CMD_PING );
    btez_process( );
    btez_send_command( &btez, CMD_DEVICE_NAME );
    btez_process( );
    btez_send_command( &btez, CMD_SAVE );
    btez_process( );
    btez_send_command( &btez, CMD_GDN );
    btez_process( );
    
    config_mode = 0;
    log_printf( &logger, "The module has been configured.\r\n" );
    Delay_1sec( );
}

void application_task ( void )
{
    btez_process( );
}

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;
}

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

额外支持

资源

喜欢这个项目吗?

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