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