历史上的今天
返回首页

历史上的今天

今天是:2024年11月04日(星期一)

正在发生

2021年11月04日 | STM32F103ZET6 — SDIO (Mirco SDCard)

2021-11-04 来源:eefocus

1. SDIO 接口简述

SDIO 接口用于访问 MMC 卡,SD 存储卡或者 SDI/O 卡的接口标准。

这里要做的是 Micro SDCard,也就是 TF Card(存储卡)的操作。属于第二种。


本实验中使用的Micro SD卡属于SDSC(标准容量,最大两G)卡。介绍卡的种类是因为SD协议中的命令也支持这三种类型的卡,因此对STM32中的SDIO接口进行初始化后,上电后就要对接入的卡进行检测、分类,这个过程是通过向卡发送一系列不同的命令,根据卡不同的响应来进行分类。


2. Micro SD 卡

Micro SD 卡就是 TF Card 的意思,是小的 SD Card。一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分。存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;接口驱动器控制SD卡引脚的输入输出。

可以看到,卡对外交互的引脚有:


CLK:时钟线,由SDIO主机产生,即由STM32控制器输出;

CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;

D[0-3]:数据线,传输读写数据;SD卡可将D0拉低表示忙状态;

VDD、VSS1、VSS2:电源和地信号。

上述引脚定义了整个卡的传输模式:即,支持4线并行传输,数据同步传输,支持命令的交互。


虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独SD总线应该连接一个单独的SD卡,总线的结构为:

具体的硬件原理图如下所示:

测试用卡:某东上买的卡,品牌:Kingston,Micro SDHC,Class 10, 大小 16GB,直接插上卡座即可。


3. SD 协议

关于 SD Card 的所有协议定义,都遵循标准的 SD 组织定义的协议,参考:


《Physical Layer Simplified Specification V2.0》


协议中规定了物理层数据传送,Timing,频率,状态,寄存器等等。


3.1 传输特性

SD 总线通信是基于命令和数据传输的。通讯由一个起始位("0"),由一个停止位("1")终止。


数据传送 MSB,上升沿有效。


传输的时候,发送命令,仅仅使用 CMD 线,能够支持开启 4 线进行数据的发送和接收。


使用4数据线传输时,每次传输4bit数据,每根数据线都必须有起始位、终止位以及CRC位,CRC位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0线反馈给主机。


SD卡数据包有两种格式,一种是常规数据(8bit宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位

4线同步发送,每根线发送一个字节的其中两个位,数据位在四线顺序排列发送,DAT3数据线发较高位,DAT0数据线发较低位。


另外一种数据包发送格式是宽位数据包格式,对SD卡而言宽位数据包发送方式是针对SD卡SSR(SD状态)寄存器内容发送的,SSR寄存器总共有512bit,在主机发出ACMD13命令后SD卡将SSR寄存器内容通过DAT线发送给主机。

3.2 CMD&RSP 命令以及响应

3.2.1 CMD 命令包格式

SD 命令格式固定为 48bit,都是通过 CMD 线连续传输的(数据线不参与):

SD命令的组成如下:


    起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为0,终止位为1。


    传输标志:用于区分传输方向,该位为1时表示命令,方向为主机传输到SD卡,该位为0时表示响应,方向为SD卡传输到主机。


命令主体内容包括命令、地址信息/参数和CRC校验三个部分。


    命令号:它固定占用6bit,所以总共有64个命令(代号:CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于SD卡操作,只是专门用于MMC卡或者SD I/O卡。


    地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址。


    CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。


3.2.2 CMD 命令类型

SD命令有4种类型:


    无响应广播命令(bc),发送到所有卡,不返回任务响应;


    带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;


    寻址命令(ac),发送到选定卡,DAT线无数据传输;


    寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。


另外,SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令(ACMD)和常规命令(GEN_CMD)。要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前发送CMD55命令,告知SD卡接下来的命令为特定应用命令。CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。


任何的 ACMD 命令之前,都需要先发送 CMD55 命令,来标记此处将会发送一个 ACMD 命令。

3.2.3 CMD 命令交互

SD总线的基本交互是命令与响应交互,即,使用 CMD 线发送命令,然后接收来自 CMD 的 RSP(如果有响应的话):

SD数据是以块(Black)形式传输的,SDHC卡数据块长度一般为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来保证数据传输成功。CRC位由SD卡系统硬件生成。STM32控制器可以控制使用单线或4线传输,本开发板设计使用4线传输。


SD数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测SD卡忙状态,因为SD卡在接收到数据后编程到存储区过程需要一定操作时间。SD卡忙状态通过把D0线拉低表示。数据块读操作与之类似,只是无需忙状态检测。命令格式


3.2.4 CMD 命令描述

SD卡系统的命令被分为多个类,每个类支持一种"卡的功能设置"。下面列举了SD卡部分命令信息,更多详细信息可以参考SD简易规格文件说明,表中填充位和保留位都必须被设置为0。

image.png?imageView2/2/w/550

image.png?imageView2/2/w/550

image.png?imageView2/2/w/550

image.png?imageView2/2/w/550

3.2.5 RSP 命令的响应

响应由SD卡向主机发出,部分命令要求SD卡作出响应,这些响应多用于反馈SD卡的状态。SDIO总共有7个响应类型(代号:R1~R7),其中SD卡没有R4、R5类型响应。特定的命令对应有特定的响应类型,比如当主机发送CMD3命令时,可以得到响应R6。与命令一样,SD卡的响应也是通过CMD线连续传输的。根据响应内容大小可以分为短响应和长响应。短响应是 48bit 长度,只有R2类型是长响应,其长度为136bit。各个类型响应具体情况。


特别注意:除了R3类型之外,其他响应都使用CRC7校验来校验,对于R2类型是使用CID和CSD寄存器内部CRC7。

image.png?imageView2/2/w/550

image.png?imageView2/2/w/550

image.png?imageView2/2/w/550

Spec 中的描述为:

3.3 SD卡的模式

3.3.1 SD卡的操作模式

SD卡有多个版本,STM32控制器目前最高支持《Physical Layer Simplified Specification V2.0》定义的SD卡,STM32控制器对SD卡进行数据读写之前需要识别卡的种类:V1.0标准卡、V2.0标准卡、V2.0高容量卡或者不被识别卡。


SD卡系统(包括主机和SD卡)定义了两种操作模式:卡识别模式和数据传输模式。在系统复位后,主机处于卡识别模式,寻找总线上可用的SDIO设备;同时,SD卡也处于卡识别模式,直到被主机识别到,即当SD卡接收到SEND_RCA(CMD3)命令后,SD卡就会进入数据传输模式,而主机在总线上所有卡被识别后也进入数据传输模式。在每个操作模式下,SD卡都有几种状态,通过命令控制实现卡状态的切换。

image.png?imageView2/2/w/550

3.3.2 卡识别模式

在卡识别模式下,主机会复位所有处于"卡识别模式"的SD卡,确认其工作电压范围,识别SD卡类型,并且获取SD卡的相对地址(卡相对地址较短,便于寻址)。在卡识别过程中,要求SD卡工作在识别时钟频率FOD的状态下。卡识别模式下SD卡状态转换:

主机上电后,所有卡处于空闲状态,包括当前处于无效状态的卡。主机也可以发送GO_IDLE_STATE(CMD0)让所有卡软复位从而进入空闲状态,但当前处于无效状态的卡并不会复位。


主机在开始与卡通信前,需要先确定双方在互相支持的电压范围内。SD卡有一个电压支持范围,主机当前电压必须在该范围可能才能与卡正常通信。SEND_IF_COND(CMD8)命令就是用于验证卡接口操作条件的(主要是电压支持)。卡会根据命令的参数来检测操作条件匹配性,如果卡支持主机电压就产生响应,否则不响应。而主机则根据响应内容确定卡的电压匹配性。CMD8是SD卡标准V2.0版本才有的新命令,所以如果主机有接收到响应,可以判断卡为V2.0或更高版本SD卡。


SD_SEND_OP_COND(ACMD41)命令可以识别或拒绝不匹配它的电压范围的卡。ACMD41命令的VDD电压参数用于设置主机支持电压范围,卡响应会返回卡支持的电压范围。对于对CMD8有响应的卡,把ACMD41命令的HCS位设置为1,可以测试卡的容量类型,如果卡响应的CCS位为1说明为高容量SD卡,否则为标准卡。卡在响应ACMD41之后进入准备状态,不响应ACMD41的卡为不可用卡,进入无效状态。ACMD41是应用特定命令,发送该命令之前必须先发CMD55。


ALL_SEND_CID(CMD2)用来控制所有卡返回它们的卡识别号(CID),处于准备状态的卡在发送CID之后就进入识别状态。之后主机就发送SEND_RELATIVE_ADDR(CMD3)命令,让卡自己推荐一个相对地址(RCA)并响应命令。这个RCA是16bit地址,而CID是128bit地址,使用RCA简化通信。卡在接收到CMD3并发出响应后就进入数据传输模式,并处于待机状态,主机在获取所有卡RCA之后也进入数据传输模式。


3.3.3 数据传输模式

只有SD卡系统处于数据传输模式下才可以进行数据读写操作。数据传输模式下可以将主机SD时钟频率设置为FPP,默认最高为25MHz,频率切换可以通过CMD4命令来实现。数据传输模式下,SD卡状态转换过程:

CMD7用来选定和取消指定的卡,卡在待机状态下还不能进行数据通信,因为总线上可能有多个卡都是出于待机状态,必须选择一个RCA地址目标卡使其进入传输状态才可以进行数据通信。同时通过CMD7命令也可以让已经被选择的目标卡返回到待机状态。


数据传输模式下的数据通信都是主机和目标卡之间通过寻址命令点对点进行的。卡处于传输状态下可以使用表 362中面向块的读写以及擦除命令对卡进行数据读写、擦除。CMD12可以中断正在进行的数据通信,让卡返回到传输状态。CMD0和CMD15会中止任何数据编程操作,返回卡识别模式,这可能导致卡数据被损坏。


3.4 SD卡时钟频率

识别模式下的SD时钟需要在 400KHz,识别模式转成传送模式后,可以直接将频率提高到 24MHz


3.5 SD卡宽总线选择

启动上电默认进入识别模式,默认使用总线宽度为 1 bit,在进入传输模式后,可以先获取到卡的 SCR 寄存器,再在寄存器中找到对应的是否支持 4 bit 模式的标志位,最后使用 CMD55 + ACMD6 来告诉 SD Card 开启 4bit 模式传输。


3.6 SD 卡内部寄存器描述

image.png?imageView2/2/w/550

上述寄存器都是通过发送特定的指令进行访问的。


其中, CSD 寄存器表征 SD Card 的大小,Block Size,以及如果是 V2 一下的卡的话,是否支持 Block 内进行读写。


CSR 状态寄存器,返回的是卡当前的状态,能够用于区分当前卡是否正在 Programing 等等。


3.7 SD 卡读/写/擦除

3.7.1 SD 卡读

SD 卡的读,分为两种方式的读:


读一个 block:发送 CMD17 命令

读多个 block:发送 CMD18 命令,需要主动发送 CMD12 停止传送命令才会停止动作。

3.7.2 SD 卡写

写一个 block:发送 CMD24 命令

写多个 block:发送 CMD25 命令,需要主动发送 CMD12 停止传送命令才会停止动作。

与读不一样,写的话,数据到达 SD Card 侧的硬件 Buffer 后,需要一些时间进行内部的 Programme,此刻,对外就是一个 busy的状态:

这里需要注意的是,在 Spec 中描述:

在多块连续写入的时候,需要先去 pre-erase,即使用 CMD55+ACMD23 命令进行预擦除


3.7.3 SD 卡擦除

卡的擦除操作,顺序发送 CMD32(擦除的起始地址), CMD33(擦除的结束地址), CMD38(开始擦除)。


4. STM32F103ZTE6 的 SD 功能

SDIO包含2个部分:


● SDIO适配器模块:实现所有MMC/SD/SD I/O卡的相关功能,如时钟的产生、命令和数据的传送。

● AHB总线接口:操作SDIO适配器模块中的寄存器,并产生中断和 DMA 请求信号。

复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。


4.1 SDIO 适配器


4.2 SDIO 控制单元

控制单元负责电源管理和时钟分频管理。时钟部分,来自 AHB 的时钟。

4.3 SDIO 命令通道

命令通道单元向卡发送命令并从卡接收响应。

命令通道有对应的硬件状态机实现:


命令通道状态机(CPSM):当写入命令寄存器并设置了使能位,开始发送命令。命令发送完成时,命令通道状态机(CPSM)设置状态标志并在不需要响应时进入空闲状态(见下图)。当收到响应后,接收到的CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志。


当进入等待(Wait)状态时,命令定时器开始运行;当CPSM进入接收(Receive)状态之前,产生了超时,则设置超时标志并进入空闲(Idle)状态。


注意:命令超时固定为 64 个 SDIO_CK 时钟周期。


注意:CPSM 保持在空闲状态至少 8 个 SDIO_CK 周期,以满足 NCC 和 NRC 时序限制。 NCC 是两个主机命令间的最小间隔; NRC 是主机命令与卡响应之间的最小间隔。(这个是 Spec 的规定)


状态机如下:

4.4 SDIO 数据通道

数据通道子单元在主机与卡之间传输数据。下图是数据通道的框图。

在时钟控制寄存器中可以配置卡的数据总线宽度。如果选择了4位总线模式,则每个时钟周期四条数据信号线(SDIO_D[3:0])上将传输4位数据;如果选择了8位总线模式,则每个时钟周期八条数据信号线(SDIO_D[7:0])上将传输8位数据;如果没有选择宽总线模式,则每个时钟周期只在SDIO_D0上传输1位数据。

根据传输的方向(发送或接收),使能时数据通道状态机(DPSM)将进入Wait_S或Wait_R状态:

● 发送:DPSM进入Wait_S状态。如果发送FIFO中有数据,则DPSM进入发送状态,同时数据通道子单元开始向卡发送数据。

● 接收:DPSM进入Wait_R状态并等待开始位;当收到开始位时,DPSM进入接收状态,同时数据通道子单元开始从卡接收数据。


数据通道状态机(DPSM):DPSM工作在SDIO_CK频率,卡总线信号与SDIO_CK的上升沿同步。DPSM有6个状态,

4.5 数据FIFO

数据FIFO(先进先出)部件是一个数据缓冲器,带发送和接收单元。控制器的FIFO包含宽度为32bit、深度为32字的数据缓冲器和发送/接收逻辑。其中SDIO状态寄存器(SDIO_STA)的TXACT位用于指示当前正在发送数据,RXACT位指示当前正在接收数据,这两个位不可能同时为1。


    当TXACT为1时,可以通过APB2接口将数据写入到传输FIFO。


    当RXACT为1时,接收FIFO存放从数据路径部件接收到的数据。


根据FIFO空或满状态会把SDIO_STA寄存器位值1,并可以产生中断和DMA请求。


 


5. 代码流程

1. 配置 NVIC 控制器,开启 SDIO 中断


2. 配置 GPIO 口,复用推挽输出


3. 开启 SDIO/DMA2 模块时钟


4. 进入卡上电流程


5. 进入卡的初始化流程(识别),并转换到 Transfer 模式


6. 提高 SDCLK 的频率


7. 选择卡


8. 开启 4 bit 模式


 


5.1 识别模式代码

NVIC 和 GPIO ,SDIO 和 DMA2 的基础配置如下:


static void SK_SD_NVIC_Config(void)

{

    NVIC_InitTypeDef NVIC_InitStructure;

 

    /* Configure the NVIC Preemption Priority Bits */

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

 

    NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}

 

static void SK_SD_GPIOConfig(void)

{

    GPIO_InitTypeDef  GPIO_InitStructure;

    /*!< GPIOC and GPIOD Periph clock enable */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);

    

    /*!< Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_Init(GPIOC, &GPIO_InitStructure);

    

    /*!< Configure PD.02 CMD line */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_Init(GPIOD, &GPIO_InitStructure); 

}

 

static void SK_SDIO_Config(void)

{

    /*!< Enable the SDIO AHB Clock */

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);

    SDIO_DeInit();

}

 

static void SK_SDIO_DMA2Config(void)

{

    /*!< Enable the DMA2 Clock */

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

}

 


这里我将所有的命令CMD 和 回应 RSP的 检查全部封装成为函数的形式:


/************************** SD CMD Defination Start *********************************/

void SK_SdioSendCmd_0(void)

{

    SDIO_CmdInitTypeDef stSdioCmdInit;

 

    stSdioCmdInit.SDIO_Argument = 0x0;

    stSdioCmdInit.SDIO_CmdIndex = SD_CMD_GO_IDLE_STATE; //cmd0

    stSdioCmdInit.SDIO_Response = SDIO_Response_No;

    stSdioCmdInit.SDIO_Wait = SDIO_Wait_No;

    stSdioCmdInit.SDIO_CPSM = SDIO_CPSM_Enable;

    SDIO_SendCommand(&stSdioCmdInit);

}

 

void SK_SdioSendCmd_8(void)

{

    SDIO_CmdInitTypeDef stSdioCmdInit;

 

    stSdioCmdInit.SDIO_Argument = SD_CHECK_PATTERN;

    stSdioCmdInit.SDIO_CmdIndex = SDIO_SEND_IF_COND;  // cmd8

    stSdioCmdInit.SDIO_Response = SDIO_Response_Short;// Rsp = r7

    stSdioCmdInit.SDIO_Wait = SDIO_Wait_No;

    stSdioCmdInit.SDIO_CPSM = SDIO_CPSM_Enable;

    SDIO_SendCommand(&stSdioCmdInit);

}

 

void SK_SdioSendCmd_55(uint32_t rca)

{

    SDIO_CmdInitTypeDef stSdioCmdInit;

 

    stSdioCmdInit.SDIO_Argument = (uint32_t) rca << 16;

    stSdioCmdInit.SDIO_CmdIndex = SD_CMD_APP_CMD;

推荐阅读

史海拾趣

格莱尔(GLE)公司的发展小趣事

面对日益激烈的市场竞争,格莱尔积极推进数字化转型和智能化升级。公司引入了ERP、EHR、OA等信息化系统,实现了生产、管理、销售等各个环节的信息化和智能化。同时,格莱尔还加大了对自动化生产设备的投入和研发力度,提高了生产效率和产品质量。这些举措不仅提升了企业的竞争力,也为格莱尔在未来的发展中注入了新的动力。

CANOPUS公司的发展小趣事

随着业务的不断拓展,CANOPUS开始专注于鼓的制造研究。在1984年,公司推出了其标志性产品——整木掏空榉木军鼓。这款鼓的独特之处在于其鼓腔是由整个树干挖空处理而成,导角也做了特有的设计。这一创新使得CANOPUS的鼓在音质和外观上都与众不同,迅速在市场上获得了认可。

Captive Fastener公司的发展小趣事

随着全球市场的不断扩大,Captive Fastener公司意识到国际合作的重要性。公司积极寻求与国际知名电子制造商的合作机会,通过提供高质量的紧固件产品和技术支持,成功打入国际市场。同时,公司还与国外同行开展技术交流与合作,不断提升自身的技术水平和市场竞争力。

Axiomtek公司的发展小趣事

Captive Fastener公司在电子紧固件领域一直致力于技术创新。某年,公司研发团队成功开发出一种新型的自锁紧固件,这种紧固件能够在高振动环境下保持稳定的连接性能,极大地提高了电子设备的可靠性和耐久性。这一创新产品迅速获得了市场的认可,Captive Fastener公司因此获得了大量订单,实现了业务的快速增长。

Holt Integrated Circuits公司的发展小趣事

除了传统的航空电子解决方案外,Holt还致力于高压LCD显示驱动器的研发。这些产品不仅满足了航空电子设备对高可靠性和高清晰度的需求,还广泛应用于工业过程自动化和井下钻探等领域。Holt的高压LCD显示驱动器以其卓越的性能和稳定性,赢得了众多客户的信赖和好评。

Central Semiconductor公司的发展小趣事

在电子行业中,产品的更新换代速度极快,许多产品可能会因为技术更新或市场需求变化而停产。然而,Central Semiconductor却看到了其中的商机。公司根据客户需求,继续生产其他厂商已经停产的终老产品,以确保产品的持续供应和生命周期的延长。

这种对停产产品的支持不仅避免了客户因重新设计而带来的昂贵成本和时间消耗,也展现了Central对客户需求的深入理解和满足能力。这种服务模式不仅为Central赢得了客户的忠诚和信赖,也为公司在行业中树立了良好的口碑。

问答坊 | AI 解惑

用SPMC75F2313A实现LIN结点

1 引言    LIN 是低成本网络中的汽车通讯协议标准,LIN(Local Interconnect Network)是低成本的汽车网络,它是现有多种汽车网络在功能上的补充由于能够提高质量、降低成本,LIN 将是在汽车中使用汽 ...…

查看全部问答>

做个FDD接口的U盘如何?

昨日与友人闲谈,得知其急需一FDD接口的U盘.用于工控.遂发此贴,求助于诸位.提及FDD(即软驱),众皆笑曰:\"淘汰久矣!\"然,君不见其依然服役于众多工控场合?随之FPGA/RAM等先进技术之普及.待处理数据之大,昔日之1.44何以满足?市有产品曰:仿真软驱,价格奇 ...…

查看全部问答>

在Keil里出现Syntax error

在Keil里出现Syntax  error怎样解决…

查看全部问答>

应届生请教,WINCE嵌入式应用编程发展前景,请大家谈谈个人对现在工作的满意度?

想请教下wince、windows mobile编程方面的工作前景怎样呢》?高薪的可能性? 上次跟一个同学谈过,说这方面可能比较难拿到高薪 不知道大家的情况怎样呢?或者谈谈个人对现在工作的满意度? 下面介绍下我自己的基本情况 我是应届研究生,熟 ...…

查看全部问答>

老妪变少女,AMD暴笑视频

       偶然在网上看到了AMD的一个“我为三核狂”活动,整个活动的主旨都是围绕“三核”的概念来的,网友的热情和创意也是让人叹为观止,大家下面这些有趣的作品吧。简直是神了!大家也来欣赏一下哦      &n ...…

查看全部问答>

STM32系列芯片名称定义

每种STM32的产品都由16个字母或数字构成的编号标示,用户向ST订货时必须使用这个编号指定需要的产品。这16个字符分为8个部分,下面通过一个例子说明它们的意义:      STM32 F 103 C 6 T 7 xxx        1   2& ...…

查看全部问答>

mc1496

本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 这三个电解电容怎么连接,求高手指导  …

查看全部问答>

【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED1

【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED1材料:MSP430 LAUNCHPAD x 1LED1(P1.0)KEY(P1.3) 实验目的:让MSP430 LAUNCHPAD的P1.0 Y有按键S2控制亮灭原理图如下: 原理分析:为保持按键在没有按下时,P1.3引脚保持高电 ...…

查看全部问答>

红外光通信装置

13年全国大学生电子设计的题目,请问谁可以共享一下资料,能清晰的看清的那种哦,非常感谢。 …

查看全部问答>

CCS怎么使用STLINK

学校为了省钱,没有购买开发板,而是购买的芯片STLINK仿真器。有谁在CCS下用过stlink,在CCS的CONECTION选项下没有STlink,那个大神能否告知一下 …

查看全部问答>