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

歷史上的今天

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

正在發(fā)生

2018年09月22日 | STM32標準庫SPI的初始化

發(fā)布者:平安幸福 來源: eefocus關鍵字:STM32  標準庫SPI  初始化 手機看文章 掃描二維碼
隨時隨地手機看文章

SPI的初始化比較簡單,但是能明白原理是最好的,畢竟出了問題以后好排除。

SPI的初始化過程:

1、初始化GPIO

2、初始化SPI_InitStructure結構體

3、使能SPI外設

SPI的初始化結構體如下圖所示:

typedef struct

{

  uint16_t SPI_Direction;          

  uint16_t SPI_Mode;                

  uint16_t SPI_Daize;            

  uint16_t SPI_CPOL;                

  uint16_t SPI_A;                

  uint16_t SPI_NSS;                

 

  uint16_t SPI_BaudRatePrescaler;  

  uint16_t SPI_FirstBit;            

  uint16_t SPI_CRCPolynomial;      

}SPI_InitTypeDef;

SPI_Direction為SPI的傳輸方向有如下選項:

#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000)     //2線全雙工

#define SPI_Direction_2Lines_RxOnly     ((uint16_t)0x0400)      //2線只接收

#define SPI_Direction_1Line_Rx          ((uint16_t)0x8000)          //1線只接收

#define SPI_Direction_1Line_Tx          ((uint16_t)0xC000)          //1線只發(fā)送

#define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \

                                     ((MODE) == SPI_Direction_2Lines_RxOnly) || \

                                     ((MODE) == SPI_Direction_1Line_Rx) || \

                                     ((MODE) == SPI_Direction_1Line_Tx))

SPI_Mode指定SPI的模式的可選擇參數(shù)如下:

SPI主機模式下,主機輸出SCK,從機時候接收SCK,當配置為主機模式接收數(shù)據(jù)的時候必須發(fā)送數(shù)據(jù)來啟動SCK


#define SPI_Mode_ter                 ((uint16_t)0x0104)                       //主機模式

#define SPI_Mode_Slave                  ((uint16_t)0x0000)                        //從機模式

#define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_ter) || \

                           ((MODE) == SPI_Mode_Slave))

SPI_Daize為一幀數(shù)據(jù)的長度,可選參數(shù)為:


#define SPI_Daize_16b                ((uint16_t)0x0800)       //8位

#define SPI_Daize_8b                 ((uint16_t)0x0000)         //16位

#define IS_SPI_DAIZE(DAIZE) (((DAIZE) == SPI_Daize_16b) || \

                                   ((DAIZE) == SPI_Daize_8b))

一般選擇為8位

SPI_CPOL和SPI_A是比較重要的參數(shù),他們決定了觸發(fā)信號和采樣信號的時刻,

SPI_CPOL=0,SCK空閑狀態(tài)為低電平

SPI_CPOL=1,SCK空閑狀態(tài)為高電平

SPI_A=0,表示在第一個邊沿跳變時采樣

SPI_A=1,表示在第二個邊沿跳變時采樣

當SPI_CPOL=0,SPI_A=0時,SCK空閑狀態(tài)為低電平,表示在第一個邊沿跳變時采樣,說明采樣狀態(tài)為上升沿采樣,下降沿觸發(fā),

當SPI_CPOL=1,SPI_A=0時,SCK空閑狀態(tài)為高電平,表示在第一個邊沿跳變時采樣,說明采樣狀態(tài)為下降沿采樣,上升沿觸發(fā)。

當SPI_CPOL=0,SPI_A=1時,SCK空閑狀態(tài)為高電平,表示在第二個邊沿跳變時采樣,說明采樣狀態(tài)為下降沿,上升沿觸發(fā)

當SPI_CPOL=1,SPI_A=1時,SCK空閑狀態(tài)為高電平,表示在第二個邊沿跳變時采樣,說明采樣狀態(tài)為上升沿降沿,下降沿觸發(fā)

特別提醒:這兩個位必須和外設支持的傳輸方式一致

SPI_CPOL的可選擇參數(shù)如下:

#define SPI_CPOL_Low                    ((uint16_t)0x0000)

#define SPI_CPOL_High                   ((uint16_t)0x0002)

#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \

                           ((CPOL) == SPI_CPOL_High))

SPI_A的可選擇參數(shù)如下:

#define SPI_A_1Edge                  ((uint16_t)0x0000)

#define SPI_A_2Edge                  ((uint16_t)0x0001)

#define IS_SPI_A(A) (((A) == SPI_A_1Edge) || \

                           ((A) == SPI_A_2Edge))

SPI_NSS為CS信號線,該位表示CS信號是由軟件模擬還是由硬件自動產(chǎn)生。官方推薦CS信號由軟件模擬,畢竟CS信號比較簡單。可選擇的參數(shù)如下:

#define SPI_NSS_Soft                    ((uint16_t)0x0200)

#define SPI_NSS_Hard                    ((uint16_t)0x0000)

#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \

                         ((NSS) == SPI_NSS_Hard))

/**

SPI_BaudRatePrescaler SPI的分頻系數(shù)設置,可選參數(shù)如下

#define SPI_BaudRatePrescaler_2         ((uint16_t)0x0000)

#define SPI_BaudRatePrescaler_4         ((uint16_t)0x0008)

#define SPI_BaudRatePrescaler_8         ((uint16_t)0x0010)

#define SPI_BaudRatePrescaler_16        ((uint16_t)0x0018)

#define SPI_BaudRatePrescaler_32        ((uint16_t)0x0020)

#define SPI_BaudRatePrescaler_64        ((uint16_t)0x0028)

#define SPI_BaudRatePrescaler_128       ((uint16_t)0x0030)

#define SPI_BaudRatePrescaler_256       ((uint16_t)0x0038)

#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \

                                              ((PRESCALER) == SPI_BaudRatePrescaler_4) || \

                                              ((PRESCALER) == SPI_BaudRatePrescaler_8) || \

                                              ((PRESCALER) == SPI_BaudRatePrescaler_16) || \

                                              ((PRESCALER) == SPI_BaudRatePrescaler_32) || \

                                              ((PRESCALER) == SPI_BaudRatePrescaler_64) || \

                                              ((PRESCALER) == SPI_BaudRatePrescaler_128) || \

                                              ((PRESCALER) == SPI_BaudRatePrescaler_256))

具體SPI的時鐘可根據(jù)時鐘樹來設置。

SPI_FirstBit 表示先發(fā)送高位還是先發(fā)送低位

#define SPI_FirstBit_MSB                ((uint16_t)0x0000)

#define SPI_FirstBit_LSB                ((uint16_t)0x0080)

#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \

                               ((BIT) == SPI_FirstBit_LSB))

SPI_CRCPolynomial  為CRC值計算的多項式,參數(shù)可設置為任意數(shù)字

下面為SPI的初始化實例:

void SPI2_Init(void)

{

       GPIO_InitTypeDef GPIO_InitStructure;

       SPI_InitTypeDef  SPI_InitStructure;

RCC_APB2PerClockCmd( RCC_APB2Per_GPIOB, ENABLE );

RCC_APB1PerClockCmd( RCC_APB1Per_SPI2,  ENABLE );

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  //PB13/14/15é?à-

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  

SPI_InitStructure.SPI_Mode = SPI_Mode_ter;

SPI_InitStructure.SPI_Daize = SPI_Daize_8b;

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;

SPI_InitStructure.SPI_A = SPI_A_2Edge;

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStructure.SPI_CRCPolynomial = 7;

SPI_Init(SPI2, &SPI_InitStructure);  

 

SPI_Cmd(SPI2, ENABLE); 

SPI2_ReadWriteByte(0xff);

}


關鍵字:STM32  標準庫SPI  初始化 引用地址:STM32標準庫SPI的初始化

上一篇:STM32使用FATFSW讀寫SD出現(xiàn)錯誤2的原因
下一篇:STM32 ADC多通道DMA傳輸

推薦閱讀

9月10日,宏山上下料機器人發(fā)布會在佛山總部隆重舉行。發(fā)布會期間,各行業(yè)用戶紛紛到場,一睹全新上下料機器人的智能風采。 發(fā)布會上,宏山激光研發(fā)何永強總監(jiān)為大家詳細介紹了設備的實用性功能,并與在場的用戶共同揭幕開啟設備。在體驗與觀摩設備后,現(xiàn)場嘉賓紛紛表示對設備認可,更有用戶現(xiàn)場提出設備需求。 對于企業(yè)來說,廠區(qū)空間成本、生產(chǎn)用料...
(文章來源:中科羅伯特機器人學院) 近年來,工廠自動化水平發(fā)展的很快,越來越多的生產(chǎn)線都開始使用工業(yè)機器人,數(shù)字化和信息系統(tǒng)為工業(yè)的生產(chǎn)帶來了改變。隨之很多的人對工業(yè)機器人的發(fā)展表示擔憂,認為工業(yè)機器人的不斷普及會影響到人們的就業(yè)。雖然自動化生產(chǎn)可以暫時取代一部分工人,但它也通過降低成本和提高質(zhì)量的同時,讓人們專注在更高價值的...
近日,哈佛醫(yī)學院 Blavatnik 學院遺傳學教授 David Sinclair 領導的研究小組使用機器學習算法開發(fā)了兩個時鐘,即 FRIGHT 時鐘和 AFRAID 時鐘,成功在老年小鼠中預測其生理年齡和實際壽命。該研究于 9 月 15 日發(fā)表在 Nature Communications《自然通訊》雜志中。David Sinclair 表示,這項研究首次在小鼠中追蹤其虛弱指數(shù)(FI),從而實現(xiàn)...
一、首頁界面printf("{A%d:%d:%d:%d}$",a,b,c,d);a、b、c、d分別為需要顯示的狀態(tài):a對應左邊的碼盤,b對應右邊的碼盤,通過百分比表示,可以用于速度等狀態(tài)的顯示,范圍是0—100(%)c主要是用于顯示電量,范圍也是0—100(%)d是角度值,范圍是-180°—180°。APP控件名稱與發(fā)送指令對應對應關系二、波形界面printf("{B%d:%d:%d:%d:%d}$",a,b,c,d,e);5個...

史海拾趣

問答坊 | AI 解惑

3D封裝的發(fā)展動態(tài)與前景

3D封裝的發(fā)展動態(tài)與前景 【來源:《電子與封裝》】【作者:翁壽松】 1 為何要開發(fā)3D封裝 迄今為止,在IC芯片領域,SoC(系統(tǒng)級芯片)是最高級的芯片;在IC封裝領域,SiP(系統(tǒng)級封裝)是最高級的封裝。 SiP涵蓋SoC,SoC簡化SiP。 ...…

查看全部問答∨

死定了,做的C題

天啊,這次死定了,我做的C題啊!…

查看全部問答∨

電路精選:曾經(jīng)有人說不明白的驅動電路

在模擬技術,如圖是曾經(jīng)有人跟帖說不明白如圖的電-光驅動電路。那些電阻,那些二極管為什么要加?如何加? 時間好長了,記得當時沒有明確的答案,我也答這不上。偶然碰到一個器件手冊內(nèi)的部分內(nèi)容,這就有了明確的答案了。前面部分我譯出來了, ...…

查看全部問答∨

可以在vista 中運行的 protei 版本

可以在vista 中運行的 protei 版本…

查看全部問答∨

我給EEworld的單片機版塊的一點建議!

呵呵,一點個人建議哦!現(xiàn)在學習單片機的人是越來越多,EEworld在這方面的推廣的功勞那也是非常多的!! 單片機的學習者一般都是從MC51的8位機學習起來的,但是隨著信息社會的發(fā)展。8位的單片機畢竟也有一定的局限性,所以16位的,32位的單片機也 ...…

查看全部問答∨

socket的type字段能不能填寫自定義的類型

  socket函數(shù)原型為:int socket(int domain, int type, int protocol);domain指明所使用的協(xié)議族,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM 或SOCK_DGRAM,Socket接口還定義了原始Sock ...…

查看全部問答∨

OS如何知道是USB線還是電源線插上了?

1,插上USB線,OS會把SD卡在PC機上彈出;插上電源線,OS只會充電。請問OS如何區(qū)分的? 2,在PC機上卸載掉SD卡,OS能否收到通知?…

查看全部問答∨

剛買的EK-STR711F開發(fā)板程序怎么跑不起來啊

    剛接觸arm  開發(fā)板的歷程無法運行(死機)    不知道大家有沒有遇到過這種情況…

查看全部問答∨

請香主看看:關于stm32定時器捕獲

我想要實現(xiàn)如下功能:要用stm32自帶的AD測量交流信號的一個周波32個點。思路是這樣子的:先用TIM4來檢測交流信號的過零點,我準備用TIM4的捕獲功能,當信號有上升沿時,捕獲,此時會進入中斷程序(在定時器配置的時候已經(jīng)開了捕獲中斷),在中 ...…

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

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 大安市| 丹江口市| 福州市| 盐源县| 河津市| 吉水县| 岫岩| 泰州市| 宝鸡市| 常熟市| 甘孜县| 乡宁县| 嘉鱼县| 麦盖提县| 太仓市| 海伦市| 布拖县| 永德县| 怀仁县| 东乡县| 西昌市| 大埔县| 玉门市| 广平县| 芜湖市| 凤城市| 含山县| 怀集县| 丽江市| 伊宁县| 江城| 巴林左旗| 嘉定区| 永定县| 南丰县| 沧州市| 孙吴县| 靖江市| 博客| 哈密市| 西吉县|