中级
30 分钟

使用M95P32-I和STM32F031K6保存校准数据和系统日志

无限创意,即时回忆

EEPROM 9 Click with Nucleo 32 with STM32F031K6 MCU

已发布 10月 01, 2024

点击板

EEPROM 9 Click

开发板

Nucleo 32 with STM32F031K6 MCU

编译器

NECTO Studio

微控制器单元

STM32F031K6

我们的EEPROM解决方案保证了安全的数据存储,非常适合存储加密密钥、启动序列和关键系统参数等敏感信息。

A

A

硬件概览

它是如何工作的?

EEPROM 9 Click基于M95P32-I,这是一款来自STMicroelectronics的32Mbit SPI页EEPROM设备,分为8192个512字节可擦除页面(可组织为1024个4K字节可擦除扇区、64个64K字节可擦除块或完全可擦除数组)。M95P32-I采用ST先进的专有NVM技术制造,提供字节灵活性、页面可修改性、高页面循环性能和超低功耗。它非常可靠,具有50万次写入周期和100年的数据保存期(50万次循环后的10年),这使其适用于各种需要可靠非易失性存储的应用。此Click板™通过SPI串行接口与MCU通信,支持两种最

常见的模式,SPI模式0和3,最大SPI频率为80MHz。如前所述,M95P32-I提供多达512字节的字节和页面写入指令。写入指令包括自定时自动擦除和编程操作,从而实现灵活的数据字节管理。它还接受页面/块/扇区/芯片擦除命令,以将内存设置为已擦除状态。然后可以通过512字节的页面快速编程内存,并进一步优化使用“页面编程与缓冲区加载”来隐藏SPI通信延迟。额外的状态、配置和易失性寄存器设置所需的设备配置,而安全寄存器则提供设备状态信息。除了SPI通信外,EEPROM 9 Click还具有两个额外的引

脚,用于写保护和通信保持功能,连接到mikroBUS™插座的WP和HLD引脚。mikroBUS™插座的HLD引脚可用于在不取消选择设备的情况下暂停与M95P32-I的串行通信。连接到mikroBUS™插座WP引脚的可配置写保护功能允许用户将内存区域冻结为只读模式(由STATUS寄存器的BPx和TB位的值指定)。此Click板™只能在3.3V逻辑电压水平下运行。使用不同逻辑电平的MCU之前,必须进行适当的逻辑电压电平转换。此外,该Click板™配备了包含功能和示例代码的库,可用作进一步开发的参考。

EEPROM 9 Click top side image
EEPROM 9 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
NC
NC
RST
SPI Chip Select
PA4
CS
SPI Clock
PB3
SCK
SPI Data OUT
PB4
MISO
SPI Data IN
PB5
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
Write Protection
PA8
PWM
Data Transfer Pause
PA12
INT
NC
NC
TX
NC
NC
RX
NC
NC
SCL
NC
NC
SDA
NC
NC
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

EEPROM 9 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
2x4 RGB Click front image hardware assembly
Prog-cut hardware assembly
Nucleo-32 with STM32 MCU MB 1 - upright/background 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
Clicker 4 for STM32F4 HA 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

实时跟踪您的结果

应用程序输出

1. 应用程序输出 - 在调试模式下,“应用程序输出”窗口支持实时数据监控,直接提供执行结果的可视化。请按照提供的教程正确配置环境,以确保数据正确显示。

2. UART 终端 - 使用UART Terminal通过USB to UART converter监视数据传输,实现Click board™与开发系统之间的直接通信。请根据项目需求配置波特率和其他串行设置,以确保正常运行。有关分步设置说明,请参考提供的教程

3. Plot 输出 - Plot功能提供了一种强大的方式来可视化实时传感器数据,使趋势分析、调试和多个数据点的对比变得更加直观。要正确设置,请按照提供的教程,其中包含使用Plot功能显示Click board™读数的分步示例。在代码中使用Plot功能时,请使用以下函数:plot(insert_graph_name, variable_name);。这是一个通用格式,用户需要将“insert_graph_name”替换为实际图表名称,并将“variable_name”替换为要显示的参数。

软件支持

库描述

该库包含 EEPROM 9 Click 驱动程序的 API。

关键功能:

  • eeprom9_set_write_enable - EEPROM 9启用写入功能

  • eeprom9_read_memory - EEPROM 9内存读取功能

  • eeprom9_block_erase - EEPROM 9内存块擦除功能

开源

代码示例

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

/*!
 * @file main.c
 * @brief EEPROM 9 Click example
 *
 * # Description
 * This is an example that demonstrates the use of the EEPROM 9 Click board.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initializes the driver and USB UART logging, disables hold and write protection.
 *
 * ## Application Task
 * Writes a desired number of data bytes to the EEPROM 9 memory into a specified address, 
 * and verifies that it is written correctly by reading from the same memory location.
 *
 * @author Stefan Ilic
 *
 */

#include "board.h"
#include "log.h"
#include "eeprom9.h"

static eeprom9_t eeprom9;
static log_t logger;
static char demo_data[ 9 ] = { 'M', 'i', 'k', 'r', 'o', 'E', 13 ,10 , 0 };

#define MEMORY_ADDRESS  0x0300

void application_init ( void )
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    eeprom9_cfg_t eeprom9_cfg;  /**< Click config object. */
    id_data_t id_data;
    
    /** 
     * 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.
    eeprom9_cfg_setup( &eeprom9_cfg );
    EEPROM9_MAP_MIKROBUS( eeprom9_cfg, MIKROBUS_1 );
    if ( SPI_MASTER_ERROR == eeprom9_init( &eeprom9, &eeprom9_cfg ) )
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    eeprom9_read_identification( &eeprom9, &id_data );
    if ( EEPROM9_ST_MANUFACTURER_CODE != id_data.manufact_code )
    {
        log_error( &logger, " Communication error." );
        for ( ; ; );
    }
    log_printf( &logger, " Manufacturer code: 0x%.2X \r\n", ( uint16_t ) id_data.manufact_code ); 
    
    log_printf( &logger, " Disabling Hold \r\n" );
    eeprom9_set_hold( &eeprom9, EEPROM9_HOLD_DISABLE );
    Delay_ms( 100 );
    
    log_printf( &logger, " Disabling Write Protection \r\n" );
    eeprom9_set_write_protection( &eeprom9, EEPROM9_WRITE_PROTECT_DISABLE );
    Delay_ms( 100 );
    
    log_info( &logger, " Application Task " );
    log_printf( &logger, " - - - - - - - - - - - \r\n" );
}

void application_task ( void )
{
    char rx_data[ 9 ] = { 0 };
    
    eeprom9_set_write_enable( &eeprom9, EEPROM9_WRITE_ENABLE );
    Delay_ms( 10 );
    
    eeprom9_write_memory( &eeprom9, MEMORY_ADDRESS, demo_data, 9 );
    log_printf( &logger, " Write data: %s", demo_data );
    Delay_ms( 100 );
    
    eeprom9_read_memory( &eeprom9, MEMORY_ADDRESS, rx_data, 9 );
    log_printf( &logger, " Read data: %s", rx_data );  
    log_printf( &logger, " - - - - - - - - - - - \r\n" );
    
    Delay_ms( 1000 );
    
}

void main ( void )
{
    application_init( );

    for ( ; ; )
    {
        application_task( );
    }
}

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

额外支持

资源

喜欢这个项目吗?

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