历史上的今天
返回首页

历史上的今天

今天是:2024年09月19日(星期四)

正在发生

2019年09月19日 | 第24章 SPI—读写串行FLASH—零死角玩转STM32-F429系列

2019-09-19 来源:eefocus

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》及《SPI总线协议介绍》。


若对SPI通讯协议不了解,可先阅读《SPI总线协议介绍》文档的内容学习。


关于FLASH存储器,请参考"常用存储器介绍"章节,实验中FLASH芯片的具体参数,请参考其规格书《W25Q128》来了解。


24.1 SPI协议简介

SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间,要求通讯速率较高的场合。


学习本章时,可与I2C章节对比阅读,体会两种通讯总线的差异以及EEPROM存储器与FLASH存储器的区别。下面我们分别对SPI协议的物理层及协议层进行讲解。


24.1.1 SPI物理层

SPI通讯设备之间的常用连接方式见图 241。

图 241 常见的SPI通讯系统


SPI通讯使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,片选线为,它们的作用介绍如下:


(1)     ( Slave Select):从设备选择信号线,常称为片选信号线,也称为NSS、CS,以下用NSS表示。当有多个SPI从设备与SPI主机相连时,设备的其它信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同只使用这3条总线;而每个从设备都有独立的这一条NSS信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而SPI协议中没有设备地址,它使用NSS信号线来寻址,当主机要选择从设备时,把该从设备的NSS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以NSS线置低电平为开始信号,以NSS线被拉高作为结束信号。


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


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


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


24.1.2 协议层

与I2C的类似,SPI协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。


1.    SPI基本通讯过程

先看看SPI通讯的通讯时序,见图 242。

图 242 SPI通讯时序


这是一个主机的通讯时序。NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。MOSI与MISO的信号只在NSS为低电平的时候才有效,在SCK的每个时钟周期MOSI和MISO传输一位数据。


以上通讯流程中包含的各个信号分解如下:


2.    通讯的起始和停止信号

在图 242中的标号处,NSS信号线由高变低,是SPI通讯的起始信号。NSS是每个从机各自独占的信号线,当从机检在自己的NSS线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。在图中的标号†处,NSS信号由低变高,是SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。


3.    数据有效性

SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时,MSB先行或LSB先行并没有作硬性规定,但要保证两个SPI通讯设备之间使用同样的协定,一般都会采用图 242中的MSB先行模式。


观察图中的‚ƒ„…标号处,MOSI及MISO的数据在SCK的上升沿期间变化输出,在SCK的下降沿时被采样。即在SCK的下降沿时刻,MOSI及MISO的数据有效,高电平时表示数据"1",为低电平时表示数据"0"。在其它时刻,数据无效,MOSI及MISO为下一次表示数据做准备。


SPI每次数据传输可以8位或16位为单位,每次传输的单位数不受限制。


4.    CPOL/CPHA及通讯模式

上面讲述的图 242中的时序只是SPI中的其中一种通讯模式,SPI一共有四种通讯模式,它们的主要区别是总线空闲时SCK的时钟状态以及数据采样时刻。为方便说明,在此引入"时钟极性CPOL"和"时钟相位CPHA"的概念。


时钟极性CPOL是指SPI通讯设备处于空闲状态时,SCK信号线的电平信号(即SPI通讯开始前、 NSS线为高电平时SCK的状态)。CPOL=0时, SCK在空闲状态时为低电平,CPOL=1时,则相反。


时钟相位CPHA是指数据的采样的时刻,当CPHA=0时,MOSI或MISO数据线上的信号将会在SCK时钟线的"奇数边沿"被采样。当CPHA=1时,数据线在SCK的"偶数边沿"采样。见图 243及图 244。

图 243 CPHA=0时的SPI通讯模式


我们来分析这个CPHA=0的时序图。首先,根据SCK在空闲状态时的电平,分为两种情况。SCK信号线在空闲状态为低电平时,CPOL=0;空闲状态为高电平时,CPOL=1。


无论CPOL=0还是=1,因为我们配置的时钟相位CPHA=0,在图中可以看到,采样时刻都是在SCK的奇数边沿。注意当CPOL=0的时候,时钟的奇数边沿是上升沿,而CPOL=1的时候,时钟的奇数边沿是下降沿。所以SPI的采样时刻不是由上升/下降沿决定的。MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,数据信号将在SCK奇数边沿时被采样,在非采样时刻,MOSI和MISO的有效信号才发生切换。


类似地,当CPHA=1时,不受CPOL的影响,数据信号在SCK的偶数边沿被采样,见图 244。

图 244 CPHA=1时的SPI通讯模式


由CPOL及CPHA的不同状态,SPI分成了四种模式,见表 241,主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用较多的是"模式0"与"模式3"。


表 241 SPI的四种模式

image.png?imageView2/2/w/550

24.2 STM32的SPI特性及架构

与I2C外设一样,STM32芯片也集成了专门用于SPI协议通讯的外设。


24.2.1 STM32的SPI外设简介

STM32的SPI外设可用作通讯的主机及从机,支持最高的SCK时钟频率为fpclk/2 (STM32F429型号的芯片默认fpclk1为90MHz,fpclk2为45MHz),完全支持SPI协议的4种模式,数据帧长度可设置为8位或16位,可设置数据MSB先行或LSB先行。它还支持双线全双工(前面小节说明的都是这种模式)、双线单向以及单线模式。其中双线单向模式可以同时使用MOSI及MISO数据线向一个方向传输数据,可以加快一倍的传输速度。而单线模式则可以减少硬件接线,当然这样速率会受到影响。我们只讲解双线全双工模式。


STM32的SPI外设还支持I2S功能,I2S功能是一种音频串行通讯协议,在我们以后讲解MP3播放器的章节中会进行介绍。


24.2.2 STM32的SPI架构剖析

图 245 SPI架构图


1.    通讯引脚

SPI的所有硬件架构都从图 245中左侧MOSI、MISO、SCK及NSS线展开的。STM32芯片有多个SPI外设,它们的SPI通讯信号引出到不同的GPIO引脚上,使用时必须配置到这些指定的引脚,见表 242。关于GPIO引脚的复用功能,可查阅《STM32F4xx规格书》,以它为准。


表 242 STM32F4xx的SPI引脚(整理自《STM32F4xx规格书》)

image.png?imageView2/2/w/550

其中SPI1、SPI4、SPI5、SPI6是APB2上的设备,最高通信速率达45Mbtis/s,SPI2、SPI3是APB1上的设备,最高通信速率为22.5Mbits/s。除了通讯速率,在其它功能上没有差异。


2.    时钟控制逻辑

SCK线的时钟信号,由波特率发生器根据"控制寄存器CR1"中的BR[0:2]位控制,该位是对fpclk时钟的分频因子,对fpclk的分频结果就是SCK引脚的输出时钟频率,计算方法见表 243。


表 243 BR位对fpclk的分频

image.png?imageView2/2/w/550

其中的fpclk频率是指SPI所在的APB总线频率,APB1为fpclk1,APB2为fpckl2。


通过配置"控制寄存器CR"的"CPOL位"及"CPHA"位可以把SPI设置成前面分析的4种SPI模式。


3.    数据控制逻辑

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


4.    整体控制逻辑

整体控制逻辑负责协调整个SPI外设,控制逻辑的工作模式根据我们配置的"控制寄存器(CR1/CR2)"的参数而改变,基本的控制参数包括前面提到的SPI模式、波特率、LSB先行、主从模式、单双向模式等等。在外设工作时,控制逻辑会根据外设的工作状态修改"状态寄存器(SR)",我们只要读取状态寄存器相关的寄存器位,就可以了解SPI的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生SPI中断信号、DMA请求及控制NSS信号线。


实际应用中,我们一般不使用STM32 SPI外设的标准NSS信号线,而是更简单地使用普通的GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。


24.2.3 通讯过程

STM32使用SPI外设通讯时,在通讯的不同阶段它会对"状态寄存器SR"的不同数据位写入参数,我们通过读取这些寄存器标志来了解通讯状态。


图 246中的是"主模式"流程,即STM32作为SPI通讯的主机端时的数据收发过程。

图 246 主发送器通讯过程


主模式收发流程及事件说明如下:


(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"中的数据。


24.3 SPI初始化结构体详解

跟其它外设一样,STM32标准库提供了SPI初始化结构体及初始化函数来配置SPI外设。初始化结构体及函数定义在库文件"stm32f4xx_spi.h"及"stm32f4xx_spi.c"中,编程时我们可以结合这两个文件内的注释使用或参考库帮助文档。了解初始化结构体后我们就能对SPI外设运用自如了,见代码清单 241。


代码清单 241 SPI初始化结构体


1 typedef struct


2 {


3 uint16_t SPI_Direction; /*设置SPI的单双向模式 */


4 uint16_t SPI_Mode; /*设置SPI的主/从机端模式 */


5 uint16_t SPI_DataSize; /*设置SPI的数据帧长度,可选8/16位 */


6 uint16_t SPI_CPOL; /*设置时钟极性CPOL,可选高/低电平*/


7 uint16_t SPI_CPHA; /*设置时钟相位,可选奇/偶数边沿采样 */


8 uint16_t SPI_NSS; /*设置NSS引脚由SPI硬件控制还是软件控制*/


9 uint16_t SPI_BaudRatePrescaler; /*设置时钟分频因子,fpclk/分频数=fSCK */


10 uint16_t SPI_FirstBit; /*设置MSB/LSB先行 */


11 uint16_t SPI_CRCPolynomial; /*设置CRC校验的表达式 */


12 } SPI_InitTypeDef;


这些结构体成员说明如下,其中括号内的文字是对应参数在STM32标准库中定义的宏:


(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的时序是由通讯中的主机产生的。若被配置为从机模式,STM32的SPI外设将接受外来的SCK信号。


(3)    SPI_DataSize


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


(4)    SPI_CPOL和SPI_CPHA


这两个成员配置SPI的时钟极性CPOL和时钟相位CPHA,这两个配置影响到SPI的通讯模式,关于CPOL和CPHA的说明参考前面"通讯模式"小节。


时钟极性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分频。


(7)    SPI_FirstBit


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


(8)    SPI_CRCPolynomial


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


配置完这些结构体成员后,我们要调用SPI_Init函数把这些参数写入到寄存器中,实现SPI的初始化,然后调用SPI_Cmd来使能SPI外设。


24.4 SPI—读写串行FLASH实验

FLSAH存储器又称闪存,它与EEPROM都是掉电后数据不丢失的存储器,但FLASH存储器容量普遍大于EEPROM,现在基本取代了它的地位。我们生活中常用的U盘、SD卡、SSD固态硬盘以及我们STM32芯片内部用于存储程序的设备,都是FLASH类型的存储器。在存储控制上,最主要的区别是FLASH芯片只能一大片一大片地擦写,而在"I2C章节"中我们了解到EEPROM可以单个字节擦写。


本小节以一种使用SPI通讯的串行FLASH存储芯片的读写实验为大家讲解STM32的SPI使用方法。实验中STM32的SPI外设采用主模式,通过查询事件的方式来确保正常通讯。


24.4.1 硬件设计

图 247 SPI串行FLASH硬件连接图


本实验板中的FLASH芯片(型号:W25Q128)是一种使用SPI通讯协议的NOR FLASH存储器,它的CS/CLK/DIO/DO引脚分别连接到了STM32对应的SDI引脚NSS/SCK/MOSI/MISO上,其中STM32的NSS引脚是一个普通的GPIO,不是SPI的专用NSS引脚,所以程序中我们要使用软件控制的方式。


FLASH芯片中还有WP和HOLD引脚。WP引脚可控制写保护功能,当该引脚为低电平时,禁止写入数据。我们直接接电源,不使用写保护功能。HOLD引脚可用于暂停通讯,该引脚为低电平时,通讯暂停,数据输出引脚输出高阻抗状态,时钟和数据输入引脚无效。我们直接接电源,不使用通讯暂停功能。


关于FLASH芯片的更多信息,可参考其数据手册《W25Q128》来了解。若您使用的实验板FLASH的型号或控制引脚不一样,只需根据我们的工程修改即可,程序的控制原理相同。


24.4.2 软件设计

为了使工程更加有条理,我们把读写FLASH相关的代码独立分开存储,方便以后移植。在"工程模板"之上新建"bsp_spi_flash.c"及"bsp_spi_ flash.h"文件,这些文件也可根据您的喜好命名,它们不属于STM32标准库的内容,是由我们自己根据应用需要编写的。


1.    编程要点

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


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


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


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


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


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


2.    代码分析

SPI硬件相关宏定义

我们把SPI硬件相关的配置都以宏的形式定义到"bsp_spi_ flash.h"文件中,见代码清单 242。


代码清单 242 SPI硬件配置相关的宏


1 //SPI号及时钟初始化函数


2 #define FLASH_SPI SPI3


3 #define FLASH_SPI_CLK RCC_APB1Periph_SPI3


4 #define FLASH_SPI_CLK_INIT RCC_APB1PeriphClockCmd


5 //SCK引脚


6 #define FLASH_SPI_SCK_PIN GPIO_Pin_3


7 #define FLASH_SPI_SCK_GPIO_PORT GPIOB


8 #define FLASH_SPI_SCK_GPIO_CLK RCC_AHB1Periph_GPIOB


9 #define FLASH_SPI_SCK_PINSOURCE GPIO_PinSource3


10 #define FLASH_SPI_SCK_AF GPIO_AF_SPI3


11 //MISO引脚


12 #define FLASH_SPI_MISO_PIN GPIO_Pin_4


13 #define FLASH_SPI_MISO_GPIO_PORT GPIOB


14 #define FLASH_SPI_MISO_GPIO_CLK RCC_AHB1Periph_GPIOB


15 #define FLASH_SPI_MISO_PINSOURCE GPIO_PinSource4


16 #define FLASH_SPI_MISO_AF GPIO_AF_SPI3


17 //MOSI引脚


18 #define FLASH_SPI_MOSI_PIN GPIO_Pin_5


19 #define FLASH_SPI_MOSI_GPIO_PORT GPIOB


20 #define FLASH_SPI_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOB


21 #define FLASH_SPI_MOSI_PINSOURCE GPIO_PinSource5


22 #define FLASH_SPI_MOSI_AF GPIO_AF_SPI3


23 //CS(NSS)引脚


24 #define FLASH_CS_PIN GPIO_Pin_8


25 #define FLASH_CS_GPIO_PORT GPIOI


26 #define FLASH_CS_GPIO_CLK RCC_AHB1Periph_GPIOI


27


28 //控制CS(NSS)引脚输出低电平


29 #define SPI_FLASH_CS_LOW() {FLASH_CS_GPIO_PORT->BSRRH=FLASH_CS_PIN;}


30 //控制CS(NSS)引脚输出高电平


31 #define SPI_FLASH_CS_HIGH() {FLASH_CS_GPIO_PORT->BSRRL=FLASH_CS_PIN;}


以上代码根据硬件连接,把与FLASH通讯使用的SPI号、引脚号、引脚源以及复用功能映射都以宏封装起来,并且定义了控制CS(NSS)引脚输出电平的宏,以便配置产生起始和停止信号时使用。


初始化SPI的 GPIO

利用上面的宏,编写SPI的初始化函数,见代码清单 243。


代码清单 243 SPI的初始化函数(GPIO初始化部分)


 1 

2 /**


3 * @brief SPI_FLASH初始化


4 * @param 无


5 * @retval 无


6 */


7 void SPI_FLASH_Init(void)


8 {


9 GPIO_InitTypeDef GPIO_InitStructure;

推荐阅读

史海拾趣

芯力微(CHI Power)公司的发展小趣事

面对日益激烈的市场竞争,芯力微不断推动创新,以应对市场的变化。在电源管理领域,公司不断研发新技术、新产品,以满足客户日益增长的需求。同时,芯力微还积极拓展新的应用领域,如物联网、汽车电子等,为公司的发展开辟了新的道路。这种持续的创新精神使得芯力微在电子行业中始终保持领先地位。

HellermannTyton公司的发展小趣事

进入21世纪后,Heimann Optoelectronics Gmbh意识到全球化合作的重要性。公司积极寻求与国际知名企业的合作机会,与美国一家领先的半导体制造商共同研发了新一代的光电集成芯片。这一合作不仅提升了产品的技术水平和市场竞争力,还借助合作伙伴的全球销售网络,将Heimann的产品迅速推向国际市场。同时,公司也在亚洲设立了研发中心和生产基地,进一步提升了生产效率和供应链管理能力。

Antenova公司的发展小趣事

随着业务的快速发展,Antenova公司积极拓展全球市场。公司在全球范围内设立了多个研发中心和销售网络,以便更好地服务客户并拓展市场份额。通过与全球知名企业的合作,Antenova的产品得到了广泛应用,进一步提升了公司的品牌影响力和市场竞争力。

Hitachi Chemical Co America Ltd公司的发展小趣事

Antenova公司在天线设计领域的创新是其迅速发展的关键因素之一。公司专注于研发高效率、低能耗、高可靠性的天线产品,以满足快速增长的物联网市场需求。通过不断的技术创新和产品升级,Antenova成功在智能家居、汽车、可穿戴设备等多个领域取得了显著的市场份额增长。

Block USA Inc.公司的发展小趣事

在发展过程中,Block USA Inc.也面临着来自竞争对手和行业变化的挑战。然而,公司始终保持着创新精神,不断调整和优化产品与服务,以适应市场的变化。例如,面对数据安全和隐私保护的日益严格要求,Block加强了其数据保护措施,并公开承认了数据泄露事件并积极采取措施进行补救。同时,公司还继续拓展其业务边界,探索新的增长点,以保持其在电子行业中的竞争优势。

这些故事只是Block USA Inc.在电子行业发展历程中的一部分,它们展示了公司如何通过不断创新和拓展业务领域,逐步成为一家具有影响力的综合性电子企业。然而,随着市场的不断变化和竞争的加剧,Block仍需保持警惕并持续努力,以应对未来的挑战和机遇。

Cotco公司的发展小趣事

在电子行业竞争日趋激烈的背景下,Cotco公司深知供应链管理和成本控制的重要性。公司与主要供应商建立了长期稳定的合作关系,确保原材料的稳定供应和成本控制。同时,Cotco不断优化生产流程和物流管理,降低生产成本和运营成本。这些举措使得Cotco的产品在价格上具有更强的竞争力,进一步巩固了其在市场上的地位。

问答坊 | AI 解惑

关于OpenGL ES

请问,要在自己的开发板的系统上加上OPENGL ES的代码,要从哪里入手?…

查看全部问答>

PCB问题

想做板子,想问一下 1、S3C2410能用双面板做吗? 2、S3C2440能用双面板做吗? 双面板比较便宜一些,请做过的朋友给解答一下。 …

查看全部问答>

[求助]关于多个单片机系统稳定的问题

小弟从事单片机时间不久 向大家请教 系统大概由20-30片单片机组成 可能都有超频 比它所允许的最高外部晶振高1倍不到(这里仅仅谈的是条件 不一定是原因 大家别被我误导了) 1.所有单片机上电连接的灯是要等500ms闪一次 当大家统一用外部晶振的时候 ...…

查看全部问答>

急!急!急!请教一个关于udp通信的问题

我想在一个多任务程序中用udp方式实现任务之间的通信,应该属于在本地机上实现通信,不知道怎么做啊,把ip设成一样的127.0.0.1就可以了吗?…

查看全部问答>

protel中创建PCB库文件的问题

我想在protel DXP创建PCB零件库,我想知道一个元件,你怎么知道他的实际尺寸与在电路板上画出来的尺寸一样呢,也就是说,我的PCB元件大小能对得上实际大小呢?…

查看全部问答>

使用PostThreadMessage在进程间传递消息的疑惑

在《multithreading applications in Win32》这本书中看到,可以使用PostThreadMessage函数把消息发给另一个进程,但是我在wince环境的实际使用过程中却发现没有效果。 代码如下: //进程base.exe创建进程son.exe PROCESS_INFORMATION pi; Crea ...…

查看全部问答>

请问版主:STM32的usb如何提高虚拟串口的波特率?

我希望让它以12Mbps狂奔! 呵呵 请教公主三个问题: 1、在pc的设备管理器里虚拟串口的波特率设置最高只能达到:115200  怎么提高? 2、如何在下位机设置虚拟串口的波特率? 3、 vcpdriver_v1.1_setup.exe 是干什么用的? 多次 ...…

查看全部问答>

【跟TI学电源】系列----将运算放大器用作比较器—此举可行吗?

     对于运算放大器、LM324、比较器、LM358、OPA244、OPA234、OPA2251,许多人偶尔会把运算放大器当比较器使用。一般而言,当您只需要一个简单的比较器,并且您在四运算放大器封装中还有一个“多余”运算放大器时,这种做法是 ...…

查看全部问答>

上个月申请样片终于成功了,结果这次又说是美国出口管制单位

昨天去模拟技术研讨会打酱油了一天,看中了几个芯片,想申请来玩玩,结果申请样片又被拒了,说是美国出口管制单位。 但我上个月成功申请过,也只有上个月成功过一次,以前都说是出口管制,因为学校有航空航天的东西。 为啥上个月能成功呢,不理解 ...…

查看全部问答>

51单片机密码锁显示问题,求各位大神高人指点,小弟不甚感激!!!

//主程序代码 /*--------------------------------------------------------------*/ #include #include \"LCD5510_V3.H\" #include \"matrixkeyscan.c\" uchar count;                    ...…

查看全部问答>