STM32--UART異步通信學(xué)習(xí)
字符發(fā)送的過(guò)程描述:在UART的發(fā)送過(guò)程中先將數(shù)據(jù)輸入到發(fā)送數(shù)據(jù)寄存器中(TDR)此時(shí)(TXE)被硬件置1,之后TDR寄存器將數(shù)據(jù)串行移入到發(fā)送移位寄存器中,將數(shù)據(jù)在TX端口發(fā)送,此時(shí)(TC)被硬件置1。發(fā)送與接收是逆過(guò)程。
UART發(fā)送配置步驟:
1.通過(guò)USART_CR1寄存器上置位UE來(lái)激活USART。
2.編程USART_CR1的M位來(lái)定義字長(zhǎng)。
3.在USART_CR2中編程停止位的位數(shù)。
4.如果采用多緩沖器通信,配置USART_CR3中的DMA使能位(DMAT)。按多緩沖器通信中的描述配置DMA寄存器。
5.利用USART_BRR寄存器選擇要求的波特率。
6. 設(shè)置USART_CR1中的TE位,發(fā)送一個(gè)空閑幀作為第一次數(shù)據(jù)發(fā)送。
7. 把要發(fā)送的數(shù)據(jù)寫(xiě)進(jìn)USART_DR寄存器(此動(dòng)作清除TXE位)。在只有一個(gè)緩沖器的情況下,對(duì)每個(gè)待發(fā)送的數(shù)據(jù)重復(fù)步驟7。
8. 在USART_DR寄存器中寫(xiě)入最后一個(gè)數(shù)據(jù)字后,要等待TC=1,它表示最后一個(gè)數(shù)據(jù)幀的傳輸結(jié)束。當(dāng)需要關(guān)閉USART或需要進(jìn)入停機(jī)模式之前,需要確認(rèn)傳輸結(jié)束,避免破壞最后一次傳輸。
在配置USART的接收時(shí),除上面的步驟外,還要使能接收中斷并且配置中斷向量控制器NVIC。
波特率的計(jì)算方法:
USART的編程:
1.定義USART_InitTypeDef類(lèi)型的結(jié)構(gòu)體 UART_init
2.使能GPIO的時(shí)鐘和USART的時(shí)鐘。(UART1 PA9為T(mén)X,PA9為RX)
3.配置UART_init結(jié)構(gòu)體的各參數(shù)。 配置波特率、數(shù)據(jù)位、停止位、奇偶效驗(yàn)位、硬件流、收發(fā)模式
4.初始化UART_init結(jié)構(gòu)體的各參數(shù)使用函數(shù)。
5.使能USART
6.定義GPIO_InitTypeDef類(lèi)型的結(jié)構(gòu)體GPIO_UART
7.講相應(yīng)GPIO引腳(PA10 RX PA9 TX)。
8.初始化GPIO引腳。
在配置接收模式時(shí),還要使能接收中斷,并且配置中斷向量控制器NVIC。
在發(fā)送完數(shù)據(jù)時(shí),要判斷標(biāo)志TC是否置位,在接收數(shù)據(jù)時(shí),要判斷是否有接收中斷請(qǐng)求。