寫在前面 Ⅰ
做軟件開發(fā)的人都知道打印信息的重要,說(shuō)到打印信息,我們就不得不說(shuō)UART串口打印。做單片機(jī)開發(fā)的人,打印信息主要的來(lái)源就是UART串口打印。因此,關(guān)于UART相關(guān)的知識(shí)就比較重要。
printf、scanf這種標(biāo)準(zhǔn)的函數(shù)不只是可以在電腦上可以使用,在我們單片機(jī)上也同樣可以使用,本文只講述關(guān)于UART的基礎(chǔ)知識(shí),關(guān)于printf、scanf這一塊后面將再次給大家整理一篇文章。
本文將結(jié)合“STM8S參考手冊(cè)”和軟件源代碼給大家講述關(guān)于UART的基礎(chǔ)知識(shí)和用法。
為方便大家閱讀,本文內(nèi)容已經(jīng)整理成PDF文件:
http://pan.baidu.com/s/1i5uWhJR
UART基礎(chǔ)知識(shí) Ⅱ
通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,是一種異步收發(fā)傳輸器。
STM8S微控制器家族的通用同步異步收發(fā)器(UART1、UART2或UART3)提供了一種靈活的方法和使用工業(yè)標(biāo)準(zhǔn)NZR異步串行數(shù)據(jù)格式的外部設(shè)備之間進(jìn)行全雙工數(shù)據(jù)交換。STM8的UART提供寬范圍的波特率選擇,并且支持多處理器通訊。
主要特性:
? 全雙工的,異步通信
? 高精度波特率發(fā)生器系統(tǒng):發(fā)送和接收共用的可編程波特率,最高達(dá) 2.5Mbits/s
? 可編程數(shù)據(jù)字長(zhǎng)度(8位或9位)
? 可配置的停止位-支持1或2個(gè)停止位
? 單線半雙工通信(UART1)
? 檢測(cè)標(biāo)志:接收緩沖器滿、發(fā)送緩沖器空、傳輸結(jié)束標(biāo)志
? 6個(gè)帶標(biāo)志的中斷源
? 2個(gè)中斷向量
? 低功耗模式
UART同步模式
UART_CK腳是UART發(fā)送器時(shí)鐘的輸出。在起始位和停止位期間,UART_CK腳上沒(méi)有時(shí)鐘脈沖。根據(jù)UART_CR3寄存器中LBCL位的狀態(tài),發(fā)送器決定在最后一個(gè)有效數(shù)據(jù)位期間產(chǎn)生或不產(chǎn)生時(shí)鐘脈沖。 UART_CR3寄存器的CPOL位允許用戶選擇時(shí)鐘極性, UART_CR3寄存器上的CPHA位允許用戶選擇外部時(shí)鐘的相位。
在總線空閑幀和斷開幀中,外部CK時(shí)鐘處于非激活狀態(tài)。
注意:
1.UART_CK腳同UART_TX腳一起聯(lián)合工作。當(dāng)UART發(fā)送端被禁用時(shí)(TEN和REN=0),UART_CK和UART_TX管腳為高阻態(tài)。
2.在UART發(fā)送端和接收端都被禁用(TEN=REN=0)時(shí), LBCL,CPOL和CPHA位必須被正確配置以保證時(shí)鐘脈沖正確工作;當(dāng)發(fā)送器或接收器被激活時(shí),這些位不能被改變。
3.建議在同一條指令中設(shè)置TE和RE,以減少接收器的建立時(shí)間和保持時(shí)間。
4. UART只支持主模式:它不能使用來(lái)自其他設(shè)備的輸入時(shí)鐘以接收或發(fā)送數(shù)據(jù)(SCLK只能配置為輸出狀態(tài))。
5. 本節(jié)給出的數(shù)據(jù)只有在寄存器UART_BRR2的UART_DIV[3:0]為0時(shí)才有效。否則建立時(shí)間和持續(xù)時(shí)間不再是1/16位時(shí)間,而是4/16位時(shí)間。
該功能選項(xiàng)可以串行地控制那些由移位寄存器組成的外設(shè),而不會(huì)失去異步通訊的功能,即仍然可以與其他異步發(fā)送接收器通訊。
UART同步傳輸的例子:
軟件工程源代碼 Ⅲ
1、關(guān)于工程
本文提供的工程代碼是基于前面軟件工程“STM8S-A02_TIM精確延時(shí)(阻塞式)”增加UART串口修改而來(lái)。初學(xué)的朋友可以參看我前面對(duì)應(yīng)的基礎(chǔ)文章,那些文章講的比較詳細(xì)。
工程源代碼主要實(shí)現(xiàn)功能:UART串口基本輸出+中斷接收數(shù)據(jù)。UART串口間隔1s打印字符串“Demo...”,串口通過(guò)中斷接收數(shù)據(jù),接收到一個(gè)字符就將其通過(guò)串口發(fā)送出去。
本文重點(diǎn)講述關(guān)于UART的內(nèi)容:
UART_Initializes:UART串口初始化
UART1_SendByte:UART串口發(fā)送字節(jié)數(shù)據(jù)
2.代碼分析說(shuō)明
A.UART_Initializes:初始化
void UART_Initializes(void)
{
UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
UART1_Cmd(ENABLE);
UART1_ITConfig(UART1_IT_RXNE, ENABLE);
enableInterrupts();
}
UART1_Init:包含的參數(shù):
115200:波特率
UART1_WORDLENGTH_8D:字長(zhǎng),8位或9位
UART1_STOPBITS_1:停止位
UART1_PARITY_NO:奇偶校驗(yàn)
UART1_SYNCMODE_CLOCK_DISABLE:同步模式
UART1_MODE_TXRX_ENABLE:收發(fā)使能
這里每一個(gè)參數(shù)都可以有不同值,可參看其枚舉類型。
UART1_Cmd(ENABLE):使能UART1.
UART1_ITConfig(UART1_IT_RXNE, ENABLE):使能中斷接收。
enableInterrupts():使能全局中斷。
B.UART1_SendByte:發(fā)送字節(jié)數(shù)據(jù)
void UART1_SendByte(uint8_t Data)
{
while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));
UART1_SendData8(Data);
while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET));
}
while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)):等待發(fā)送為空
UART1_FLAG_TXE代表發(fā)送寄存器為空。
UART1_SendData8(Data):發(fā)送字節(jié)數(shù)據(jù)
while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET)):等待傳輸完成
UART1_FLAG_TC代表發(fā)送完成標(biāo)志。
C.中斷接收
位于stm8s_it.c文件下:
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
uint8_t temp;
temp = UART1_ReceiveData8();
UART1_SendData8(temp);
}
這里只是簡(jiǎn)單的一個(gè)Demo例程,接收到數(shù)據(jù),將其通過(guò)串口發(fā)送出去。
UART串口有接收數(shù)據(jù)中斷,會(huì)置位接收標(biāo)志,平常我們響應(yīng)中斷,一般都會(huì)清楚中斷標(biāo)志,但串口中斷接收數(shù)據(jù),我們都會(huì)去讀取串口接收數(shù)據(jù),讀取數(shù)據(jù)會(huì)自動(dòng)清除標(biāo)志位。見參考手冊(cè)中“狀態(tài)寄存器UART_SR”:
D.主函數(shù)功能
while(1)
{
LED_ON;
TIMDelay_Nms(500);
LED_OFF;
TIMDelay_Nms(500);
UART1_Printf((uint8_t*)"Demo...");
}
主函數(shù)里面實(shí)現(xiàn)間隔一段時(shí)間(1s),通過(guò)UART串口發(fā)送字符串“Demo...”。
下載 Ⅳ
STM8S資料:
http://pan.baidu.com/s/1o7Tb9Yq
軟件源代碼工程(STM8S-A04_UART基本收發(fā)數(shù)據(jù)):
http://pan.baidu.com/s/1c2EcRo0
上一篇:STM8S_003_ TIM定時(shí)中斷
下一篇:STM8S_005_ ADC采集單通道電壓
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 智能護(hù)眼臺(tái)燈設(shè)計(jì)
- 蓄電池高能脈沖充電系統(tǒng)設(shè)計(jì)
- 基于51單片機(jī)定時(shí)器的電子時(shí)鐘設(shè)計(jì)方案
- 瑞薩電子推出面向單電機(jī)應(yīng)用優(yōu)化的卓越MCU, 涵蓋電動(dòng)工具、家用電器等廣泛應(yīng)用場(chǎng)景
- 奇瑞人形機(jī)器人9月開售并將面向個(gè)人用戶,機(jī)器人時(shí)代該來(lái)了嗎?
- 華為李文廣:華為智能駕駛規(guī)劃曝光,加速追趕特斯拉
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-下
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-中
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-上
- 車云一體其他層面的架構(gòu)設(shè)計(jì)借鑒-下
- 輔助駕駛域控發(fā)展背景
- 輔助駕駛域控核心方法論是什么-下
- 輔助駕駛域控核心方法論是什么-上
- 規(guī)模化量產(chǎn)時(shí)代來(lái)臨?智元、宇樹科技中標(biāo)1.24億人形機(jī)器人大單!
- 有獎(jiǎng)直播 | 瑞薩新一代視覺(jué) AI MPU 處理器 RZ/V2H:高算力、低功耗、實(shí)時(shí)控制
- 24年年終盤點(diǎn)來(lái)啦!精選強(qiáng)推:原創(chuàng)、測(cè)評(píng)、拆解、視頻、資料
- 是德科技電子書,下載有禮進(jìn)行時(shí)!
- 嵌入式Rust修煉營(yíng):動(dòng)手寫串口燒錄工具和MCU例程,Rust達(dá)人Hunter直播帶你入門Rust
- 【EEWORLD第三十三屆】2011年12月社區(qū)明星人物揭曉!
- Littelfuse 新品賦能電子產(chǎn)品安全可靠并高效, 10+挑戰(zhàn)等你探索!
- 有獎(jiǎng)活動(dòng)|逛安富利人工智能云會(huì)展,解鎖AI資料,贏好禮!
- 看視頻瓜分紅包:面向高效高密度開關(guān)電源的先進(jìn)功率 MOSFET 技術(shù)及應(yīng)用
- 6小時(shí)狂歡,誰(shuí)是2016年TI杯全國(guó)大學(xué)生物聯(lián)網(wǎng)設(shè)計(jì)競(jìng)賽最高人氣王,你說(shuō)了算!
- 報(bào)名抽取京東卡|2021慕尼黑華南電子展觀眾注冊(cè)進(jìn)行中
- 商務(wù)部回應(yīng)美國(guó)將23家中國(guó)實(shí)體列入出口管制
- 重度使用示波器進(jìn)行優(yōu)化分析——一個(gè)DSDA項(xiàng)目回顧
- 萬(wàn)用表的使用技巧,你都get√了嗎?
- 如何正確選擇合適的萬(wàn)用表?
- 指針式萬(wàn)用表的原理,看圖學(xué)快速入門
- STC15系列單片機(jī)-環(huán)境監(jiān)控設(shè)備
- 51單片機(jī) 外部中斷實(shí)驗(yàn)
- STC15系列單片機(jī) 超聲波測(cè)距實(shí)驗(yàn)
- PCF8591組件(A/D和D/A轉(zhuǎn)換)
- PCF8591 A/D轉(zhuǎn)換實(shí)驗(yàn)-測(cè)量電位器的電平
- 【ATmega4809 Curiosity Nano測(cè)評(píng)】串口應(yīng)用初步:通過(guò)串口打印正弦字符串
- MIPS和ARM的比較(轉(zhuǎn))
- WINCE6系統(tǒng) 燒入扳子啟動(dòng)后是不是根據(jù)組件的多少啟動(dòng)的服務(wù)多少來(lái)占有內(nèi)存呢?
- 封裝CM3內(nèi)核的systick中斷和調(diào)用
- DS18B20程序不對(duì)。
- 低功耗的問(wèn)題
- MSP430省電方式的喚醒方法
- PCB表面處理工藝對(duì)電路測(cè)試的影響分析
- 整流雜談(一)
- 黑夜自動(dòng)點(diǎn)亮的過(guò)道燈電路