中级
30 分钟

使用 CY8C9520A 和 STM32F031K6 简化复杂的 I/O 挑战

解锁连接能力

EXPAND 6 Click with Nucleo 32 with STM32F031K6 MCU

已发布 10月 01, 2024

点击板

EXPAND 6 Click

开发板

Nucleo 32 with STM32F031K6 MCU

编译器

NECTO Studio

微控制器单元

STM32F031K6

以信心应对有限I/O资源的挑战,因为我们的端口扩展技术提供实时引脚扩展、精确控制和多样化电子系统的适应性。

A

A

硬件概览

它是如何工作的?

EXPAND 6 Click基于Infineon的CY8C9520A,这是一款具有EEPROM和四个独立可配置8位PWM输出的20位I/O扩展器。CY8C9520A的主要模块包括控制单元、PWM、EEPROM和I/O端口。I/O扩展器的数据引脚可以独立分配为输入、输出或PWM输出,并且可以配置为开漏或集电极、强驱动(10 mA源,25 mA沉)、上拉或下拉电阻,或高阻抗,这些可以在端口驱动模式寄存器中选择。它作为两个I2C外围设备运行,第一个设备是多端口I/O扩展器(单个I2C地址通过寄存器访问所有端口),第二个是具有3 Kbyte地址空间的串行EEPROM。配置和输出寄存器设置可以作

为用户默认值存储在EEPROM的专用部分中。如果用户默认值存储在EEPROM中,它们将在上电序列中恢复到端口。EEPROM是字节可读的,并支持逐字节写入。此Click板™上的端口2的引脚3可以配置为EEPROM写入禁用(WD)输入,当设置为高时阻止写操作。配置寄存器也可以关闭EEPROM操作。EXPAND 6 Click通过标准I2C 2线接口与MCU通信,最大频率为100kHz。默认情况下,CY8C9520A有两种可能的I2C从设备地址格式:第一种用于访问多端口设备,第二种用于访问EEPROM。I2C从设备地址的选择是通过设置CY8C9520A的A0引脚上的逻辑电平来执行的,可以使用标

记为ADDR SEL的SMD跳线完成。它还生成一个可编程中断信号,路由到mikroBUS™的INT引脚,这可以通知系统主设备其端口上有传入数据或PWM输出状态已更改。路由到mikroBUS™插座RST引脚的复位信号类似于POR(上电复位)功能。当CY8C9520A处于复位状态时,所有输入和输出引脚都保持在默认的高阻状态。此Click板™可以通过VCC SEL跳线选择3.3V或5V逻辑电压水平运行。这样,3.3V和5V的MCU都可以正确使用通信线。此外,此Click板™配备了一个包含易于使用的函数和示例代码的库,可用作进一步开发的参考。

EXPAND 6 Click top side image
EXPAND 6 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
NC
NC
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
NC
NC
PWM
Interrupt
PA12
INT
NC
NC
TX
NC
NC
RX
I2C Clock
PB6
SCL
I2C Data
PB7
SDA
Power Supply
5V
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

EXPAND 5 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
Stepper 22 Click complete accessories setup image 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

软件支持

库描述

该库包含 EXPAND 6 Click 驱动程序的 API。

关键功能:

  • expand6_write_port - 设置一个端口中所有输出引脚逻辑电平的函数

  • expand6_reset - 重置功能

  • expand6_write_pin - 设置单个输出引脚逻辑电平的函数

开源

代码示例

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

/*!
 * \file 
 * \brief Expand6 Click example
 * 
 * # Description
 * This example demonstrates the use of EXPAND 6 Click board.
 *
 * The demo application is composed of two sections :
 * 
 * ## Application Init 
 * Initalizes I2C driver and makes an initial log.
 * 
 * ## Application Task  
 * This example shows the capabilities of the EXPAND 6 Click by toggling 
 * each of the 20 available pins.
 * 
 * \author MikroE Team
 *
 */
// ------------------------------------------------------------------- INCLUDES

#include "board.h"
#include "log.h"
#include "expand6.h"

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

static expand6_t expand6;
static log_t logger;

uint8_t pin_num;

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

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

    expand6_cfg_setup( &cfg );
    EXPAND6_MAP_MIKROBUS( cfg, MIKROBUS_1 );
    expand6_init( &expand6, &cfg );

    expand6_reset ( &expand6 );
    Delay_ms ( 1000 );
    
    log_printf( &logger, "------------------- \r\n" );
    log_printf( &logger, "   EXPAND 6 Click   \r\n" );
    log_printf( &logger, "------------------- \r\n" );
}

void application_task ( void )
{
    expand6_write_port( &expand6, EXPAND6_PORT_0, 0xFF );
    expand6_write_port( &expand6, EXPAND6_PORT_1, 0xFF );
    expand6_write_port( &expand6, EXPAND6_PORT_2, 0xFF );
    
    log_printf( &logger, "All pins set to HIGH logic level!\r\n" );
    log_printf( &logger, "---------------------------------\r\n" );
    Delay_ms ( 1000 );
    Delay_ms ( 1000 );
    
    for ( pin_num = 0; pin_num < 20; pin_num++ )
    {
        expand6_write_pin( &expand6, pin_num, EXPAND6_LOW );
        log_printf( &logger, "Pin %u is set to LOW logic level!\r\n", ( uint16_t) pin_num );
        Delay_ms ( 300 );
    }

    log_printf( &logger, "---------------------------------\r\n" );
    Delay_ms ( 1000 );
}

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

额外支持

资源

喜欢这个项目吗?

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