MCU

MCU是Microcontroller Unit(微控制器单元)的缩写,它是一种集成了中央处理器(CPU)、存储器(ROM、RAM)、输入/输出端口(I/O)、定时器(Timer)、串行通信接口(UART、SPI、I2C等)和其他外围设备控制器的单个芯片。MCU通常用于嵌入式系统中,用于控制各种电子设备和系统。

由于其集成度高、体积小、功耗低以及成本相对较低等特点,MCU被广泛应用于各种嵌入式系统中,例如智能家居设备、医疗设备、汽车电子系统、工业自动化等。MCU的选择通常基于应用的需求,如处理性能、功耗、外设接口等因素。

SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB在布局上节省了空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,它被广泛地使用在ADC、LCD、FLASH等设备与MCU之间的通信。

CKS32F4xx系列产品SPI介绍

CKS32F4xx系列的SPI外设可用作通讯的主机及从机,支持最高的SCK时钟频率为fpclk/2(CKS32F407型号的芯片默认fpclk为142MHz,fpclk2为84MHz),完全支持SPI协议的4种模式。SPI协议根据CPOL及CPHA的不同状态分成的四种工作模式如下表所示:

1.jpg

CKS32F4xx系列的SPI架构如下图所示:

2.png

图中的1处是SPI的引脚MOSI、MISO、SCK、NSS。CKS32F4xx芯片有多个 SPI外设,它们的SPI通讯信号引出到不同GPIO引脚上,使用时必须配置到这些指定的引脚。关于GPIO引脚的复用功能可以查阅芯片数据手册。各个引脚的作用介绍如下:

(1)NSS:从设备选择信号线,常称为片选信号线。当有多个SPI从设备与 SPI主机相连时,设备的其它信号线SCK、MOSI及MISO同时并联到相同的SPI 总线上,即无论有多少个从设备,都共同只使用这3条总线;而每个从设备都有独立的一条NSS信号线,当主机要选择从设备时,把该从设备的NSS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以NSS线置低电平为开始信号,以NSS线被拉高作为结束信号。

(2)SCK:时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,两个设备之间通讯时,通讯速率受限于低速设备。

(3)MOSI:主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。

(4)MISO:主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

图中的2处是SCK线的时钟信号,由波特率发生器根据“控制寄存器CR1”中的BR[0:2]位控制,该位是对fpclk时钟的分频因子,对fpclk的分频结果就是SCK引脚的输出时钟频率。

图中的3处是SPI的数据控制逻辑。SPI的MOSI及MISO都连接到数据移位寄存器上,数据移位寄存器的内容来源于接收缓冲区及发送缓冲区以及MISO、MOSI线。当向外发送数据的时候,数据移位寄存器以“发送缓冲区”为数据源,把数据一位一位地通过数据线发送出去;当从外部接收数据的时候,数据移位寄存器把数据线采样到的数据一位一位地存储到“接收缓冲区”中。通过写SPI 的“数据寄存器DR”把数据填充到发送缓冲区中,通过“数据寄存器DR”,可以获取接收缓冲区中的内容。其中数据帧的长度可以通过“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可选择MSB先行还是 LSB先行。

图中的4处是SPI的整体控制逻辑。整体控制逻辑负责协调整个SPI外设,控制逻辑的工作模式根据我们配置的“控制寄存器(CR1/CR2)”的参数而改变,基本的控制参数包括SPI模式、波特率、LSB先行、主从模式、单双向模式等等。在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR)”,我们只要读取状态寄存器相关的寄存器位,就可以了解SPI的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生SPI中断信号、DMA请求及控制NSS信号线。实际应用中,我们一般不使用CKS32 SPI外设的标准NSS信号线,而是更简单地使用普通的GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。

CKS32F4xx系列的SPI作为通讯主机端时收发数据的过程如下:

(1) 控制NSS信号线,产生起始信号;

(2) 把要发送的数据写入到“数据寄存器DR”中,该数据会被存储到发送缓冲区;

(3) 通讯开始,SCK时钟开始运行。MOSI把发送缓冲区中的数据一位一位地传输出去;MISO则把数据一位一位地存储进接收缓冲区中;

(4) 当发送完一帧数据的时候,“状态寄存器SR”中的“TXE标志位”会被置1,表示传输完一帧,发送缓冲区已空;类似地,当接收完一帧数据的时候,“RXNE标志位”会被置1,表示传输完一帧,接收缓冲区非空;

(5) 等待到“TXE标志位”为1时,若还要继续发送数据,则再次往“数据寄存器DR”写入数据即可;等待到“RXNE标志位”为1时,通过读取“数据寄存器DR”可以获取接收缓冲区中的内容。

假如我们使能了TXE或RXNE中断,TXE或RXNE置1时会产生SPI中断信号,进入同一个中断服务函数,到SPI中断服务程序后,可通过检查寄存器位来了解是哪一个事件,再分别进行处理。也可以使用DMA方式来收发“数据寄存器 DR”中的数据。

CKS32F4xx系列产品SPI的配置

接下来我们讲解如何利用CKS32F4xx系列固件库来完成对SPI的配置使用。跟其它外设一样,CKS32标准库提供了SPI初始化结构体及初始化函数来配置 SPI外设。了解初始化结构体后我们就能对SPI外设运用自如了,代码如下:

typedef struct
{  
    uint16_t SPI_Direction;            
    uint16_t SPI_Mode;                
    uint16_t SPI_DataSize;            
    uint16_t SPI_CPOL;               
    uint16_t SPI_CPHA;                 
    uint16_t SPI_NSS;                 
    uint16_t SPI_BaudRatePrescaler;    
    uint16_t SPI_FirstBit;             
    uint16_t SPI_CRCPolynomial;       
}SPI_InitTypeDef;

结构体中各个成员变量的介绍及初始化时可被赋的值如下:

1) SPI_Direction:本成员设置SPI的通讯方向,可设置为双线全双工 (SPI_Direction_2Lines_FullDuplex),双线只接收 (SPI_Direction_2Lines_RxOnly),单线只接收(SPI_Direction_1Line_Rx)、单线只发送模式(SPI_Direction_1Line_Tx)。

2) SPI_Mode:本成员设置SPI工作在主机模式(SPI_Mode_Master)或从机模式(SPI_Mode_Slave ),这两个模式的最大区别为SPI的SCK信号线的时序,SCK的时序是由通讯中的主机产生的。若被配置为从机模式,CKS32的SPI外设将接受外来的SCK信号:

3) SPI_DataSize: 本成员可以选择SPI通讯的数据帧大小是为8位 (SPI_DataSize_8b)还是16位(SPI_DataSize_16b)。

4) SPI_CPOL和SPI_CPHA: 这两个成员配置SPI的时钟极性CPOL和时钟相位CPHA,前面讲过这两个配置影响到SPI的通讯模式。时钟极性CPOL成员可设置为高电平(SPI_CPOL_High)或低电平(SPI_CPOL_Low )。时钟相位CPHA则 可以设置为SPI_CPHA_1Edge(在SCK的奇数边沿采集数据)或 SPI_CPHA_2Edge(在SCK的偶数边沿采集数据)。

5) SPI_NSS: 本成员配置NSS引脚的使用模式,可以选择为硬件模式 (SPI_NSS_Hard )与软件模式(SPI_NSS_Soft ),在硬件模式中的SPI片选信号由 SPI硬件自动产生,而软件模式则需要我们自己把相应的GPIO端口拉高或置低产生非片选和片选信号。实际中软件模式应用比较多。

6) SPI_BaudRatePrescaler: 本成员设置波特率分频因子,分频后的时钟即为SPI的SCK信号线的时钟频率。这个成员参数可设置为fpclk的2、4、6、8、16、32、64、128、256分频。可选的值如下所示:

SPI_BaudRatePrescaler_2    //2分频
SPI_BaudRatePrescaler_4    //4分频
SPI_BaudRatePrescaler_6    //6分频
SPI_BaudRatePrescaler_8    //8分频
SPI_BaudRatePrescaler_16   //16分频
SPI_BaudRatePrescaler_32   //32分频
SPI_BaudRatePrescaler_64   //64分频
SPI_BaudRatePrescaler_128  //128分频
SPI_BaudRatePrescaler_256  //256分频

7) SPI_FirstBit: 所有串行的通讯协议都会有MSB先行(高位数据在前)还是 LSB先行(低位数据在前)的问题,而CKS32F4xx系列的SPI模块可以通过这个结构体成员,对这个特性编程控制。

SPI_FirstBit_MSB    //高位数据在前
SPI_FirstBit_LSB     //低位数据在前

8) SPI_CRCPolynomial: 这是SPI的CRC校验中的多项式,若我们使用CRC 校验时,就使用这个成员的参数(多项式),来计算CRC的值。

配置完这些结构体成员的值,调用库函数SPI_Init即可把结构体的配置写入到寄存器中。

CKS32F4xx读写SPI FLASH实验

串口的DMA接发通信实验是存储器到外设和外设到存储器的数据传输。在第24

本小节以一种使用SPI通讯的串行FLASH存储芯片的读写实验为大家讲解 CKS32F4xx系列的SPI使用方法。实验中的FLASH芯片(型号:W25Q32)是一种使用SPI通讯协议的NORFLASH存储器,它的CS/CLK/DIO/DO引脚分别连接到了CKS32F4xx对应的SPI引脚NSS/SCK/MOSI/MISO上,其中CKS32F4xx的NSS引脚是一个普通的GPIO,不是SPI的专用NSS引脚,所以程序中我们要使用软件控制的方式。

1.编程要点

(1) 初始化通讯使用的目标引脚及端口时钟;  

(2) 使能SPI外设的时钟;

(3) 配置SPI外设的模式、地址、速率等参数并使能SPI外设;

(4) 编写基本SPI按字节收发的函数; 

(5) 编写对FLASH擦除及读写操作的的函数; 

(6) 编写测试程序,对读写数据进行校验。 

2.代码分析

代码清单1:W25Q32初始化配置

void W25QXX_Init(void)
{   
    GPIO_InitTypeDef  GPIO_InitStructure;  
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);   
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;   
    GPIO_Init(GPIOD, &GPIO_InitStructure); 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;  
    GPIO_Init(GPIOG, &GPIO_InitStructure);
    GPIO_SetBits(GPIOG,GPIO_Pin_3);   
    W25QXX_CS=1;                        //SPI FLASH不选中  
    SPI1_Init();                 //初始化SPI  
    SPI1_SetSpeed(SPI_BaudRatePrescaler_4);    //设置为21M时钟  
    W25QXX_TYPE=W25QXX_ReadID();         //读取FLASH ID.
}

上面的代码主要是完成对W25Q32片选引脚的初始化,SPI初始化。SPI通信速率设置和读取W25Q32的ID。

代码清单2:SPI初始化函数

void SPI1_Init(void)
{     
    GPIO_InitTypeDef  GPIO_InitStructure;  
    SPI_InitTypeDef  SPI_InitStructure;  
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;   
    GPIO_Init(GPIOB, &GPIO_InitStructure); 
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI1); 
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI1);   
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);  
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);  
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;   
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;      
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;    
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;      
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;   
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;      
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;    
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;    
    SPI_InitStructure.SPI_CRCPolynomial = 7;    
    SPI_Init(SPI1, &SPI_InitStructure);    
    SPI_Cmd(SPI1, ENABLE);   
    SPI1_ReadWriteByte(0xff);   
}

上面这段代码主要是完成对SPI1的初始化,首先是配置了SPI1使用的引脚SPI1_SCK、SPI1_MOSI和SPI1_MISO。然后是根据第2小节的内容完成对SPI1外设模式的配置。根据FLASH芯片W25Q32的说明,它支持SPI模式0及模式3,支持双线全双工,使用MSB先行模式,支持最高通讯时钟为104MHz,数据帧长度为8位。我们要把CKS32F4的SPI外设中的这些参数配置一致。

代码清单3:SPI1单字节收发函数

u8 SPI1_ReadWriteByte(u8 TxData)
{              
    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}   
    SPI_I2S_SendData(SPI1, TxData);   
    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){}   
    return SPI_I2S_ReceiveData(SPI1); 
}

本函数中不包含SPI起始和停止信号,只是收发的主要过程,所以在调用本函数前后要做好起始和停止信号的操作。通过检测TXE标志,获取发送缓冲区的状态,若发送缓冲区为空,则表示可能存在的上一个数据已经发送完毕;等待至发送缓冲区为空后,调用库函数SPI_I2S_SendData把要发送的数据“TxData”写入到SPI的数据寄存器DR,写入SPI数据寄存器的数据会存储到发送缓冲区,由SPI外设发送出去;写入完毕后等待RXNE事件,即接收缓冲区非空事件。由于SPI双线全双工模式下MOSI与MISO数据传输是同步的,当接收缓冲区非空时,表示上面的数据发送完毕,且接收缓冲区也收到新的数据;等待至接收缓冲区非空时,通过调用库函数SPI_I2S_ReceiveData读取SPI的数据寄存器DR,就可以获取接收缓冲区中的新数据了。代码中使用关键字“return”把接收到的这个数据作为SPI1_ReadWriteByte函数的返回值。

搞定了SPI的基本收发单元后,还需要了解如何对FLASH芯片进行读写。FLASH 芯片自定义了很多指令,我们通过控制CKS32F4利用SPI总线向FLASH 芯片发送指令,FLASH芯片收到后就会执行相应的操作。具体的指令代码可以查看W25Q32芯片的数据手册。

代码清单4:读取FLASH芯片ID函数

u16 W25QXX_ReadID(void)
{  
    u16 Temp = 0;      
    W25QXX_CS=0;              
    SPI1_ReadWriteByte(0x90);        
    SPI1_ReadWriteByte(0x00);         
    SPI1_ReadWriteByte(0x00);         
    SPI1_ReadWriteByte(0x00);               
    Temp|=SPI1_ReadWriteByte(0xFF)<<8;    
    Temp|=SPI1_ReadWriteByte(0xFF);     
    W25QXX_CS=1;              
    return Temp;
}

这段代码利用控制CS引脚电平的宏“W25QXX_CS”以及前面编写的单字节收发函数SPI1_ReadWriteByte,很清晰地实现了读ID指令的时序,最后把读 取到的这3个数据合并到一个变量Temp中,然后作为函数返回值,把该返回值与我们定义的芯片ID对比,即可知道FLASH芯片是否正常。

代码清单5:W25Q32写使能和写禁止函数

void W25QXX_Write_Enable(void)   
{  
    W25QXX_CS=0;                                
    SPI1_ReadWriteByte(W25X_WriteEnable);      
    W25QXX_CS=1;                                    
}
void W25QXX_Write_Disable(void)   
{    
    W25QXX_CS=0;                              
    SPI1_ReadWriteByte(W25X_WriteDisable);          
    W25QXX_CS=1;                                      
}

由于FLASH存储器的特性决定了它只能把原来为“1”的数据位改写成“0”,而原来为“0”的数据位不能直接改写为“1”。所以在写入前,必须要对目标存储矩阵进行擦除操作,把矩阵中的数据位擦除为“1”,在数据写入的时候,如果要存储数据“1”, 那就不修改存储矩阵,在要存储数据“0”时,需要更改该位。W25Q32支持“扇区擦除”、“块擦除”以及“整片擦除”。 扇区擦除指令的第一个字节为指令编码,紧接着发送的3个字节用于表示要擦除的存储矩阵地址。要注意的是在扇区擦除指令前,还需要先发送“写使能”指令,发送扇区擦除指令后,通过读取寄存器状态等待扇区擦除操作完毕。

代码清单6:W25Q32扇区擦除函数

void W25QXX_Erase_Sector(u32 Dst_Addr)   
{         
    Dst_Addr*=4096;    
    W25QXX_Write_Enable();                        
    W25QXX_Wait_Busy();       
    W25QXX_CS=0;                                  
    SPI1_ReadWriteByte(W25X_SectorErase);          
    SPI1_ReadWriteByte((u8)((Dst_Addr)>>16));         
    SPI1_ReadWriteByte((u8)((Dst_Addr)>>8));       
    SPI1_ReadWriteByte((u8)Dst_Addr);    
    W25QXX_CS=1;                                       
    W25QXX_Wait_Busy();             
}

目标扇区被擦除完毕后,就可以向它写入数据了。与EEPROM类似,FLASH芯片也有页写入命令,使用页写入命令最多可以一次向FLASH传输256个字节的数据,我们把这个单位称为页大小。在进行页写入时第1个字节为“页写入指令”编码,2-4字节为要写入的“地址A”,接着的是要写入的内容,最多可以发送 256字节数据,这些数据将会从“地址A”开始,按顺序写入到FLASH的存储矩阵。若发送的数据超出256个,则会覆盖前面发送的数据。

代码清单7:W25Q32页写入函数

void W25QXX_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{   
    u16 i;      
    W25QXX_Write_Enable();                   
    W25QXX_CS=0;                                   
    SPI1_ReadWriteByte(W25X_PageProgram);             
    SPI1_ReadWriteByte((u8)((WriteAddr)>>16));       
    SPI1_ReadWriteByte((u8)((WriteAddr)>>8));       
    SPI1_ReadWriteByte((u8)WriteAddr);       
    for(i=0;i<NumByteToWrite;i++)SPI1_ReadWriteByte(pBuffer[i]);   
    W25QXX_CS=1;                              
    W25QXX_Wait_Busy();            
}

应用的时候我们常常要写入不定量的数据,直接调用“页写入”函数并不是特别方便,所以我们页写入函数的基础上编写了“不定量数据写入”的函数。在实际调用这个“不定量数据写入”函数时,还要注意确保目标扇区处于擦除状态

代码清单8:W25Q32不定量数据写入函数

void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   
{   
    u32 secpos;  
    u16 secoff;  
    u16 secremain;        
    u16 i;      
    u8 * W25QXX_BUF;         
    W25QXX_BUF=W25QXX_BUFFER;          
    secpos=WriteAddr/4096;   
    secoff=WriteAddr%4096;   
    secremain=4096-secoff;     
    if(NumByteToWrite<=secremain)secremain=NumByteToWrite;  
    while(1)   
    {      
        W25QXX_Read(W25QXX_BUF,secpos*4096,4096);    
        for(i=0;i<secremain;i++)     
        {      
            if(W25QXX_BUF[secoff+i]!=0XFF)break;         
        }    
        if(i<secremain)     
        {      
            W25QXX_Erase_Sector(secpos);       
            for(i=0;i<secremain;i++)         
            {    
                W25QXX_BUF[i+secoff]=pBuffer[i];          
            }      
            W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);     
        }else W25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);     
        if(NumByteToWrite==secremain)break;     
        else     
        {      
            secpos++;      
            secoff=0;            
            pBuffer+=secremain;        
            WriteAddr+=secremain;              
            NumByteToWrite-=secremain;              
            if(NumByteToWrite>4096)secremain=4096;        
            else secremain=NumByteToWrite;          
        }     
    };   
}

函数的入口参数pBuffer是数据存储区、WriteAd是开始写入的地址(24bit)、NumByteToWrite是要写入的字节数(最大65535)gaojp。

相对于写入,FLASH芯片W25Q32的数据读取要简单的多,发送了指令编码及要读的起始地址和要读取的字节数之后,FLASH 芯片W25Q32就会按地址递增的方式返回存储矩阵中一定字节数量的数据。

代码清单9:W25Q32读取数据函数

void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{    
    u16 i;                             
    W25QXX_CS=0;                                  
    SPI1_ReadWriteByte(W25X_ReadData);              
    SPI1_ReadWriteByte((u8)((ReadAddr)>>16));         
    SPI1_ReadWriteByte((u8)((ReadAddr)>>8));       
    SPI1_ReadWriteByte((u8)ReadAddr);       
    for(i=0;i<NumByteToRead;i++)  
    {         
        pBuffer[i]=SPI1_ReadWriteByte(0XFF);   //循环读数      
    }  
    W25QXX_CS=1;                      
}

函数的入口参数pBuffer是数据存储区、ReadAddr是开始读取的地址(24bit)、NumByteToRead是要读取的字节数(最大65535)。

完成基本的读写函数后,接下来我们编写一个读写测试函数来检验驱动程。

代码清单10:W25Q32读写测试函数

uint8_t w25q32_Test(void)
{  
    u16 i;   
    printf("写入的数据:\r\n");  
    for ( i=0; i<=10; i++ )   
    {       
        spi_Buf_Write[i] = i;    
        printf("0x%02X ", spi_Buf_Write[i]);   
    }   
    W25QXX_Write((u8*)spi_Buf_Write,FLASH_SIZE-100,11);          
    printf("写成功,");     
    printf("读出的数据:\r\n");    
    W25QXX_Read(datatemp,FLASH_SIZE-100,11);            
    for (i=0; i<11; i++)  
    {      
        if(datatemp[i] != spi_Buf_Write[i])    
        {      
            printf("0x%02X ", datatemp[i]);      
            printf("错误:I2C EEPROM写入与读出的数据不一致");     
            return 0;    
        }    
        printf("0x%02X ", datatemp[i]);  
    }  
    printf("\r\n");    
    printf("spi(w25q32)读写测试成功");  
    return 1;
}

代码中先填充一个数组,数组的内容为0,1至10,接着把这个数组的内容写入到SPI FLASH中,并将写入的数据打印输出到串口调试助手。写入完毕后再从SPI FLASH的地址中读取数据,把读取到的数据与写入的数据进行校验,若一致说明读写正常,否则读写过程有问题或者SPI FLASH芯片不正常,然后再将读取到的数据打印输出到串口调试助手。

代码清单11:主函数

int main(void)
{     
    u16 id = 0;    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
    delay_init(168);       
    USART_Configuration();  
    W25QXX_Init();        
    while(1)  
    {    
        id = W25QXX_ReadID();    
        if (id == W25Q32 || id == NM25Q32)      
            break;     
            printf("W25Q32 init failed\r\n");    
        delay_ms(500);    
        delay_ms(500);  
    }   
    printf("W25Q32 init success\r\n");   
    w25q32_Test(); 
     while(1)  
     {   
     }       
 }

主函数代码比较简单,主要是完成串口初始化和W25Q32的初始化,初始化完成之后会执行W25QXX_ReadID函数,读取W25Q32的ID,同时对ID进行判断,并将结果通过串口调试助手打印输出。然后会执行一次W25Q32测试函数,并将一些测试结果通过串口调试助手打印输出。

来源:中科芯MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 29

2023年4月21日,澎湃微和国内其他电机行业厂商携电控MCU、栅栏驱动器等电机行业产品亮相中国电机智造与创新应用暨电机产业链交流会(CMIMS)。此次交流会聚焦高性能电机技术、BLDC热门技术应用、高速电机智能化方案等新技术方向,围绕“电机驱动与控制技术”帮助企业了解市场对于电机控制与MCU的最新需求,也为产业链企业搭建沟通交流平台。

1.jpg

中国电子信息产业发展研究院近日发布的《2022年中国家电市场报告》显示,当前家电消费结构正向高端化、绿色化、智能化转变。电机以及电控MCU技术是智能家电的“核心心脏”,随着绿色智能家电的渗透率逐步提高,对于电机和MCU的技术要求不断提高,对电控MCU的算力也有更高要求。在绿色方面,节能降耗是大方向,需要更高功率密度的BLDC电机和驱动算法,更高效率更低成本的BLDC电机解决方案也是企业目前要突破的重点。

2.jpg

3.jpg

澎湃微电子这次带来了众多的电机控制产品演示,如12万转高速风筒电机方案,单芯片语音识别FOC风扇方案,油烟机电机驱动方案等。同时还展出了角磨机,空调风机,彩色LCD屏驱动,LED段码屏驱动,触摸按键滑条驱动等特色功能的整机和演示板。

4.jpg

5.jpg

6.jpg

7.jpg

高速风筒电机控制,澎湃微提供了高性能、高集成度的32位专用MCU。主频高达72MHz,芯片内置电机专用高级PWM,高速ADC,运放及比较器等模块,集成多路模拟外设,提供成熟完善的高速风筒FOC算法,为客户带来可以快速上市的高速风筒解决方案。

8.jpg

语音风扇灯在单颗MCU上完成了离线语音识别和风扇FOC算法,同时还有多个单独的PWM通道为带灯光的产品提供PWM调光功能。多合一的方案在提供高质量语音识别功能的同时,也简化了客户的开发难度,缩短了上市时间,降低了采购及生产成本。

9.jpg

此次研讨会在密集的新知识新方案分享中结束了,澎湃微将更加坚定以科技服务社会的使命,用更好的产品和方案助力客户做出更高性能更低功耗更加智能的新产品。

PAI关于澎湃

澎湃微电子是一家以32位MCU为主营方向的集成电路设计公司(fabless),公司在上海设有研发中心,在深圳设有销售中心,总部设立在厦门。公司产品除了通用型MCU(32位/8位)之外,还有24位高精度ADC等模拟芯片。产品市场涵盖工业控制、消费电子、物联网、医疗健康、BLDC电机控制、小家电等领域。

公司拥有一支完整、经验丰富的国内MCU团队,公司高管及中层管理人员大多都在MCU领域有20年以上经验。公司技术团队拥有完整的数字、模拟、全流程设计能力,以及丰富的工控领域MCU设计、量产经验,成功量产过高品质、高可靠的工控MCU等相关产品。

来源:澎湃微电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 31

4月21日,由大比特主办的2023中国电机智造与创新应用暨电机产业链交流会在深圳登喜路国际大酒店顺利举行,航顺HK32MCU携HK32ASPIN MCU家族电机专用芯片以及市场热门BLDC方案产品亮相本次展会,正式从通用32位MCU进军专用32位MCU市场,沿着2018年制定的独特战略:通用/专用/定制化、车规级/工业/家电/超低能耗/消费类再次迈进!

近年来,随着电机智能化的持续发展,电机市场和应用需求的更加多样化和多元化,先进电机驱动与控制技术在各个领域的应用之广和发展速度之快,超出人们的预期。

1.png

本次会议以”创「芯」赋能 智造升级“为主题,汇聚了电机产业链的资深技术人员和行业专家,共同探讨目前电机产业的智能发展趋势和创新应用情况,分享独到的见解和前沿的产品、技术和解决方案。除精彩演讲外,此次研讨会还设置了展示区,航顺芯片现场展示了企业当前最具市场竞争力的先进的电机产品方案。展示产品涵盖电机驱动与控制芯片,主要应用场景包括高速吹风机、空气净化器、风扇灯、水泵、落地扇、跑步机、滑板车、电动工具等,内容精彩纷呈。

2.jpg

产品方案展台区

部分方案展示

3.jpg

高速吹风筒控制板

4.jpg

电剪刀控制板

5.jpg

跑步机控制板

6.png

高压风扇灯控制板

7.png

卧室风扇

航顺芯片针对市场需求,提早布局,在可靠性和应用领域不断突破与改进,推出高性价比电机专用芯片HK32ASPIN010x、HK32ASPIN020x、HK32M060x系列BLDC专用主控MCU。同时提供MCU应用+底层核心算法,给客户提供快速开发平台,并在专用领域提供整套解决方案。

8.jpg

航顺芯片电机算法经理Jason Zhu现场演讲

针对未来新兴市场,航顺芯片电机算法经理Jason Zhu发表“航顺电机MCU的BLDC热门技术应用创新与突破”主题演讲,现场和观众介绍公司目前的主要发展方向、HK32MCU产品线、公司未来的战略布局等,未来将持续丰富专用领域产品,并继续加大研发力度,贴近市场,针对细分领域推出更多高性价比的32位MCU和产品方案。

来源:航顺芯片

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 32

先楫半导体的高性能MCU芯片系列产品具高扩展性、高品质、高可靠性及寿命保障等特点,加上有软件保障、方案商生态保障以及服务经验优势,能够帮助工业领域应用的客户朋友们快速选型和方案落地。

目前,先楫高性能MCU芯片的方案能很好地服务于有工业、储能、汽车电子等应用需求的各类客户,赋能客户的创新,加速客户产品化的进程。下面一起来看看先楫半导体的产品方案在各个领域的应用案例。

01、电机控制

近年来,不管是工业自动化领域,还是汽车领域,抑或是生活家电领域,各个终端市场对电机性能都提出了更高的要求。它们不仅需要电机能够做到高效率和多功能控制,还需要电机在追求高转速的同时实现低噪音低振动的控制效果。在与日俱增的高标准性能要求下,高性能成了电机芯片竞争的关键。

具体来看,当前工业应用多轴伺服运动控制系统对响应时间、响应速度和稳定性等指标要求越来越高,传统四轴伺服运动控制系统多采用模块化方式集成,HMI+Ether CAT/NVUC等控制器+伺服驱动器(多个组成)的拓扑结构,所挂载的伺服驱动器越多,数据传输和处理越复杂,控制精度、实时性、同步性能也相应受限。

而通过使用超高性能的HPM6750芯片可实现HMI与四轴伺服运动控制,无需总线通信反馈与交互控制,片内完成所有数据采集、处理和显示,对伺服控制和四电机的同步控制效率大大提高,如下演示视频为通过UI交互下的四轴伺服电机运动。

02、高性能 RFID 控制板

该方案为基于HPM6450高性能MCU设计的核心板,以BTB的形式和底板连接。主板功能主要用到了串口、以太网和大量的GPIO。主要用于公司内部的智能柜,上面集成了RFID识别、高频IC卡识别、指静脉识别、串口屏、温湿度传感器、灯带、电子锁、状态指示灯等功能。原来这些模块全部是接在工控机上面,客户开发都得对接不同的模块每个模块协议不统一,客户开发工作量大本设计主要就是实现底层的串口通信,并在底层做一些基础工作,比如温湿度轮询,然后通过以太网和PC实现数据交互。

1.jpg

03、 汽车仪表

汽车液晶仪表是一种网络化、智能化的仪表,液晶屏幕取代了指针、数字等现有仪表盘上最具代表性的部分,能显示车辆的基本信息,此外,能显示导航地图、多媒体等功能,涡轮压力、油门开度、刹车力度等信息,可同网络、外设及其他应用相连接,汽车液晶仪表是目前最先进的汽车仪表,也是未来的发展方向与趋势。汽车液晶仪表具备应用优势,符合汽车智能化、电动化的发展趋势。

以下视频为大家呈现了先楫半导体基于HPM6750高性能RISC-V MCU开发的汽车仪表方案。这款10.1英寸的仪表显示屏的分辨率达1280x480,超过了60万像素。借助HPM6750的高性能CPU,以及独立自主知识产权的显示系统,包括8图层混合显示控制器,以及2D图形加速单元,成功实现了动态流畅的显示车辆行驶的各种关键信息,包括车辆的速度,发动机转速,油箱的状态等等,还包括了一些行驶的辅助信息,比如当前的时间,安全带的状态,转向灯信息等等。得益于HPM6750显示系统的卓越设计,显示屏局部的图层刷新可由硬件完成,限制降低CPU负荷,显示的刷新率超过了60帧每秒。本方案借助了立功科技研发的 AWTK Designer PC拖拽开发工具,快速实现复杂UI设计,在HPM微控制器多图层和PDMA的加持下,轻松实现流畅效果。

04、双千兆以太网透传应用

LED大屏显示系统利用发光二极管构成的点阵模块或像素单元组成大面积显示屏显示字符、图像等信息,具有低功耗、低成本、高亮度、长寿命、宽视角等优点,近年来随着LED显示技术的不断更新,广泛应用在各类媒体场合。

在LED大屏显示应用不断拓展的同时,大屏显示系统对刷新频率和延迟也提出了更严苛的要求:更高的刷新频率:刷新频率越高,显示的图像越稳定,眼睛感觉到疲劳可能性就越小;更低的延迟:整个数据链路的延迟进一步降低,减少闪屏或卡顿。

为确保LED大屏高刷新频率和低延迟,避免闪屏或卡顿的情况,就必须通过高速的链路来实时控制这些LED RGB灯。要实现更高刷新频率、更低延迟的LED大屏系统系统设计,主控芯片的选择非常关键。

HPM6750高性能MCU芯片可以有效满足LED大屏显示控制需求,该芯片支持2个以太网控制器ENET,支持标准以太网MAC,支持10/100/1000Mbps数据传输速率,支持RMII和RGMII模式的PHY,ENET以太网控制器自带DMA,因此在数据接收和发送上CPU负载为0。HPM6750通过以太网控制器,将两个PHY收到的以太网数据相互透传,透传速率达780Mb/s。基于高性能HPM6750的LED大屏显示方案在对实时控制要求极高的应用中丝毫不逊色于FPGA方案,不仅成本更低而且进一步降低了开发难度。

以下视频为大家呈现了,高性能HPM6750通过双千兆以太网透传的方案加双核加持完美解决高速的链路设计参考方案。

来源:我爱方案网

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 91

4月20日,雅特力正式推出AT32F423系列超值型Cortex®-M4F MCU,内建单精度浮点运算单元(FPU),支持多管脚及封装选择,具备高效能、高集成和高性价比等特点,为AT32家族超值型产品线又增添了一名生力军。AT32F423片上集成丰富外设资源,提供高速的数据传输及处理能力,聚焦超低预算开发需求,同时兼顾成本敏感及高性能需求的嵌入式应用。

1.png

AT32F423系列MCU最高主频为150MHz,提供多达256KB Flash和48KB SRAM,包含1个高阶外部储存器(XMC)扩展,兼容8080/6800模式作为LCD并口。且支持1个12位5.33Msps A/D转换器,多达24个外部输入通道,满足更多应用高速数据采集及处理要求,提高产品测量精度及系统监测与控制能力。

AT32F423系列集成了丰富的外设界面,除ADC外,还提供2个12位DAC、 8个USART、3个SPI/I2S、3个I2C、2个CAN、1个OTG控制器(设备模式支持无晶振Xtal-less)及多达87个GPIO还支持端口重映像功能,充份弹性配置I/O脚位和扩充功能,使开发人员灵活运用升级终端产品功能,且不占电路板空间或额外增加物料成本, 优于市场上同级芯片, 几乎以一颗芯片全面涵盖多元应用场域,及满足各种需要灵活的工业标准连接功能的应用需求,如HMI、工业控制、物联网、智能居家、扫地机器人、LED控制、避障模块、LiDAR激光测距、亳米波等。

AT32F423系列提供21个产品型号,最大支持LQFP100封装,满足复杂设计功能对多引脚应用,对应不同市场需求, 还有LQFP64, LQFP48, QFN48, QFN36, QFN32共6种封装类型供选择,且所有AT32 MCU产品在软件和引脚封装方面皆兼容,可协助开发人员随时升级产品和降低扩充项目成本,缩短设计周期。

2.png

雅特力不断构建完善的开发生态体系,提供全面性的开发工具平台,如AT-Link- Family编程调试工具等硬件资源,以及BSP标准库、ICP/ISP编程工具等软件资源,支持Keil, IAR, eclipse, RT-Thread Studio等IDE平台与RT-Thread OS, FreeRTOS及LittlevGL等OS/GUI平台。通过易用的软硬件工具,提升工程人员的开发体验和效能,降低入门使用门槛,并减少重复设置工作,加速开发效率。

在密码保护方面,AT32F423系列搭载雅特力自有开发的sLib安全库 (Security Library) ,支持密码保护指定范围程序区,方案商依需求烧录核心算法到指定范围程序区,有助于下游客户进行二次开发,具备高安全性和可靠性优势。

目前,AT32F423系列产品已经开始发送样片并预计在2023年5月正式投入量产供货。

来源:AT32 MCU 雅特力科技

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 12

4月19日灵动股份受邀参加了《第18届家电电源与智能控制技术研讨会》,并在会上向行业输送了一款极具竞争力的电机专用MCU——MM32SPIN0230系列。

1.jpg

技术研讨会汇报现场

随着现代生活的智能化程度不断提高,电机及控制相关的产品在现代生活中无处不在。据调研机构Statista的数据,全球智能家电的市场规模将从2022年的442.5亿美元成长到2026年的765.6亿美元。在国家构建内循环的大背景下,国内智能家电领域,尤其是电机控制的MCU产品,长期被国际大厂垄断,留给国产替代化的市场和空间巨大。公司作为一家本土32位MCU厂商,目前已专门设立了电机事业部,将致力于打造本土电机专用MCU及周边软硬件生态产品。本次研讨会,公司也释放了第二代电机专用MCU产品的全新规划。

2.png

MM32的第二代SPIN家族Roadmap

本次发布的MM32SPIN0230定位于单电机控制,主要针对高速吹风筒、冰箱压缩机、电动工具、风扇、静音吊扇、微型水泵、玩具类电调等应用市场。MM32SPIN0230内部集成了具有灵动特色的电机控制功能:高阶4路互补PWM、注入功能的高精度ADC、轨到轨运放、轮询比较器、32位针对霍尔传感器的捕获时钟、以及硬件除法器和DMA等电机算法加速引擎。同时发布的两款SOC产品,MM32SPIN030C和MM32SPIN080C内部更是集成了PN预驱、NN预驱、LDO等,使得应用者可以大幅度精简板级器件。

3.png

MM32SPIN0230的资源配置

4.png

MM32SPIN0230的特色资源

公司以“为客户提供易用的MCU”为使命,非常重视MCU生态的建设,新品MM32SPIN0230发布即配套有一套平台化的电机算法库,以及便捷的电机本体调机软件,提供众多热门电机应用的参考软硬件设计,相信大家上手一定更加容易。

5.png

MM32SPIN0230的控制算法调机生态

本次发布的MM32SPIN0230最低放价不到0.2美金。

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 11

2023年4月19日,开放原子开源基金会OpenHarmony开发者大会在北京石景山景园假日酒店成功举办。上海先楫半导体科技有限公司作为OpenHarmony生态体系内重要的芯片合作伙伴,受邀参与该次大会,并在大会论坛上分享了先楫高性能MCU搭载OpenHarmony系统在工业终端的应用。

1.jpg

OpenHarmony开源两年多,吸引了130多家伙伴、超过5100名开发者参与共建和贡献。而先楫半导体HPM6700系列高性能MCU通用开发板在2022年就率先合入OpenHarmony社区主干,助力该开源系统在工业控制、新能源等应用领域实现突破。

先楫半导体市场总监徐琦先生,在开发者大会上跟大家分享《先楫搭载OpenHarmony的高性能MCU在工业终端的应用》。

除了向到场的各位开发者详细介绍先楫高性能MCU产品的特性和适用领域之外,还重点介绍先楫高性能MCU搭载OpenHarmony系统在工业带屏显的网关、工业串口服务器、工业控制器、通信中继站设备以及车载多屏协同等领域的应用实例。

2.jpg

徐琦先生表示,“先楫半导体致力于高性能MCU芯片的开发,凭借自身的技术实力将国产MCU性能提高了一个台阶,在大量工业及汽车的应用领域打破了国外MCU垄断。

先楫一直秉承开放包容、合作共赢的理念,与OpenHarmony的结合既顺应了客户端的需求又以开源的方式让广大开发者更容易体验到国产高性能MCU产品,是个多方共赢的好事。

砥砺深耕,履践致远。未来先楫半导体将延续开放的理念,与OpenHarmony的适配也会更加丰富,让更多的应用落地。”

论坛结束后,大会主办方授予先楫半导体 “OpenHarmony生态芯片贡献单位” 的荣誉称号。

1681975042531167.jpg

先楫半导体是一家致力于高性能嵌入式解决方案的半导体公司,产品覆盖微控制器、微处理器和周边芯片,以及配套的开发工具和生态系统。OpenHarmony是面向全场景、全连接、全智能时代、基于开源的方式,是搭建一个智能终端设备操作系统的框架和平台。先楫高性能MCU搭载OpenHarmony系统,强强联手,为行业客户打造系列创新解决方案,赋能合作伙伴,为构建万物智联的生态系统贡献力量。

4.png

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 20

电池管理系统(BMS)通过监控电池的状态,智能化管理及维护各个电池单元,从而防止电池出现过充电和过放电。优质的电池管理系统能够最大限度地延长电池整体使用寿命,有效保障设备安全。

01、BMS电池管理概述

BMS,即电池管理系统(Battery Management System),随着锂电池的广泛应用,BMS作为锂电池的“保姆”也越来越被大众所关注。相较于传统电池,锂电池具有更好的能力密度,更高的工作电压,更低的放电率。但锂电池在面对过充、过放等问题时,相对脆弱。由于锂电池组在生产制造和使用过程中存在的差异性,会导致电池单体之间天然就存在着不一致性。这种不一致性主要表现在单体容量、内阻、自放电率、充放电效率等方面。单体的不一致,会进一步导致过充、过放等问题,进而造成电池寿命下降甚至死亡或损坏。

1.png

图1 | 容量不一致时充放电过程示意图

如图1所示,由于电池单体的差异,在充电时,低容量电池充电已饱和,而较大容量的电池电量未满,此时对于小容量单体来说,则处于过充状态。相反,放电时,较大容量的电池仍然处于放电状态,而小容量电池电量已空。有研究表明,单体电芯20%的容量差异,会带来超过40%的容量损失。

而BMS模块则是为避免该问题的出现而存在。BMS会实时监测单体的容量,并采用电池均衡手段来保证电池的正常工作。将不同容量的单体比作体积不同的水桶,而电池的电量好比是水桶中存留的水。充放电时,BMS会将快满的“水桶”里面的“水”转移到较空的“水桶”中,以此来保证整体电池电量的均衡,避免出现过充和过放的问题。如图2所示。

2.png

图2 | BMS电池均衡示意图

02、上海航芯BMS应用方案

上海航芯推出的BMS应用方案,采用ACM32F403/ACM32G103系列MCU作为主控芯片,最高工作频率可达180MHz/120MHz,内置最大512KB的eFlash和最大192KB SRAM,满足一般BMS算法库的需求。内置2Msps/3Msps采样率12位ADC,实现对电芯电压、电流、温度等信号的高频采样。具有USB/UART/CAN/SPI等多种通讯接口,足以应对大多数应用场合(如需要485通信的两轮电动车,需要CAN接口的新能源汽车等)。基于ACM32F403/ACM32G103的BMS方案结构示意图如下图所示:

3.png

图3 | BMS系统框图

ACM32F4/ACM32G1主控芯片,通过ADC对敏感信号进行采样,并依照BMS算法库计算得到当前电池的SOC、SOH等数据,执行均衡以及热管理控制,保证电池处于正常的工作状态。当出现问题时,支持在线警报同时给出LED指示信号。整个系统的运行参数可以通过CAN/USB/UART等接口进行上报。

来源:上海航芯

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 20
无AI,不终端。如今,AI向边缘下沉已成为大势所趋。想知道如何在嵌入式系统上快速部署AI应用?想知道如何将AI集成到MCU中?

STM32Cube.AI开发者云是ST为开发人员和数据专家提供一套业界首创的免费在线开发工具和服务,能够针对所有STM32生成优化AI。无需安装软件,无需主板。登录即可创建、优化神经网络并对其进行基准测试。
1.png

STM32Cube.AI开发者云取得多项行业突破

STM32Cube.AI开发者云取得多项行业首创:
✦ 在线图形用户界面:针对STM32 微控制器优化神经网络模型,并生成在STM32 微控制器上高效运行的模型C 代码,无需事先安装软件。得益于经过业界验证的STM32Cube.AI神经网络优化性能,数据科学家和开发人员可以轻松、快速开发边缘人工智能项目。
✦ STM32模型库:包含可训练的深度学习模型和演示应用代码,有助于加快应用项目开发。在工具发布时可用的用例包括人体活动识别跟踪运动感测、图像分类或物体检测计算机视觉、音频分类事件检测等。这些人工智能模型库托管在GitHub上,可以自动优化并生成在 STM32上高效运行的“Getting Start”软件包。
2.png

✦ 世界首个在线基准测试服务:在STM32板上评测边缘 AI 神经网络模型的性能。云端电路板库提供各种STM32电路板,板库定期更新,使数据科学家和开发人员能够用各种电路板远程测试模型优化后的实际性能。

高屋建瓴,开发流程只需4个步骤

STM32Cube.AI开发者云具有完整的在线接口(无需安装软件),真实STM32板上的远程基准测试工具(ST Board Farm)以及STM32 模型库,包含深度学习模型与训练脚本参考库。只需四个步骤即可将AI集成到MCU中:
第一步:加载预训练神经网络:上传自有模型或从STM32 Model Zoo中选择
第二步:优化与量化:获取复杂性和内存占用指标
第三步:设定基准:远程测量真实STM32板的推理时间
第四步:生成代码:下载STM32的AI代码
3.png

借助STM32Cube.AI开发者云加速应用开发,探索边缘AI全新可能性!点击这里,马上开启你的AI应用之旅吧!

来源:意法半导体中国

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 95

2023年4月19日,爱普特微电子受邀参加由大比特主办的第18届(顺德)家电电源与智能控制技术研讨会。

会议现场,爱普特副总经理袁永生发表了“爱普特全国产RISC-V内核MCU产品助力智能家电高质发展”主题演讲,与广大家电领域大咖及工程师们分享国产MCU如何助力智能家电电源与智能控制技术的国产创新及高质量发展。

1.jpg

演讲中袁总提到,爱普特自成立至今一直秉承“国产创新”理念,基于自主研发的全套微处理器IP库和RISC-V内核,已成功研发并量产了多个系列的全国产、高可靠的32位MCU,且对应系列产品凭借着工业级的芯片设计,高可靠、高抗干扰、超宽电压(1.8V-5.5V)等特性,同时搭配丰富的通讯接口与模拟外设,强大的定时器资源等,已经在智能家电、工业自动化、电机控制、新能源等领域批量出货,并得到了多家品牌客户的高度认可和好评。

与此同时,爱普特还与阿里巴巴平头哥一起打造了专业的集成开发环境-CDK。它以极简开发为理念,在不改变传统MCU应用开发习惯的基础上,全面接入云端开发资源,并结合图形化调试分析工具等,帮助爱普特客户提升研发效率,最快可实现1天上手,5天完成DEMO的开发,20天出原型。

2.jpg

爱普特将从技术、产品、生态、服务等全方面进行提升和突破,不断进行国产技术创新和产品的迭代升级,进一步加快新产品的推出,以资源更丰富、可靠性更高、更具有价格竞争优势的全国产32位MCU来助力智能家电产业的高质量发展。

来源:爱普特微电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 14

页面

订阅 RSS - MCU