娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月02日(星期一)

正在發生

2021年09月02日 | STM32—SPI詳解

發布者:素心悠遠 來源: eefocus關鍵字:STM32  SPI  通信協議 手機看文章 掃描二維碼
隨時隨地手機看文章

一.什么是SPI

SPI是串行外設接口(Serial Peripheral Interface)的縮寫,SPI是一種高速、全雙工、同步通信的通信總線,被廣泛應用在ADC、LCD等與MCU的通信過程中,特點就是快。


二.SPI協議

就像IIC、串口一樣,SPI也有其通信協議,我們一般按照分層的思想來學習SPI的協議,主要分為物理層和協議層。


物理層

首先看一下SPI通信設備之間的常用連接方式,主機和從機之間通過三條總線和片選線組成:

在這里插入圖片描述

NSS:片選設備線,每個從機都有自己的一條單獨的總線與主機連接,此總線的作用就是為主機選擇對應的從機進行傳輸數據,每個從機與主機之間的NSS總線互不相干。SPI中規定通信以NSS信號線拉低為開始,拉高為結束。

SCK:時鐘信號線,因為SPI是同步通信,所以需要一根時鐘信號線來統一主機和從機之間的數據傳輸,只有在有效的時鐘信號下才能正常傳輸數據,不同設備支持的最高傳輸頻率可能不一樣,在傳輸過程中傳輸頻率受限于低速的一方。

MOSI:(Master Output, Slave Input),顧名思義,MOSI就是主機輸出/從機輸入,因為SPI是全雙工的通信總線,即主機和從機可以同時收發數據,這樣的話就需要倆條線同時分別負責:主->從和從->主這倆條傳輸線路。而MOSI就專門負責主機向從機傳輸數據。

MISO:(Master Input,, Slave Output),與MOSI恰恰相反,MISO專門負責從機向主機傳輸數據。


協議層

和IIC一樣,SPI協議層規定了傳輸過程中的起始信號和停止信號、數據有效性、時鐘同步、通訊模式,接下來依據通訊時序圖來剖析協議層的內容。


1.通訊時序圖

如圖所示是SPI的一種通信模式下的時序圖:

在這里插入圖片描述

所有的運作都是基于SCK時鐘線的,SCK對于SPI的作用就像心臟對于人體的作用,SCK為低電平就代表心臟停止跳動。


2.起始和停止信號

前面物理層說過,SPI通訊的起始和停止由NSS信號線控制,當NSS為低電平時代表起始信號,當NSS為高電平時代表停止信號。時序圖中1和6部分代表起始信號和停止信號。


3.數據有效性

SPI中使用MOSI和MISO來進行全雙工傳輸數據,SCK來同步數據傳輸,即MOSI和MISO同時工作,在時鐘信號線SCK為有效時對MOSI、MISO數據線進行采樣,采到的信息即為傳輸的信息。IIC中通訊中的數據是在SCL總線為高電平時對數據采樣,SPI中數據的采樣是在SCK的上升沿或下降沿時進行的。圖示模式中3和5部分就是對數據進行采樣的時刻,可以看出圖示中數據是在SCK的下降沿進行采樣的。MOSI和MISO的高低電平代表了1和0。


4.通訊模式

SPI有四種通訊模式,他們的主要依靠總線空閑時SCK的時鐘狀態和數據采樣時刻來區別。這里就涉及到時鐘極性CPOL和時鐘相位CPHA的知識。

時鐘極性CPOL:CPOL是指NSS總線空閑時SCK的電平信號,如果SCK為高電平,CPOL=1;SCK為低電平,CPOL=0。下面的這種情況CPOL=0.

在這里插入圖片描述

時鐘相位CPHA:CPHA是指數據的采樣時刻,SCK的信號可以看作方波,CPHA=0時會在SCK的奇數邊沿采樣;CPHA=1時會在SCK的偶數邊沿采樣。

如圖:NSS空閑時SCK為低電平,而且在SCk的下降沿(也就是第二個邊沿)采樣,所以這種通訊模式下CPOL=0,CPHA=1.

在這里插入圖片描述

四種通訊模式:所以,根據CPOL和CPHA的搭配可以得出四種不同的通訊模式,如下:

在這里插入圖片描述

三.STM32中的SPI

簡介

STM32中集成了專門用于SPI通訊的外設。支持最高的 SCK 時鐘頻率為 fpclk/2

(STM32F103 型號的芯片默認 fpclk1為 72MHz, fpclk2為 36MHz),完全支持 SPI 協議的 4 種模式,數據幀長度可設置為 8 位或 16 位,可設置數據 MSB 先行或 LSB 先行。它還支持雙線全雙工、雙線單向以及單線模式。其中雙線單向模式可以同時使用 MOSI 及 MISO 數據線向一個方向傳輸數據,可以加快一倍的傳輸速度。而單線模式則可以減少硬件接線,當然這樣速率會受到影響。


功能框圖

在這里插入圖片描述

STM32中SPI外設的功能框圖可以大體分為四部分,對應的1、2、3、4分別是:通訊引腳、時鐘控制邏輯、數據控制邏輯、整體控制邏輯,下面進行一一分析。


1.通訊引腳

STM32中有多個SPI外設,這些SPI的MOSI、MISO、SCK、NSS都有對應的引腳,在使用相應的SPI時必須配置這些對應的引腳,STM32中的三個SPI外設的引腳分布情況如下:

在這里插入圖片描述

根據他們的引腳分布知道SPI1是掛載在APB2總線上的,SPI2和SPI3掛載在APB1總線上,這掛載在不同的總線上的主要區別就是,APB1和APB2總線的時鐘頻率不同,導致三個SPI的通訊速率收到總線時鐘頻率的影響。而且SPI3的引腳的默認功能是下載,如果要使用SPI3,必須禁用這幾個口的下載功能。


2.時鐘控制邏輯

這一塊的內容主要是配置SCK的時鐘頻率和SPI的通訊模式(CPOL和CPHA)。

時鐘頻率的配置:

波特率發生器通過控制“控制寄存器CR1”中的BR[2:0]三個位來配置fpclk的分頻因子,對fpclk分頻后的頻率就是SCK的時鐘頻率,具體配置如下圖所示:

在這里插入圖片描述

(PS:fpclk為對應SPI掛載總線的時鐘頻率)

通訊模式的配置:

通過配置“控制寄存器CR”中的CPOL位和CPHA位將通訊模式配置為上文所說的四種模式之一。


3.數據控制邏輯

這部分主要控制數據的接收和發送以及數據幀格式和MSB/LSB先行,和串口通訊類似,SPI的收發數據也是通過緩沖區和移位寄存器來實現的。MOSI和MISO都與移位寄存器相連以便傳輸數據,下面具體說明一下主機發送數據和接收數據的流程。當發送完一幀數據的時候,“狀態寄存器 SR”中的“TXE 標志位”會被置 1,表

示傳輸完一幀,發送緩沖區已空;類似地,當接收完一幀數據的時候,“ RXNE

標志位”會被置 1,表示傳輸完一幀,接收緩沖區非空;

發送數據:

地址和數據總線會在相應的地址上取到要發送的數據,將數據放入發送緩沖區,當向外發送數據時,移位寄存器會以發送緩沖區為數據源,一位一位的將數據發送出去。

接收數據:

接收數據時,移位寄存器把數據線采樣到的數據一位一位的傳到接收緩沖區,再由總線讀取接收緩沖區中的數據。

數據幀格式:

通過配置“控制寄存器CR1”的“DFF為”可以控制數據幀格式為8位還是16位,即一次接收或發送數據的大小。

先行位:

通過配置“控制寄存器CR1”的“LSBFIRST 位”可選擇 MSB(最高有效位) 先行還是 LSB(最低有效位) 先行。


4.整體邏輯控制

在外設工作時,控制邏輯會根據外設的工作狀態修改“狀態寄存器(SR)”,我們只要讀取狀態寄存器相關的寄存器位,就可以了解 SPI 的工作狀態了。除此之外,控制邏輯還根據要求,負責控制產生 SPI 中斷信號、DMA 請求及控制NSS 信號線,不過NSS信號線我們時一般是連接GPIO口,通過軟件來控制電平輸出,從而產生起始信號和停止信號。


初始化結構體

庫函數編程中幾乎每一個外設的靈魂部分就是其初始化結構體了,初始化結構體中包含了外設運作的狀態、工作模式、對象等重要信息,配置好初始化結構體后,通過初始化函數將初始化結構體中的信息寫入相應的寄存器中。SPI外設的初始化結構體如下:


typedef struct

 {

 uint16_t SPI_Direction; /*設置 SPI 的單雙向模式 */

 uint16_t SPI_Mode; /*設置 SPI 的主/從機端模式 */

 uint16_t SPI_DataSize; /*設置 SPI 的數據幀長度,可選 8/16 位 */

 uint16_t SPI_CPOL; /*設置時鐘極性 CPOL,可選高/低電平*/

 uint16_t SPI_CPHA; /*設置時鐘相位,可選奇/偶數邊沿采樣 */

 uint16_t SPI_NSS; /*設置 NSS 引腳由 SPI 硬件控制還是軟件控制*/

 uint16_t SPI_BaudRatePrescaler; /*設置時鐘分頻因子, fpclk/分頻數=fSCK */

 uint16_t SPI_FirstBit; /*設置 MSB/LSB 先行 */

 uint16_t SPI_CRCPolynomial; /*設置 CRC 校驗的表達式 */

 } 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 成員,可設置為高電平(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 的值。


初始配置函數

void SPI_Config(void)

{

/* 初始化SPI和相對應的GPIO口 */

SPI_InitTypeDef  SPI_InitStruct;

GPIO_InitTypeDef GPIO_InitStruct;

/* 打開SPI1和GPIOA的時鐘 */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA, ENABLE);

/* 將NSS配置為普通推挽模式 SCK、MISO、MOSI配置為復用推挽模式 */

GPIO_InitStruct.GPIO_Mode = SPI_SCK_GPIO_MODE;

GPIO_InitStruct.GPIO_Pin = SPI_SCK_GPIO_PIN;

GPIO_InitStruct.GPIO_Speed = SPI_SCK_GPIO_SPEED;

GPIO_Init(SPI_SCK_GPIO_PORT, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = SPI_MOSI_GPIO_MODE;

GPIO_InitStruct.GPIO_Pin = SPI_MOSI_GPIO_PIN;

GPIO_InitStruct.GPIO_Speed = SPI_MOSI_GPIO_SPEED;

GPIO_Init(SPI_MOSI_GPIO_PORT, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = SPI_MISO_GPIO_MODE;

GPIO_InitStruct.GPIO_Pin = SPI_MISO_GPIO_PIN;

GPIO_InitStruct.GPIO_Speed = SPI_MISO_GPIO_SPEED;

GPIO_Init(SPI_MISO_GPIO_PORT, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = SPI_NSS_GPIO_MODE;

GPIO_InitStruct.GPIO_Pin = SPI_NSS_GPIO_PIN;

GPIO_InitStruct.GPIO_Speed = SPI_NSS_GPIO_SPEED;

GPIO_Init(SPI_NSS_GPIO_PORT, &GPIO_InitStruct);

/* 配置SPI為四分頻、SCK空閑高電平、偶數邊沿采樣、8位數據幀、MSB先行、軟件NSS、雙線全雙工模式,SPI外設為主機端 */

SPI_InitStruct.SPI_BaudRatePrescaler = SPIx_BaudRatePrescaler;

SPI_InitStruct.SPI_CPHA = SPIx_CPHA;

SPI_InitStruct.SPI_CPOL = SPIx_CPOL;

SPI_InitStruct.SPI_CRCPolynomial = SPIx_CRCPolynomial;

SPI_InitStruct.SPI_DataSize = SPIx_DataSize;

SPI_InitStruct.SPI_Direction = SPIx_Direction;

SPI_InitStruct.SPI_FirstBit = SPIx_FirstBit;

SPI_InitStruct.SPI_Mode = SPIx_Mode;

SPI_InitStruct.SPI_NSS = SPIx_NSS;

/* 將SPI外設配置信息寫入寄存器,并且使能SPI外設 */

SPI_Init(SPIx, &SPI_InitStruct);

SPI_Cmd(SPIx, ENABLE);

/* 拉高NSS */

SPI_NSS_Stop();

}


}


這段代碼中,把 STM32 的== SPI 外設配置為主機端,雙線全雙工模式,數據幀長度為 8位,使用 SPI 模式 3(CPOL=1, CPHA=1), NSS 引腳由軟件控制以及 MSB 先行模式。 代碼中把 SPI 的時鐘頻率配置成了 4 分頻==。 最后一個成員為 CRC 計算式,由于我們不需要 CRC 校驗,并沒有使能 SPI 的 CRC 功能,這時 CRC 計算式的成員值是無效的。賦值結束后調用庫函數 SPI_Init 把這些配置寫入寄存器,并調用 SPI_Cmd 數使能外設。


發送、接收一個字節

/* 發送一個幀數據,同時接收一個幀數據 */

uint8_t SPI_SendData( uint8_t data)

{

uint16_t timeout=0x2710;   //10,000

while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET) //寄存器的狀態讀取可以隨時就行,這個不受SPI是否在傳輸數據的影響

if((timeout--)==0) return printf("發送等待失敗!n");


SPI_I2S_SendData(SPIx, data);

timeout=0x2710;          //10,000次循環無果后為失敗

while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET)

if((timeout--)==0) return printf("接收等待失敗!n");

return SPI_I2S_ReceiveData(SPIx);

}


/* 讀取一個幀數據 */

uint16_t SPI_ReadData(void)

{

return SPI_SendData( 1);//此時發送的值可以為任意值

}


發送數據前要等待發送緩沖區為空,靠TXE標志判斷,所以開始的while循環是等待發送緩沖區為空,同時,等待接收緩沖區是否有數據,靠RXNE標志來判斷,把接收緩沖區的數據作為返回值返回。由于發送和接收是同時進行的,而且要接收一個數據時必須在有效的SCK下,而只有發送數據才能產生有效的SCK,所以接收數據的函數時在發送數據的函數的基礎上,將發送的數據設置為Dummy_Byte假數據來騙取有效的SCK。


頭文件

#ifndef __SPI_H

#define __SPI_H


#include "stm32f10x.h"


#define SPIx                        SPI1

#define SPI_Clock                   RCC_APB2Periph_SPI1

#define SPI_GPIO_Clock              RCC_APB2Periph_GPIOA


/* SCK/MOSI/MISO都配置為復用推挽輸出,NSS由軟件控制配置為普通的推挽輸出 */

#define SPI_SCK_GPIO_PORT           GPIOA

#define SPI_SCK_GPIO_MODE           GPIO_Mode_AF_PP

#define SPI_SCK_GPIO_SPEED          GPIO_Speed_50MHz

#define SPI_SCK_GPIO_PIN            GPIO_Pin_5


#define SPI_MOSI_GPIO_PORT          GPIOA

#define SPI_MOSI_GPIO_MODE          GPIO_Mode_AF_PP

#define SPI_MOSI_GPIO_SPEED         GPIO_Speed_50MHz

#define SPI_MOSI_GPIO_PIN           GPIO_Pin_7


#define SPI_MISO_GPIO_PORT          GPIOA

#define SPI_MISO_GPIO_MODE          GPIO_Mode_AF_PP

#define SPI_MISO_GPIO_SPEED         GPIO_Speed_50MHz

#define SPI_MISO_GPIO_PIN           GPIO_Pin_6


#define SPI_NSS_GPIO_PORT          GPIOA

#define SPI_NSS_GPIO_MODE          GPIO_Mode_Out_PP

#define SPI_NSS_GPIO_SPEED         GPIO_Speed_50MHz

#define SPI_NSS_GPIO_PIN           GPIO_Pin_4         //因為串行FLASH的CS引腳是PA4,SPI的NSS要和串行的一致


/* 配置SPI信息 */

#define SPIx_BaudRatePrescaler     SPI_BaudRatePrescaler_4//四分頻,SPI1掛載在APB2上,四分頻后波特率為18MHz

#define SPIx_CPHA                  SPI_CPHA_2Edge//偶數邊沿采樣

#define SPIx_CPOL                  SPI_CPOL_High//空閑時SCK高電平

#define SPIx_CRCPolynomial         7//不使用CRC功能,所以無所謂

#define SPIx_DataSize              SPI_DataSize_8b//數據幀格式為8位

#define SPIx_Direction             SPI_Direction_2Lines_FullDuplex

#define SPIx_FirstBit              SPI_FirstBit_MSB//高位先行

#define SPIx_Mode                  SPI_Mode_Master//主機模式

#define SPIx_NSS                   SPI_NSS_Soft//軟件模擬


/***************************************************************************************/

[1] [2]
關鍵字:STM32  SPI  通信協議 引用地址:STM32—SPI詳解

上一篇:STM32—DMA存儲器到外設
下一篇:STM32—SPI讀寫FLASH

推薦閱讀

一、can通信CAN 是Controller Area Network 的縮寫(以下稱為CAN),是ISO國際標準化的串行通信協議。 CAN協議是通過以下5種類型的幀進行的: l 數據幀 l 搖控幀 l 錯誤幀 l 過載幀 l 幀間隔 另外,數據幀和遙控幀有標準格式和擴展格式兩種格式。標準格式有11 個位的標識符(ID),擴展格式有29 個位的ID。大部分系統使用的都是數據幀 ,我這...
在如今的電氣化浪潮下,各大車企爭相推出“觸電”或純電動產品,不過結合消費者用車場景,無論是PHEV還是EV車型,都存在對充電設施的依賴或里程焦慮,而在節能減排的大背景下,既迎合發展趨勢,也強調用戶體驗的便是油電混合動力車型。在該細分市場中,最具代表性的當屬東風本田INSPIRE和CR-V的銳·混動車型,及其搭載的本田第三代i-MMD混動系統。除了相比...
序言最近幾年隨著多Gbps傳輸的普及,數字通信標準的比特率也在迅速提升。例如, USB 3.0的比特率達到 5 Gbps。比特率的提高使得在傳統數字系統中不曾見過的問題顯現了出來。諸如反射和損耗的問題會造成數字信號失真,導致出現誤碼。另外由于保證器件正確工作的可接受時間裕量不斷減少,信號路徑上的時序偏差問題變得非常重要。雜散電容所產生的輻射電...
近期,調研機構Interact Analysis的預測顯示,預計到2024年,全球將有超過百萬臺履約型AMR在倉庫“就職”,在增量市場的促進之下,AMR有望從小眾走向主流。而物流機器人目前的行業走向,確確實實在不斷印證著這一趨勢。物流機器人,廠青睞得大今年8月末,Syrius炬星宣布完成由字節跳動領頭的B輪融資,金額超過2000萬美元,這是字節跳動一年多來投資的第四...

史海拾趣

問答坊 | AI 解惑

FPGA中DSP slice

請問 怎樣使用Xilinx virtex系列器件內嵌的dsp slice? 高手指教,謝謝!…

查看全部問答∨

求 PCB LAYOUT 兼職

我在深圳一家公司做PCB設計工程師,已有近6年PCB設計經驗,大學本科。包括通信設備(1萬到2萬PIN的PCB)、     終端設備(無線路由器、貓等)。通信設備一般是8到16層PCB,終端設備一般在2到6層的PCB。        & ...…

查看全部問答∨

電腦會閑出病嗎?

    一位同事出差半個月回到家,電腦卻打不開了,他把電腦搬到我的維修間來檢查,我先把機箱拆開,把板卡和內存條拔出來重新插進去,然后接上電源開機試驗,看到電腦風扇呼呼地轉動起來,顯示屏上出現了正常的自檢畫面,不一會兒,藍天白 ...…

查看全部問答∨

問一下有關千兆以太網 auto-negotiation的問題

系統是X86的,目標機是標準PC板,上面加載的是兩個82546網卡,以前在82541下能夠驅動網卡正常工作,但是現在換成82546卻出現miiPhy方面的問題 目前跟代碼發現是在運行miiAutoNegotiation時出現的問題,想請問各位達人。 關于如何在GMII下配置自動 ...…

查看全部問答∨

求助。。我的SST89E516RD無法在線仿真!

RT 芯片是:SST89E516RD 開發板是從網上買的 軟件是KEIL 3 監控程序也已燒進去了 USB線試過,不行 串口線也試過,不行 COM口換了幾個,不行 波特率換了幾個,不行 開發板驅動重裝了,不行 換同學電腦試了,不行 按網上搜集到的資料把 ...…

查看全部問答∨

請問怎么樣把UCGUI加載到編譯器中呢?請高手指點一下。

我看了一篇《ucos II+ucGUI+s3c2410+LCD+觸摸屏整合》后知道移植UCGUI需要修改的地方,但我不知道怎么樣把UCGUI加載到編譯器中呢?請高手指點一下。 …

查看全部問答∨

最近用PB編譯的時候總是出現nmake.exe出錯

重裝了N次PB,然后又重裝了N次系統,問題依舊。我頂他個肺,快崩潰了。 nmake.exe遇到問題需要關閉  哪位有解決辦法?…

查看全部問答∨

vc++的.dll和 evc的.dll能通用嗎

vc++的.dll里沒有 用xp 庫函數,能否 拿到  evc下直接使用呢? 想省點事 ,這樣可行嗎?…

查看全部問答∨

有網友問模擬時鐘程序

呵呵 不好意思 今天在看到上個月有網友在我的貼里問我的點陣模擬時鐘程序是不是lpc1114,其實呢這個是lpc2148 的 是我畢業論文的一部分,其實的我的論文老師也要我發這個程序,等我整理好了發給我老師的時候如果網友還 有感興趣的,我再順便上傳一 ...…

查看全部問答∨

C語言編程

在用C編程時,如何編寫自己的頭文件???這其中有哪些要求????頭文件的存儲位置有特殊要求嗎???新手求指導…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 天台县| 喀喇沁旗| 宜都市| 永顺县| 肇东市| 阜平县| 遂溪县| 昌图县| 汤阴县| 姚安县| 洮南市| 宜宾县| 屏东县| 都江堰市| 清流县| 青海省| 嘉兴市| 巫山县| 汽车| 密山市| 巧家县| 于田县| 石林| 金坛市| 古丈县| 丘北县| 库车县| 吴旗县| 保亭| 手游| 洪洞县| 鄂托克前旗| 榆林市| 子长县| 宜州市| 巴塘县| 永川市| 湘阴县| 广昌县| 安福县| 嘉善县|