久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2337|回復: 0
打印 上一主題 下一主題
收起左側

STM32 SPI總線介紹

[復制鏈接]
跳轉到指定樓層
樓主
ID:327671 發表于 2019-11-24 20:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
SPI總線 速度比IIC快
SCK信號時鐘線
MOSI為主輸出從輸入
MISO為主輸入從輸出
SS片選信號線(也稱NSS、CS),每個信號單獨使用一根
SPI協議中沒有設備地址,SS信號為低時選中設別,SS信號為高時作為結束信號。
數據傳輸分為高位先行和低位先行

CPOL及CPHA的不同狀態,SPI分為四種模式,主機與從機需要工作在相同的模式下才可以正常通訊,實際中采用較多的是“模式0”與“模式3”.

SPI模式    CPOL    CPHA     空閑時SCK時鐘     采樣時刻
  0         0       0          低電平         奇數邊沿
  1         0       1          低電平         偶數邊沿
  2         1       0          高電平         奇數邊沿
  3         1       1          高電平         偶數邊沿

STM32 的SPI外設可用作通訊的主機及從機,支持最高的SCK時鐘頻率為Fpclk/2(STM32F10X型號的默認Fpclk1為72M,Fpclk2為36M),完全支持SPI的四種模式,數據幀長度可設置為8為或16位,可設置數據MSB先行或者LSB先行,支持全雙工、雙線單行及單線模式。
STM32 SPI初始化結構體
typedef struct
{
  uint16_t SPI_Direction;           /*設置SPI的單雙向模式 */
  {SPI_Direction_2Lines_FullDuplex   //雙線全雙工
  SPI_Direction_2Lines_RxOnly        //雙線只接收
  SPI_Direction_1Line_Rx             //單線只接收
  SPI_Direction_1Line_Tx             //單線只發送
  }
  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;


void SPI_FLASH_Init(void)
{
    GPIO_InitTypeDef   GPIO_InitStruct;
    SPI_InitTypeDef    SPI_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
    //SPI  SCK
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Pin = SPI_SCK_GPIO_PIN;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(SPI_SCK_GPIO_Port, &GPIO_InitStruct);
    //SPI  MOSI
    GPIO_InitStruct.GPIO_Pin = SPI_MOSI_GPIO_PIN;
    GPIO_Init(SPI_MOSI_GPIO_Port, &GPIO_InitStruct);
    //SPI  MISO
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStruct.GPIO_Pin = SPI_MISO_GPIO_PIN;
    GPIO_Init(SPI_MISO_GPIO_Port, &GPIO_InitStruct);
   
    //SPI  SS
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin = SPI_SS_GPIO_PIN;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(SPI_SS_GPIO_Port, &GPIO_InitStruct);
    GPIO_SetBits( GPIOB, SPI_SS_GPIO_PIN);
   
   
    SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
    SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitStruct.SPI_CRCPolynomial = SPI_SPEED;
    SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
    SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
   
    SPI_Init(SPI_FLASH, &SPI_InitStruct);
   
    SPI_Cmd(SPI_FLASH, ENABLE);
}

//flash 必須先擦除才能再寫入
nor flash 除擦除必須以一個扇區完成外,其余均可以字節為單位操作
nand flash 擦除 讀寫均必須以扇區為最小的單位進行操作  

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久99久久精品国产片果冰 | 人妖av| 亚洲不卡在线观看 | 成人精品一区二区三区中文字幕 | av毛片| 99成人在线视频 | 91免费版在线 | 中文字幕一区在线观看视频 | 日韩美女在线看免费观看 | 成人在线中文字幕 | 操人网站 | 高清亚洲 | 成年人在线视频 | 天天久久 | 国产在线麻豆精品入口 | 精品久久久久久久久久久 | 高清国产一区二区 | 久久久精品久久 | 国产精品久久久久久久久久东京 | 日韩在线一区二区三区 | 91亚洲欧美 | 亚洲男人天堂av | 国产精品欧美一区二区三区 | 欧美久久精品 | 久草青青草 | 国产精品久久久久久久久久久久冷 | 欧美成人激情 | 精品久久久久久久 | 久久久久久国产 | 欧美日韩视频 | 狠狠天天 | 亚洲精品1 | 97精品超碰一区二区三区 | 亚洲综合色婷婷 | 国产精品视频一区二区三区, | 国产成人一区二区三区 | 天天射网站 | 日日淫 | 国产精品久久久久久久模特 | 成人免费大片黄在线播放 | 国产综合网址 |