串列埠:串列埠就是stm32與外部通訊的橋梁!是一種簡單、常用的通訊方式。串列埠是stm32內部的乙個外設!
串列埠理論知識
一、串列埠的組成
1)串列埠的io : txd-->資料的傳送 rxd -->資料的接收 gnd -->共地
接線方式:
串列埠屬於序列通訊方式 。低位先發!!
全雙工:可以同時實現資料的傳送和接收!
半雙工:同一時間只能接收或者傳送資料!
單工: 只能傳送資料,只能接收資料!
2) 傳送器 : 用於資料的傳送。
啟動傳送器
: cr1 的te
位必須置
1 3) 接收器:用於資料的接收。
4) 波特率發生器:用於決定通訊的速度。
二、usart 字元說明 (資料幀)
1+8+1 =10 位.
如果是9600 波特率,通訊速度=9600 /10 -> 960 個位元組
三 、資料的傳送
1)必須判斷(等待)傳送資料暫存器為空,這時才能傳送資料。也就是txe 這位為1
2)判斷 傳送完成,sr暫存器的 tc位為1,也說明可以再次傳送資料!!!
void usart1_send(chardat)
四 、資料的接收
讀取資料暫存器不為空 的時候才可以讀取資料。sr暫存器的 rxen =1
u8 usart1_res(void)
五 、波特率發生器
1)選擇合適的過取樣方法
a) 16
倍over8=0
;可以增加接收器對時鐘的容差。
b) 8倍 over8=1 ; 速度快,但是容差降低。
2) 波特率的生成
公式:
over8=0時
tx/rx : -->波特率的大小 ,如 9600,115200;
fck : 串列埠的時鐘頻率的大小,不同的串列埠它的時鐘頻率是不一樣。以串列埠1為例說明.
usart1 和usart6 --> fck = 84m(m4)
usart2-usart5 -> fck = 42m(m4)
usart1 --> fck = 72m(m3)
usart2 usart3 --> fck = 36m(m3)
usartdiv :
寫進波特率暫存器的值。
9600 -> usartdiv =546.875
115200 -> usartdiv = 45.573 (約等於)
波特率暫存器 (usart_brr)
只用低16位。
4-15 位用於存放usartdiv的整數部分
0-3 位用於存放 usartdiv的小數部分。(over8=0)
假設用的是9600,那麼就要把546.875寫到usart_brr暫存器中?
也就是 546 怎麼寫到 4-15位?(0.875 * 16= ) 寫到0-3位????
串列埠配置
一、初始化步驟
1) 引腳初始化
2) 開串列埠時鐘
3) 配置模式 (全雙工模式)
4) 配置資料幀 (乙個起始位,8個資料位)
5) 配置校驗 (不使用校驗)和資料流
6) 配置波特率
7) 使能。
二、資料的傳送和接收函式
void usartx_send(chardat)
u8 usartx_res(void)
三、printf函式
1) 修改fputc函式
//重定義
fputc
函式int fputc(int ch,file *f)
2)printf使用環境
法1. target——code generation——選中use microlib
法2.//加入以下**,支援printf函式,而不需要選擇use microlib
#if 1
#pragmaimport(__use_no_semihosting)
//標準庫需要的支援函式
struct __file
;file __stdout;
//定義
_sys_exit()
以避免使用半主機模式
_sys_exit(int x)
STM32之串列埠
名稱 stm32之串列埠 說明 對於stm32的串列埠通訊來說,從外部看,和c51差不多。從內部看,啊。我還不了解。從使用上說,也是需要先配置usart,然後通過終端或者輪詢的方式接受或者輸出資料。由於有了韌體庫函式的幫助,stm32的串列埠配置起來比c51還要方便不少。本實驗完成的是輸入輸出重定向...
STM32之串列埠原理
串列埠通訊定義 串列埠是計算機上一種非常通用裝置通訊的協議。大多數計算機包含兩個基於rs232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議 很多gpib相容的裝置也帶有rs 232口。同時,串列埠通訊協議也可以用於獲取遠端採集裝置的資料。串列埠通訊原理 串列埠通訊的概念非常簡單,串列埠按位 b...
STM32之串列埠通訊
一 rs232通訊協議 1 概念 個人計算機上的通訊介面之一,由電子工業協會 electronic industries association,eia 所制定的非同步傳輸標準介面。2 電氣特性 邏輯1 mark 3v 15v 邏輯0 space 3 15v 3 介面 實現全雙工非同步通訊只需要三根...