本文解答三問題:
1 串口是什么,
2 串口數(shù)據(jù)從哪里來,
3 串口數(shù)據(jù)去向何方。
術(shù)語:
1formula 對應(yīng)公式
2parity even奇校驗 odd偶校驗
3TXE 發(fā)送數(shù)據(jù)寄存器空 (Transmitdataregisterempty)
4TC發(fā)送完成 (Transmissioncomplete)
5RXNE讀數(shù)據(jù)寄存器非空readdataregisternotempty
6 abandon 放棄
串口通訊中物理層:
1規(guī)定數(shù)據(jù)傳輸介質(zhì)
協(xié)議層:
1規(guī)定傳輸?shù)男问剑y(tǒng)一雙方的數(shù)據(jù)打包方式,解包標(biāo)準(zhǔn)
電平標(biāo)準(zhǔn):
1TTL 電平為3.3V 0v
2RS232 +15v到-15v
3 485電平 +2-+6表示1,-2--6表示0
232標(biāo)準(zhǔn)串口主要用于工業(yè)設(shè)備直接通信
1高低電平標(biāo)準(zhǔn)較高,用于抗干擾,以及抗靜電 使用峰峰值 進行抗干擾
2max3232 sp3232 轉(zhuǎn)換芯片上有獨立的供電接口
3DB9端口上 大頭開始的端口為1腳,對于公頭 2/3分別為 R/T 對于母頭2/3為T/R
串口校驗位
1奇校驗 數(shù)據(jù)1對應(yīng)的數(shù)量不為奇數(shù),校驗位,補充一位1
2偶校驗 數(shù)據(jù)1對應(yīng)的數(shù)據(jù)量不為偶數(shù),校驗位,補充一位1
3無校驗 數(shù)據(jù)位中不包含校驗位
串口模式:
對應(yīng)兩種模式,發(fā)送模式,以及接收模式 硬件控制流,
異步發(fā)送數(shù)據(jù),數(shù)據(jù)發(fā)送幀中插入有效的標(biāo)志位
polarity極性 phase相位
時鐘極性:
1 0總線空閑時CK引腳上保持低電平
1總線空閑時CK引腳上保持高電平
2部分串口上不支持時鐘極性的配置方式
時鐘相位 :
1 0 :在時鐘的第一個邊沿進行數(shù)據(jù)采集
2 1:在時鐘的第二個邊沿進行數(shù)據(jù)采集
總結(jié):
時鐘中極性以及相位:方式保持一致即可,主機需要適配從機上通訊方式
LBCL:最后一位時鐘脈沖
1 0最后一位數(shù)據(jù)的時鐘脈沖不從CK輸出
2 1最后一位的時鐘脈沖會從CK輸出
deInit復(fù)位寄存器數(shù)值
編程之前,需要對庫中使用到函數(shù)進行查看,否則會導(dǎo)致編程中出現(xiàn)不知道如何使用函數(shù)這種問題
串口初始化:
1BSP BoardSupport Package板極支持包 硬件設(shè)計相關(guān)的代碼都被封裝在BSP中,代碼層次設(shè)計,進行抽象 單獨設(shè)計
2使用條件編譯,定義頭文件,主要用來防止多個文件中重復(fù)對此頭文件進行調(diào)用,之后對應(yīng)變量被重復(fù)定義使用
3串口模式可以進行設(shè)置,可發(fā)送可接收,可兩者同時操作
4數(shù)據(jù)發(fā)送,調(diào)用庫中發(fā)送單字節(jié)的函數(shù)進行數(shù)據(jù)籌備,之后,通過while函數(shù),對數(shù)據(jù)發(fā)送緩沖區(qū)是否為空進行判斷,非set為真
后期串口上數(shù)據(jù)處理,都需要進行檢查
5定義變量一定要寫上變量初始數(shù)值,防止變量初始化之后,對應(yīng)的數(shù)值不正確且很難找到問題點
6字符串中進行最后一位數(shù)據(jù)判斷,可以對數(shù)據(jù)進行提取,之后判定數(shù)據(jù)是否為 ''判斷字符串中對應(yīng)數(shù)據(jù)是否發(fā)送完成
7printf函數(shù)是一個標(biāo)準(zhǔn)的c語言函數(shù) 使用此函數(shù)需要使用 stdio.h頭文件
8printf函數(shù)會使用到fputc這個函數(shù),代碼中需要對fputc函數(shù)進行實現(xiàn),之后,可正常使用print函數(shù)進行數(shù)據(jù)打印輸出
10 putchar函數(shù)也可以正常使用 putchar(‘A’); C語言中標(biāo)準(zhǔn)庫對應(yīng)的操作方式
11進行數(shù)據(jù)發(fā)送,不勾選16進制數(shù)據(jù)顯示的情況下,部分?jǐn)?shù)據(jù)不能正常顯示
串口號進行切換
1使用宏定義對不同的串口進行區(qū)分,開啟指定宏定義實現(xiàn)串口中通訊需求
2不同的串口,需要使能的時鐘不同
3中斷函數(shù)名,來自啟動文件
4串口數(shù)據(jù)接收:
1串口接收中斷參數(shù)配置,開始對搶占優(yōu)先級進行配置
2后續(xù)串口上數(shù)據(jù)交互,必須對寄存器標(biāo)志進行判斷 發(fā)送數(shù)據(jù),接收數(shù)據(jù)標(biāo)志
3使用getchar函數(shù),單片機上可以接收外部數(shù)據(jù)
4 C語言中常規(guī)數(shù)據(jù)收發(fā)的方式,在單片機中需要進行特殊處理,考慮到實際工控應(yīng)用,單片機中數(shù)據(jù)處理需要進行合理的解析
5串口中發(fā)送的數(shù)據(jù)需要區(qū)分是字符還是數(shù)字
6串口參數(shù)進行配置中,需要先對芯片中資源以及擁有的IO進行統(tǒng)計
7IO重映射主要針對芯片上IO合理布局做出的決策
8數(shù)據(jù)寄存器 DR 一個數(shù)據(jù)發(fā)送寄存器TDR 和一個接收數(shù)據(jù)寄存器RDR 一個地址對應(yīng)兩個物理內(nèi)存
9寄存器中,使用0 / 1映射到實際的數(shù)字上 設(shè)備上端口不夠使用的情況下,可使用此種方法
10單片機中時鐘為外設(shè)工作的心臟,要是時鐘不工作,外設(shè)上也就不會正常運轉(zhuǎn)
11串口使能開啟,需要UE =1 TE = 1 發(fā)送數(shù)據(jù)時,對應(yīng)數(shù)據(jù)流向為DMA或者 cpu兩種渠道
12波特率 每秒鐘要發(fā)送多少數(shù)據(jù) 【二進制位】
串口中寄存器說明
TXE 用來判斷數(shù)據(jù) 發(fā)送數(shù)據(jù)寄存器 先將數(shù)據(jù)放置到發(fā)送數(shù)據(jù)寄存器中,之后將數(shù)據(jù)移動到發(fā)送移位寄存器中 對應(yīng)到寄存器為txc為數(shù)據(jù)傳輸標(biāo)志位
TC標(biāo)志位對應(yīng)的是數(shù)據(jù)發(fā)送完成
串口上時鐘進行計算,需要先確定時鐘來源
定時器以及串口上使用時鐘,分別掛載在APB1 APB2
備注:
1 后續(xù)設(shè)備使用GD32芯片,可以考慮提升芯片上串口波特率 ,或者使用同步串口進行數(shù)據(jù)傳輸
2 單片機中對小數(shù)進行表示,精度為bit位對應(yīng)有效數(shù)據(jù)分之1 波特率寄存器表示精度 1 / 16
3 計算出波特率對應(yīng)數(shù)值,小數(shù)部分?jǐn)?shù)值 / 1 / 16對應(yīng)數(shù)值為 小數(shù)部分對應(yīng)的轉(zhuǎn)化數(shù)字,實際數(shù)據(jù) /精度 =數(shù)量級
4 波特率相關(guān)參數(shù)計算,可以使用宏定義 ,使用公式自己進行計算,最終實現(xiàn)賦值
祝各位:前程似錦。
-
串口通訊
+關(guān)注
關(guān)注
1文章
260瀏覽量
24973 -
USART
+關(guān)注
關(guān)注
1文章
195瀏覽量
30898
原文標(biāo)題:USART 基礎(chǔ)知識點復(fù)習(xí)
文章出處:【微信號:自豪三王,微信公眾號:自豪三王】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論