亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
stm32 ---spi 總結
[打印本頁]
作者:
秦延雷
時間:
2017-12-20 17:29
標題:
stm32 ---spi 總結
本帖最后由 秦延雷 于 2017-12-20 17:31 編輯
一、概述
1.SPI通訊總線介紹
2.STM32F40xSPI模塊介紹
3.STM32F40xSPI模塊相關寄存器
4.W25Q64 Flah存儲芯片介紹
二、講解
1.SPI通訊總線介紹
1)SPI通訊協議概述
SPI是由MOTOROLA公司研發的串行外圍通訊設備接口,是一種高速的、全雙工、同步的通訊總線。
2)SPI通訊接口
SPIO通訊接口分為:五線制和四線制
①五線制:
a)MOSI:也稱為DO,作為主器件的時候為數據輸出,作為從器件的時候為數據輸入。
b)MISO:也稱為DI,作為主器件的時候為數據輸入,作為從器件的時候為數據輸出。
c)SCLK:時鐘信號線。由主器件產生。
d)NSS:也稱為CS,從器件使能信號。由主器件控制。
e)GND:公共地線
②四線制:
a)MOSI:雙向數據線(可收可發)
b)SCLK:時鐘信號線。由主器件產生。
c)NSS:也稱為CS,從器件使能信號。由主器件控制。
d)GND:公共地線
3)SPI通訊物理連接
4)SPI通訊原理
①NSS控制從器件是否被選中,也就是說當只有片選信號為預先規定的使能信號(高電平或者低電平)時,對從器件的操作才算有效。
②主器件在SCLK時鐘線上提供時鐘脈沖,MOSI或MISO則基于這個脈沖信號完成數據的傳輸。
③數據通過MOSI線,在時鐘的上升沿或者下降沿改變數據,在緊接著的下降沿或者上升沿被讀取。SPI通訊協議規定傳輸的數據為8位,傳輸順序是高位在前,低位在后。
④SPI總線是一個數據交換協議,主機給從機發送一個位的數據,從機必定會返回一個位的數據給主機。也就是說,主機想讀取從機的數據,需要先發一個位的數據給從機,從機才會回發一個位的數據給主機。
5)SPI總線數據傳輸方式
SPI一共有四種傳輸方式,四種方式的主要區別是總線空閑時SCLK的時鐘狀態以及數據采樣的時刻(上升沿、下降沿、前沿或者后沿)
SPI模式 時鐘極性(CPOL) 時鐘相位(CPHA) 時鐘空閑狀態 數據采集時刻
0 0 0 低電平 時鐘的奇數邊緣采集
1 0 1 低電平 時鐘的偶數邊緣采集
2 1 0 高電平 時鐘的奇數邊緣采集
3 1 1 高電平 時鐘的偶數邊緣采集
①時鐘相位(CPHA):決定了數據線上第1個數據的采集時刻。
a)CPHA = 0:MOSI或MISO數據線上的數據在串行時鐘線(SCLK)的奇數邊沿被采集。
b)CPHA = 1:MOSI或MISO數據線上的數據在串行時鐘線(SCLK)的偶數邊沿被采集。
②時鐘極性(CPOL):決定了SPI總線在空閑狀態時(SPI通訊開始之前),時鐘線的電平狀態。
a)CPOL = 0:串行同步時鐘總線(SCLK)的空閑狀態為低電平。
b)CPOL = 1:串行同步時鐘總線(SCLK)的空閑狀態為高電平。
2.STM32F40xSPI模塊介紹
1)STM32F40xSPI模塊概述
STM32F40x的SPI模塊支持兩個功能,分別為:SPI通訊總線協議以及IIS音頻協議,默認功能為SPI通訊總線協議功能。SPI通訊協議支持SPI四線制(半雙工)和五線制(全雙工)通訊模式。同時還可以配置成主機模式和從機模式以及多主機模式,還可以使用CRC校驗實現可靠通信。
2)STM32F40xSPI模塊主要特性
①由SPI模塊中的SCLK、MOSI以及MISO三線組成全雙工同步通信。
②支持SPI四線制同步半雙工通信
③支持數據傳輸字長為8位或16位
④可以設置成主機模式和從機模式(默認是從機模式)和多主機模式(在同一個時間內只能有1個主機在工作)
⑤可以對SPI的輸入時鐘源進行分頻,頻率最大值為(fpclk/2)
⑥NSS在主模式下為軟件管理,在從模式線為硬件管理
⑦可以設置數據的傳輸順序(先高還是先低)以及SPI的數據傳輸方式
⑧支持MOTOROL公司以及TI公司的SPI通訊協議
⑨SPI中斷源分別為:發送、接收、主模式錯誤、上溢錯誤、CRC錯誤
⑩支持DMA功能
3)SPI主機模式設置
①根據需要驅動的目標器件來確定SPI的傳輸速度比特率。
②根據需要驅動的目標器件來配置時鐘極性和相位(TI模式忽略此步)。
③根據需要驅動的目標器件來確定數據位長度。
④根據需要驅動的目標器件來配置數據的傳輸方式(TI模式忽略此步)。
⑤把NSS管腳設置位軟件管理模式
⑥選擇SPI通信協議格式
⑦把SPI配置位主機模式
⑧是SPI模塊
3.STM32F40xSPI模塊相關寄存器
1)SPI 控制寄存器 1 (SPI_CR1)
寄存器作用:設置SPI模塊工作模式
2)SPI 控制寄存器 2 (SPI_CR2)
寄存器作用:設置SPI模塊工作模式
3)SPI 狀態寄存器 (SPI_SR)
寄存器作用:檢測SPI具體相應功能的具體狀態。
4)SPI 數據寄存器 (SPI_DR)
寄存器作用:存放需要發送或接收的數據
4.W25Q64 Flah存儲芯片介紹
1)W25Q64 Flah芯片概述
W25Q64是一款具有SPI通信接口,大小為8M(Byte)的Flash芯片。W25Q64內部把8M大小的存儲空間分為128塊(Bolck),每塊大小為64K字節,而每塊又分為16個扇區(Sector),每個扇區大小為4K字節。每個扇區分為16頁,每頁256個字節。Flash內部數據只能有1變0,不能由0變1。
2)W25Q64管腳
①/CS:片選管腳,低電平有效。在執行一條新指令之前,必須要讓CS管腳先出現一個下降沿。
②DO(MISO):串行數據輸出管腳,在CLK管腳的下降沿輸出數據。
③/WP:寫保護管腳,低電平有效,高電平可讀可寫,低電平僅僅可讀。
④DI(MOSI):串行數據輸入管腳,在CLK管腳的上升沿捕獲數據。
⑤CLK:串行時鐘管腳,為輸入和輸出數據提供時鐘脈沖。
⑥/HOLD:保存管腳,有效電平為低電平。當/HOLD為低電,并且CS也為低電平時,數據輸出管腳將保持高阻態,同時會忽略數據輸出管腳以及時鐘管腳上的信號。把/HOLD管腳拉高,器件恢復正常工作。
3)W25Q64傳輸速度
W25Q64在標準模式下支持80Mbit/s;快速模式下支持160Mbit/s;高速模式下支持320Mbit/s
4)W25Q64數據傳輸
W25Q64支持模式0和模式3數據傳輸時序模式。數據傳輸的字長為8位,傳輸順序為先高再低。
5)W25Q64工作原理
通過SPI總線接口,用標準的SPI協議發送相應的指令給Flash,然后Flash根據命令執行各種相關操作。
5.SPI通信編程思路
1)配置SPI相應功能的GPIO管腳
2)使能SPI模塊時鐘
3)設置SPI模塊工作模式:按照SPI主機模式設置步驟設置
4)編寫SPI字節數據傳輸函數
#include "spi.h"
/********** SPI初始化函數**************
DO ----> PB4 復用模式
CLK ----> PB3 復用模式
DI ----> PB5 復用模式
***************************************/
void SPI_Init(void)
{
/* SPI引腳管腳配置 */
RCC->AHB1ENR |= 1 << 1; //使能 GPIOB外設時鐘
/* PB3(CLK)管腳配置 復用模式 */
/* 管腳模式配置 */
GPIOB->MODER &= ~(3 << (3 * 2)); //清零
GPIOB->MODER |= 2 << (3 * 2); //PB3配置為復用模式
/* 復用功能配置 */
GPIOB->AFR[0] &= ~(0x0f << (3 * 4)); //清零
GPIOB->AFR[0] |= 5 << (3 * 4); //PB3 復用選擇SPI_1
/* 輸出速率配置 */
GPIOB->OSPEEDR &= ~(3 << (3 * 2)); //清零
GPIOB->OSPEEDR |= 2 << (3 * 2); //輸出速率50M
/* PB4(DO)管腳配置 復用模式*/
/* 管腳模式配置 */
GPIOB->MODER &= ~(3 << (4 * 2)); //清零
GPIOB->MODER |= 2 << (4 * 2); //PB4配置為復用模式
/* 復用功能配置 */
GPIOB->AFR[0] &= ~(0x0f << (4 * 4)); //清零
GPIOB->AFR[0] |= 5 << (4 * 4); //PB4 復用選擇SPI_1
/* PB5(DI)管腳配置 復用模式 */
/* 管腳模式配置 */
GPIOB->MODER &= ~(3 << (5 * 2)); //清零
GPIOB->MODER |= 2 << (5 * 2); //PB5配置為復用模式
/* 復用功能配置 */
GPIOB->AFR[0] &= ~(0x0f << (5 * 4)); //清零
GPIOB->AFR[0] |= 5 << (5 * 4); //PB5 復用選擇SPI_1
/* 輸出速率配置 */
GPIOB->OSPEEDR &= ~(3 << (5 * 2)); //清零
GPIOB->OSPEEDR |= 2 << (5 * 2); //輸出速率50M
/* 使能SPI模塊時鐘 */
RCC->APB2ENR |= 1 << 12; //使能SPI_1時鐘
/* 設置SPI模塊工作模式 */
SPI1->CR1 &= ~(7 << 3); //SPI_1波特率42M
SPI1->CR1 &= ~(1 << 1); //SPI_1時序模式0
SPI1->CR1 &= ~(1 << 0);
SPI1->CR1 &= ~(1 << 11); //8位數據長度
SPI1->CR1 &= ~(1 << 7); //先發高位
SPI1->CR1 |= 1 << 9; //NSS軟件管理
SPI1->CR1 |= 1 << 8; //NSS內部狀態為高電平
SPI1->CR2 &= ~(1 << 4); //選擇MOTOROLA模式
SPI1->CR1 |= 1 << 2; //主機模式
/* 使能SPI */
SPI1->CR1 |= 1 << 6; //使能SPI_1
}
/********************** SPI數據傳輸函數 *********************************/
u16 SPI_Send_Read_Byte(u8 data)
{
u16 ErrTimer = 0;
/* 寫功能 */
while( !(SPI1->SR & (1 << 1)) )
{
ErrTimer++;
if(ErrTimer >= 0xfffe)
{
return 0;
}
}
SPI1->DR = data;
ErrTimer = 0;
/* 讀功能 */
while( !(SPI1->SR & (1 << 0)) )
{
ErrTimer++;
if(ErrTimer >= 0xfffe)
{
return 0;
}
}
return SPI1->DR;
}
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1