STM32GPIO與USART介紹_第1頁
STM32GPIO與USART介紹_第2頁
STM32GPIO與USART介紹_第3頁
STM32GPIO與USART介紹_第4頁
STM32GPIO與USART介紹_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 徐金帥STM的關(guān)鍵資源介紹 1 GPIO端口的介紹 2 串口的介紹1 GPIO端口的介紹 STM32單片機單片機 最多有最多有7個個16位位的并的并行行 I/O端口:端口:PA、PB、PC、PD、PE、PF、PG。 STM32的幾種封裝類型的幾種封裝類型PA口 16腳PB口16腳PC口3腳PD口2腳STM32L15XXX 共有共有37個個I/O管腳管腳: PA口 16腳+ PB口16腳+ PC口3腳+ PD口2腳。 STM32單片機管腳:以單片機管腳:以STM32L 15XXX為例,為例,采用的封裝形式采用的封裝形式LQFP48使用STM32L15XXX設計的按鍵控制LED電路按鍵模塊與LE

2、D模塊 2.32.3.2.2 STM32單片機的單片機的 I/OI/O端口配置端口配置1、GPIOx 端口端口 定義定義 2、GPIO_Pin_x 管腳管腳 定義定義 3、GPIO_InitTypeDef 初始化端口參數(shù)初始化端口參數(shù) 定義定義4、GPIO_Init 初始化端口初始化端口 定義定義GPIO的功能配置輸入配置 輸出配置 復用功能配置模擬輸入配置I/0端口位的基本結(jié)構(gòu)輸入配置當I/O 端口配置為輸入時: 輸出緩沖器被禁止 施密特觸發(fā)輸入被激活 根據(jù)輸入配置(上拉,下拉或浮動)的不同,弱上拉和下拉電阻被連接 出現(xiàn)在I/O 腳上的數(shù)據(jù)在每個APB2時鐘被采樣到輸入數(shù)據(jù)寄存器 對輸入數(shù)據(jù)

3、寄存器的讀訪問可得到I/O 狀態(tài)輸出配置當I/O 端口被配置為輸出時: 輸出緩沖器被激活 開漏模式:輸出寄存器上的0激活N-MOS,而輸出寄存器上的1將端口置于高阻狀態(tài)(P-MOS從不被激活)。 推挽模式:輸出寄存器上的0激活N-MOS,而輸出寄存器上的1將激活P-MOS。 施密特觸發(fā)輸入被激活 弱上拉和下拉電阻被禁止 出現(xiàn)在I/O 腳上的數(shù)據(jù)在每個APB2時鐘被采樣到輸入數(shù)據(jù)寄存器 在開漏模式時,對輸入數(shù)據(jù)寄存器的讀訪問可得到I/O 狀態(tài) 在推挽式模式時,對輸出數(shù)據(jù)寄存器的讀訪問得到最后一次寫的值。 端口位配置表復用功能輸入當I/O 端口被配置為復用功能時: 在開漏或推挽式配置中,輸出緩沖器

4、被打開 內(nèi)置外設的信號驅(qū)動輸出緩沖器(復用功能輸出) 施密特觸發(fā)輸入被激活 弱上拉和下拉電阻被禁止 在每個APB2時鐘周期,出現(xiàn)在I/O 腳上的數(shù)據(jù)被采樣到輸入數(shù)據(jù)寄存器 開漏模式時,讀輸入數(shù)據(jù)寄存器時可得到I/O 口狀態(tài) 在推挽模式時,讀輸出數(shù)據(jù)寄存器時可得到最后一次寫的值 模擬輸入配置當I/O 端口被配置為模擬輸入配置時: 輸出緩沖器被禁止; 禁止施密特觸發(fā)輸入,實現(xiàn)了每個模擬I/O 引腳上的零消耗。施密特觸發(fā)輸出值被強置為0 ; 弱上拉和下拉電阻被禁止; 讀取輸入數(shù)據(jù)寄存器時數(shù)值為0 。 其中 ADC/DAC 模擬輸入 每個每個GPIOx端口端口: :共有共有7 7個設置寄存器個設置寄存

5、器兩個兩個32位的配置寄存器位的配置寄存器(GPIOx_CRL, GPIOx_CRH)(GPIOx_CRL) (x=A.G): GPIOx configuration register low, GPIOx端口低配置寄存器,用于配置端口低配置寄存器,用于配置GPIOx端口的第端口的第0位位第第7位。位。兩個兩個32位的數(shù)據(jù)寄存器(位的數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR)(GPIOx_IDR) (x=A.G): GPIOx input data register 一個一個32位的置位位的置位/復位寄存器復位寄存器 (GPIOx_BSRR) (GPIOx_BSRR) (x=A.G)

6、: GPIOx bit set/reset register一個一個16位的復位寄存器位的復位寄存器(GPIOx_BRR)一個一個32位的鎖定寄存器位的鎖定寄存器(GPIOx_LCKR)(GPIOx_LCKR) (x=A.G): GPIOx configuration lock register 在在固件函數(shù)庫固件函數(shù)庫文件中,文件中,用結(jié)構(gòu)體GPIO_TypeDef定義GPIOx端口:typedef struct vu32 CRL;/configuration register low(GPIOx_CRL)(x=AE) vu32 CRH; vu32 IDR; vu32 ODR; vu32 B

7、SRR; vu32 BRR; vu32 LCKR; GPIO_TypeDef; /用結(jié)構(gòu)體GPIO_TypeDef定義GPIOx端口,(即定義 GPIOx端口的7個設置寄存器)1、編程時,GPIOx端口的具體配置是從GPIOA、 GPIOB、GPIOC、 GPIOD、 或或 GPIOE寄存器組開始。首先,在固件庫中,用結(jié)構(gòu)體GPIO_TypeDef定義GPIOx端口,(即定義 GPIOx端口的7個設置寄存器):/*- General Purpose IO -*/typedef struct vu32 CRL;/configuration register low32(GPIOx_CRL)(x=

8、AE) vu32 CRH; vu32 IDR; vu32 ODR; vu32 BSRR; vu32 BRR; vu32 LCKR; GPIO_TypeDef; /用結(jié)構(gòu)體GPIO_TypeDef定義 GPIOx端口 /或稱或稱用結(jié)構(gòu)體GPIO_TypeDef定義 GPIOx寄存器組GPIOx端口的7個設置寄存器/*- General Purpose IO -*/typedef struct vu32 CRL;/configuration register low32(GPIOx_CRL)(x=AE) vu32 CRH; vu32 IDR; vu32 ODR; vu32 BSRR; vu32 B

9、RR; vu32 LCKR; GPIO_TypeDef; /用結(jié)構(gòu)體GPIO_TypeDef定義 GPIOx端口 /或稱或稱用結(jié)構(gòu)體GPIO_TypeDef定義 GPIOx寄存器組GPIO_Init 初始化端口初始化端口 定義定義功能:根據(jù)GPIO_InitTypeDef中指定的參數(shù),初始化外設GPIOx端口端口例如,GPIO_InitTypeDef GPIO_InitStructure;/定義結(jié)構(gòu)體變量GPIO_InitStructure,用于初始化GPIOx端口的參數(shù)GPIO_Init(GPIOC, &GPIO_InitStructure); /初始化GPIOC端口輸入輸出宏定義/

10、輸出宏定義#define LED1_ON GPIO_ResetBits(GPIOA, GPIO_Pin_8) /輸出低電平#define LED1_OFFGPIO_SetBits(GPIOA, GPIO_Pin_8) /輸出高電平#define LED2_ONGPIO_ResetBits(GPIOD, GPIO_Pin_11)#define LED2_OFFGPIO_SetBits(GPIOD, GPIO_Pin_11)#define LED3_ONGPIO_ResetBits(GPIOC, GPIO_Pin_7)#define LED3_OFFGPIO_SetBits(GPIOC, GPIO

11、_Pin_7)#define LED4_ONGPIO_ResetBits(GPIOC, GPIO_Pin_5)#define LED4_OFFGPIO_SetBits(GPIOC, GPIO_Pin_5)#define LED5_ONGPIO_ResetBits(GPIOB, GPIO_Pin_9)#define LED5_OFFGPIO_SetBits(GPIOB, GPIO_Pin_9)#define LED6_ONGPIO_ResetBits(GPIOB, GPIO_Pin_8)#define LED6_OFFGPIO_SetBits(GPIOB, GPIO_Pin_8)#define

12、LED7_ONGPIO_ResetBits(GPIOB, GPIO_Pin_5)#define LED7_OFFGPIO_SetBits(GPIOB, GPIO_Pin_5)#define LED8_ONGPIO_ResetBits(GPIOB, GPIO_Pin_0)#define LED8_OFFGPIO_SetBits(GPIOB, GPIO_Pin_0)/輸入宏定義#define GET_LEFT()(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3)#define GET_UP()(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pi

13、n_4)#define GET_RIGHT()(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)#define GET_DOWN()(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6)GPIO配置函數(shù)void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure:/* PB0,5,8,9輸出 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;GPIO_InitStru

14、cture.GPIO_Mode = GPIO_Mode_Out_OD;/開漏輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/50M時鐘速度GPIO_Init(GPIOB, &GPIO_InitStructure);/* PC5,7輸出*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; /開漏輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_

15、50MHz;/50M時鐘速度GPIO_Init(GPIOC, &GPIO_InitStructure);/*PD7,輸出*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;/開漏輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/50M時鐘速度GPIO_Init(GPIOD, &GPIO_InitStructure); /*PA8,輸出*/GPIO_InitStructure.GPIO_Pin =

16、 GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;/開漏輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/50M時鐘速度GPIO_Init(GPIOA, &GPIO_InitStructure);/* PD3,4,5,6按鍵輸入*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU

17、;/上拉輸入GPIO_Init(GPIOD, &GPIO_InitStructure);NRZ碼 NRZ碼是單極性不歸零碼,是最基本的數(shù)字基帶編碼,編碼規(guī)則是:用高電平表示基帶中的1;用低電平表示基帶中0。 USART介紹 通用同步異步收發(fā)器同步異步收發(fā)器(USART)提供了一種靈活的方法與使用工業(yè)標準NRZ異步串行數(shù)據(jù)格式的外部設備之間進行全雙工數(shù)據(jù)交換。USART利用分數(shù)波特率發(fā)生器提供寬范圍的波特率選擇。 它支持同步單向通信和半雙工單線通信,也支持LIN( 局部互連網(wǎng)) ,智能卡協(xié)議以及調(diào)制解調(diào)器(CTS/RTS) 操作。它還允許多處理器通信。 UART:universal as

18、ynchronous receiver and transmitter通用異步收發(fā)器 USART:universal synchronous asynchronous receiver and transmitter通用同步異步收發(fā)器 我們一般用的RS232叫UART,它是采用異步異步(Asynchronous)方式傳輸數(shù)據(jù)的,這種方式在傳輸數(shù)據(jù)時不需要向?qū)Ψ絺鬟f時鐘信號。傳輸數(shù)據(jù)時不需要向?qū)Ψ絺鬟f時鐘信號。 還有一種串行傳輸叫同步傳輸同步傳輸(Synchronous),這種方式在傳傳輸數(shù)據(jù)時需要發(fā)送時鐘信號輸數(shù)據(jù)時需要發(fā)送時鐘信號。USART特性 全雙工的,異步通信 NRZ標準格式 分數(shù)波特

19、率發(fā)生器系統(tǒng) 發(fā)送和接收共用的可編程波特率,最高達4.5Mbits/s 可編程數(shù)據(jù)字長度(8 位或9位) 可配置的停止位-支持1 或2個停止位 單線半雙工通信 單獨的發(fā)送器和接收器使能位 檢測標志 接收緩沖器滿 發(fā)送緩沖器空 傳輸結(jié)束標志 校驗控制 發(fā)送校驗位 對接收數(shù)據(jù)進行校驗 stm32串口使用 查詢方式使用串口 1.配置時鐘,由于使用串口是在復用IO口,需要打開串口時鐘和相應的IO口時鐘。 2.配置IO口,串口相應的IO口需要配置,輸出口配置成復用推挽輸出,輸出速度根據(jù)需要配置,輸入口配置為懸空輸入。 3.配置串口,主要包括波特率、數(shù)據(jù)長度、停止位、奇偶校驗、硬件流控制、接收發(fā)送模式。

20、4.最后打開串口配置串口程序配置串口1,引腳為PA.09,PA.10,串口引腳配置,開啟時鐘,打開串口功能:配置USART1,配置PA.09,PA.10,開啟串口時鐘,打開串口void Config_Usart1(void) GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/配置USATR1時鐘,同時打開引腳時鐘和USART1時鐘RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);/配置USA

21、RT1的TX,PA.09,推挽輸出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);/配置USART1的RX,PA.10 為input floatingGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode

22、= GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);/USART1 模式配置 9600 9位數(shù)據(jù) ,偶校驗 ,不使用硬件流控制,發(fā)送和接收USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_9b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = US

23、ART_Parity_Even;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/初始化USART1,打開USART1USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);USART功能概述 USART雙向通信至少需要兩個腳:接收數(shù)據(jù)輸入(RX)和發(fā)送數(shù)據(jù)輸出(TX) 。 RX:

24、接收數(shù)據(jù)串行輸。通過過采樣技術(shù)來區(qū)別數(shù)據(jù)和噪音,從而恢復數(shù)據(jù)。 TX:發(fā)送數(shù)據(jù)輸出。當發(fā)送器被禁止時,輸出引腳恢復到它的I/O 端口配置。當發(fā)送器被激活,并且不發(fā)送數(shù)據(jù)時,TX引腳處于高電平。在單線和智能卡模式里,此I/O 口被同時用于數(shù)據(jù)的發(fā)送和接收。 總線在發(fā)送或接收前應處于空閑狀態(tài)空閑狀態(tài) 一個起始位 一個數(shù)據(jù)字(8 或9位),最低有效位在前 0.5,1.5,2 個的停止位,由此表明數(shù)據(jù)幀的結(jié)束 使用分數(shù)波特率發(fā)生器 12 位整數(shù)和4位小數(shù)的表示方法。 一個狀態(tài)寄存器(USART_SR) 數(shù)據(jù)寄存器(USART_DR) 一個波特率寄存器(USART_BRR) ,12位的整數(shù)和4位小數(shù) U

25、SART寄存器描述數(shù)據(jù)寄存器 USART數(shù)據(jù)寄存器 STM32的發(fā)送與接收是通過數(shù)據(jù)寄存器USART_DR來實現(xiàn)的,這是一個雙寄存器,包含了TDR和RDR。當向該寄存器寫數(shù)據(jù)的時候,串口就會自動發(fā)送,當收到收據(jù)的時候,也是存在該寄存器內(nèi)。該寄存器的各位描述如下: 可以看出,雖然是一個32位寄存器,但是只用了低9位(DR8:0),其他都是保留。DR8:0為串口數(shù)據(jù),包含了發(fā)送或接收的數(shù)據(jù)。由于它是由兩個寄存器組成的,一個給發(fā)送用(TDR),一個給接收用(RDR),該寄存器兼具讀和寫的功能。TDR寄存器提供了內(nèi)部總線和輸出移位寄存器之間的并行接口。RDR寄存器提供了輸入移位寄存器和內(nèi)部總線之間的并

26、行接口。 USART寄存器描述 狀態(tài)寄存器狀態(tài)寄存器(USART_SR) TC:發(fā)送完成:發(fā)送完成 (Transmission complete) 位位6 當包含有數(shù)據(jù)的一幀發(fā)送完成后,并且TXE=1時,由硬件將該位置1 。如果USART_CR1 中的TCIE為1 ,則產(chǎn)生中斷。由軟件序列清除該位(先讀USART_SR,然后寫入USART_DR)。TC位也可以通過寫入0 來清除,只有在多緩存通訊中才推薦這種清除程序。 0:發(fā)送還未完成; 1:發(fā)送完成。 RXNE :讀數(shù)據(jù)寄存器非空:讀數(shù)據(jù)寄存器非空 (Read data register not empty) 位位5 當RDR移位寄存器中的數(shù)

27、據(jù)被轉(zhuǎn)移到USART_DR寄存器中,該位被硬件置位。如果USART_CR1 寄存器中的RXNEIE為1,則產(chǎn)生中斷。對USART_DR的讀操作可以將該位清零。RXNE 位也可以通過寫入0來清除,只有在多緩存通訊中才推薦這種清除程序。 0:數(shù)據(jù)沒有收到; 1:收到數(shù)據(jù),可以讀出。 PE: 校驗錯誤校驗錯誤 (Parity error) 位位0 在接收模式下,如果出現(xiàn)奇偶校驗錯誤,硬件對該位置位。由軟件序列對其清零(依次讀USART_SR和USART_DR)。在清除PE位前,軟件必須等待RXNE 標志位被置1 。如果USART_CR1 中的PEIE為1 ,則產(chǎn)生中斷。 0:沒有奇偶校驗錯誤; 1:

28、奇偶校驗錯誤。 發(fā)送接收程序/功能:接收一個字節(jié)的數(shù)據(jù) 入口參數(shù):無 出口參數(shù):返回收到的數(shù)據(jù)uint8_t error_evenflag = 0 x01;/串口接收偶校驗錯誤標志uint8_t rxdata;/存儲收到的數(shù)據(jù)uint8_t Receive_OneByte(void) /uint8_t rxdata;if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)/串口收到數(shù)據(jù)/RXNE(讀數(shù)據(jù)寄存器非空),當該位被置1 的時候,就是提示已經(jīng)有數(shù)據(jù)被接收到了 if(USART_GetITStatus(USART1, USART_FLAG_PE) = RESET)/偶校驗正確RESET=0 /如果奇偶校驗失敗,USART_SR寄存器中的PE標志被置1 ,狀態(tài)寄存器狀態(tài)寄存器(USART_SR) rxdata = USART_ReceiveData(USART1);else error_evenflag = 0 x00;/偶校驗錯誤時置0return error_evenflag;return rxdata;/USATR1 發(fā)送一個字節(jié) 功能:發(fā)送一個字節(jié)的數(shù)據(jù) 入口參數(shù):發(fā)送到數(shù)void Send_OneByte(uint8_t onebyte)while(RESET = USART_G

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論