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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、: GPIOx bit set/reset register一個(gè)一個(gè)16位的復(fù)位寄存器位的復(fù)位寄存器(GPIOx_BRR)一個(gè)一個(gè)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個(gè)設(shè)置寄存器)1、編程時(shí),GPIOx端口的具體配置是從GPIOA、 GPIOB、GPIOC、 GPIOD、 或或 GPIOE寄存器組開始。首先,在固件庫中,用結(jié)構(gòu)體GPIO_TypeDef定義GPIOx端口,(即定義 GPIOx端口的7個(gè)設(shè)置寄存器):/*- 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個(gè)設(shè)置寄存器/*- 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ù),初始化外設(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時(shí)鐘速度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時(shí)鐘速度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時(shí)鐘速度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時(shí)鐘速度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è)標(biāo)準(zhǔn)NRZ異步串行數(shù)據(jù)格式的外部設(shè)備之間進(jìn)行全雙工數(shù)據(jù)交換。USART利用分?jǐn)?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ù)時(shí)不需要向?qū)Ψ絺鬟f時(shí)鐘信號。傳輸數(shù)據(jù)時(shí)不需要向?qū)Ψ絺鬟f時(shí)鐘信號。 還有一種串行傳輸叫同步傳輸同步傳輸(Synchronous),這種方式在傳傳輸數(shù)據(jù)時(shí)需要發(fā)送時(shí)鐘信號輸數(shù)據(jù)時(shí)需要發(fā)送時(shí)鐘信號。USART特性 全雙工的,異步通信 NRZ標(biāo)準(zhǔn)格式 分?jǐn)?shù)波特

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

20、4.最后打開串口配置串口程序配置串口1,引腳為PA.09,PA.10,串口引腳配置,開啟時(shí)鐘,打開串口功能:配置USART1,配置PA.09,PA.10,開啟串口時(shí)鐘,打開串口void Config_Usart1(void) GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/配置USATR1時(shí)鐘,同時(shí)打開引腳時(shí)鐘和USART1時(shí)鐘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ù) ,偶校驗(yàn) ,不使用硬件流控制,發(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雙向通信至少需要兩個(gè)腳:接收數(shù)據(jù)輸入(RX)和發(fā)送數(shù)據(jù)輸出(TX) 。 RX:

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

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

26、行接口。 USART寄存器描述 狀態(tài)寄存器狀態(tài)寄存器(USART_SR) TC:發(fā)送完成:發(fā)送完成 (Transmission complete) 位位6 當(dāng)包含有數(shù)據(jù)的一幀發(fā)送完成后,并且TXE=1時(shí),由硬件將該位置1 。如果USART_CR1 中的TCIE為1 ,則產(chǎn)生中斷。由軟件序列清除該位(先讀USART_SR,然后寫入U(xiǎn)SART_DR)。TC位也可以通過寫入0 來清除,只有在多緩存通訊中才推薦這種清除程序。 0:發(fā)送還未完成; 1:發(fā)送完成。 RXNE :讀數(shù)據(jù)寄存器非空:讀數(shù)據(jù)寄存器非空 (Read data register not empty) 位位5 當(dāng)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: 校驗(yàn)錯(cuò)誤校驗(yàn)錯(cuò)誤 (Parity error) 位位0 在接收模式下,如果出現(xiàn)奇偶校驗(yàn)錯(cuò)誤,硬件對該位置位。由軟件序列對其清零(依次讀USART_SR和USART_DR)。在清除PE位前,軟件必須等待RXNE 標(biāo)志位被置1 。如果USART_CR1 中的PEIE為1 ,則產(chǎn)生中斷。 0:沒有奇偶校驗(yàn)錯(cuò)誤; 1:

28、奇偶校驗(yàn)錯(cuò)誤。 發(fā)送接收程序/功能:接收一個(gè)字節(jié)的數(shù)據(jù) 入口參數(shù):無 出口參數(shù):返回收到的數(shù)據(jù)uint8_t error_evenflag = 0 x01;/串口接收偶校驗(yàn)錯(cuò)誤標(biāo)志uint8_t rxdata;/存儲(chǔ)收到的數(shù)據(jù)uint8_t Receive_OneByte(void) /uint8_t rxdata;if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)/串口收到數(shù)據(jù)/RXNE(讀數(shù)據(jù)寄存器非空),當(dāng)該位被置1 的時(shí)候,就是提示已經(jīng)有數(shù)據(jù)被接收到了 if(USART_GetITStatus(USART1, USART_FLAG_PE) = RESET)/偶校驗(yàn)正確RESET=0 /如果奇偶校驗(yàn)失敗,USART_SR寄存器中的PE標(biāo)志被置1 ,狀態(tài)寄存器狀態(tài)寄存器(USART_SR) rxdata = USART_ReceiveData(USART1);else error_evenflag = 0 x00;/偶校驗(yàn)錯(cuò)誤時(shí)置0return error_evenflag;return rxdata;/USATR1 發(fā)送一個(gè)字節(jié) 功能:發(fā)送一個(gè)字節(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論