ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第07章 串口通信與聲碼器_第1頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第07章 串口通信與聲碼器_第2頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第07章 串口通信與聲碼器_第3頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第07章 串口通信與聲碼器_第4頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第07章 串口通信與聲碼器_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

ARMCortex-M3嵌入式控制技術(shù)

——基于STM32F103RCT6

STM32F103硬件系統(tǒng)與KEILMDK工程第七章

串口通信與聲碼器

TM32F103RCT6微控制器具有5個串口,其中USART1~3是帶有同步串行通信能力的同步異步串行口,而UART4~5是標(biāo)準(zhǔn)的異步串行通信口。本章將以STM32F103RCT6微控制器的USART2為例,介紹其片內(nèi)串口外設(shè)的工作原理,并借助實例詳細(xì)介紹串口通信的程序設(shè)計方法,包括串口發(fā)送數(shù)據(jù)和基于串口中斷服務(wù)函數(shù)接收數(shù)據(jù)的方法。1串口通信工作原理2STM32F103串口3

串口通信寄存器類型實例4串口通信庫函數(shù)類型實例5聲碼器7.1串口通信工作原理串口通信是指數(shù)據(jù)的各位按串行的方式沿一根總線進行的通信方式,RS-232標(biāo)準(zhǔn)的UART串口通信是典型的異步雙工串行通信,通信方式如左圖所示。UART串口通信需要兩個引腳,即TXD和RXD,TXD為串口數(shù)據(jù)發(fā)送端,RXD為串口數(shù)據(jù)接收端。STM32F103微控制器的串口與計算機的串口按圖7-1的方式相連,串行數(shù)據(jù)傳輸沒有同步時鐘,需要雙方按相同的位傳輸速率異步傳輸,這個速率稱為波特率,常用的波特率有4800bps、9600bps和115200bps等。UART串口通信的數(shù)據(jù)包以幀為單位,常用的幀結(jié)構(gòu)為:1位起始位+8位數(shù)據(jù)位+1位奇偶校驗位(可選)+1位停止位,如右圖所示。7.2STM32F103串口TM32F103RCT6微控制器共有5個串口,其中,USART1~3為帶同步串行通信功能的通用同步異步串行口,UART4~5為標(biāo)準(zhǔn)的異步串行通信口。這里以USART2工作在標(biāo)準(zhǔn)的異步串行通信方式下為例,介紹STM32F103RCT6微控制器的串口工作原理。7.2STM32F103串口串口USART2的基地址為0x40004400,其各個寄存器的情況如下所述。(1)串口數(shù)據(jù)寄存器USART_DR(偏移地址0x04)

32位的串口數(shù)據(jù)寄存器USART_DR只有第[8:0]位有效,用于發(fā)送串口數(shù)據(jù)時記為TDR,用于接收串口數(shù)據(jù)時記為RDR,TDR和RDR是映射到同一個地址的兩個物理寄存器,通過讀、寫指令來區(qū)分使用了哪個寄存器,即讀USART_DR時自動識別為RDR,寫USART_DR時自動識別為TDR。(2)波特率寄存器USART_BRR(偏移地址為0x08,復(fù)位值為0x0)

32位的波特率寄存器USART_BRR只有第[15:0]位域有效,其中,第[15:4]位域記為DIV_Mantissa[11:0],第[3:0]位域記為DIV_Fraction[3:0]。波特率的計算公式為:波特率=fck/(16×USART_DIV),而USART_DIV=DIV_Mantissa+DIV_Fraction/16,例如,對USART2而言,當(dāng)fck=PCLK1=32MHz時,如果波特率設(shè)為9600bps,則可配置DIV_Mantissa=208,DIV_Fraction=5;如果波特率設(shè)為115200bps,則可配置DIV_Mantissa=17,DIV_Fraction=6,實際波特率為115108bps,誤差為0.08%(可接收范圍內(nèi))。

(3)串口狀態(tài)寄存器USART_SR(偏移地址為0x0,復(fù)位值為0xC0)

32位的串口狀態(tài)寄存器USART_SR只有第[9:0]位有效,如表所示。位號名稱屬性含義31:10

保留9CTS可讀/可寫CTS標(biāo)志位。當(dāng)nCTS線路輸入跳變時,硬件置位,寫入0清零8LBD可讀/可寫LIN中止檢測標(biāo)志位。LIN中止發(fā)生后硬件置位,寫入0清零7TXE只讀發(fā)送數(shù)據(jù)寄存器空標(biāo)志位。TDR內(nèi)容傳給移位寄存器時硬件置1,寫DR寄存器清06TC可讀/可寫發(fā)送完成標(biāo)志位。發(fā)送完成硬件置1,寫入0清零(寫DR+讀SR也可清0)5RXNE可讀/可寫接收數(shù)據(jù)沒有就緒標(biāo)志位。接收數(shù)據(jù)準(zhǔn)備好時硬件置1,讀DR或?qū)?均可清零4IDLE只讀空閑線路檢測標(biāo)志位??臻e時自動置1,讀DR+讀SR可清零3ORE只讀溢出錯誤標(biāo)志位。接收溢出時硬件置1,讀DR+讀SR清零2NE只讀噪聲錯誤標(biāo)志位。接收的位在采樣時出現(xiàn)噪聲時則硬件置1,讀DR+讀SR可清零1FE只讀幀錯誤標(biāo)志位。幀錯誤發(fā)生時硬件置1,讀DR+讀SR可清零該位0PE只讀校驗位錯誤標(biāo)志位。接收的數(shù)據(jù)校驗錯誤時硬件置1,讀DR+讀SR可清零該位(4)串口控制寄存器USART_CR1(偏移地址為0x0C,復(fù)位值為0x0)

32位的串口控制寄存器USART_CR1只有第[13:0]位有效,如表所示位號名稱屬性含義31:14

保留13UE可讀/可寫USART有效位。寫入1開啟USART,寫入0關(guān)閉12M可讀/可寫字長位。為0表示8位數(shù)據(jù)位;為1表示9位數(shù)據(jù)位11WAKE可讀/可寫USART喚醒方式位。為0表示空閑位喚醒;為1表示最后有效數(shù)據(jù)位喚醒10PCE可讀/可寫校驗控制位。為0表示無校驗;為1表示有校驗9PS可讀/可寫校驗選擇位。為0表示偶校驗;為1表示奇校驗8PEIE可讀/可寫PE中斷有效位。為1表示校驗位出錯觸發(fā)中斷,為0表示不觸發(fā)7TXEIE可讀/可寫TXE中斷有效位。為1表示發(fā)送數(shù)據(jù)進入移位寄存器后觸發(fā)中斷,為0表示不觸發(fā)6TCIE可讀/可寫發(fā)送完成中斷有效位。為1表示發(fā)送數(shù)據(jù)完成后觸發(fā)中斷,為0表示不觸發(fā)5RXNEIE可讀/可寫RXNE中斷有效位。為1表示接收數(shù)據(jù)就緒或溢出時觸發(fā)中斷,為0表示不觸發(fā)4IDLEIE可讀/可寫空閑中斷有效位。為1表示空閑將觸發(fā)中斷,為0表示不觸發(fā)3TE可讀/可寫發(fā)送有效位。為0表示關(guān)閉發(fā)送單元;為1表示開啟發(fā)送單元2RE可讀/可寫接收有效位。為0表示關(guān)閉接收單元;為1表示開啟接收單元1RWU可讀/可寫接收喚醒位。為0表示接收處于活躍模式下;為1表示處于靜默模式下0SBK可讀/可寫發(fā)送中止符位。為1表示中止符將被發(fā)送,為0表示不發(fā)送中止符綜上所述,可知串口的操作主要有如下3種:(1)串口初始化串口初始化包括3個主要的操作,即配置串口通信的波特率、設(shè)置串口數(shù)據(jù)幀的格式以及開啟串口接收中斷等。對于STM32F103RCT6,還應(yīng)通過寄存器USART_CR1打開接收單元和發(fā)送單元。(2)發(fā)送數(shù)據(jù)串口發(fā)送數(shù)據(jù)一般通過函數(shù)調(diào)用實現(xiàn),發(fā)送數(shù)據(jù)前應(yīng)先判斷前一個發(fā)送的數(shù)據(jù)是否發(fā)送完成,即判斷USART_SR寄存器的TC位是否為1,如果為1表示前一個數(shù)據(jù)發(fā)送完成,則可以啟動本次數(shù)據(jù)發(fā)送。發(fā)送數(shù)據(jù)只需要將待發(fā)送的數(shù)據(jù)寫入串口數(shù)據(jù)寄存器USART_DR中,發(fā)送單元會按擬定的波特率將數(shù)據(jù)串行發(fā)送出去。(3)接收數(shù)據(jù)串口接收數(shù)據(jù)一般通過串口接收中斷實現(xiàn),需要開啟串口接收中斷,當(dāng)接收到新的數(shù)據(jù)就緒時,在串口中斷服務(wù)函數(shù)中讀取串口接收到的數(shù)據(jù)。7.3串口通信寄存器類型實例在STM32F103RCT6學(xué)習(xí)板上,PA2和PA3口通過網(wǎng)標(biāo)TXD232和RXD232與串口電平芯片ST3232的T2IN和R2OUT管腳相連,參考第2章圖3-2和圖3-6。本節(jié)將討論寄存器類型的串口USART2通信實例。具體實現(xiàn)步驟如下所示:(1)在工程PRJ13的基礎(chǔ)上,新建工程“PRJ15”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ15”下。此時的工程PRJ15與PRJ13完全相同。(2)新建文件uart2.c和uart2.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ15\BSP”下。代碼:代碼:代碼:代碼:添加文件uart2.c到工程管理器的“BSP”分組下編譯鏈接和運行工程PRJ15,同時在計算機端打開串口調(diào)試助手,其顯示結(jié)果如圖所示。在圖中,點擊“手動發(fā)送”,即將“DEF”三個字符由計算機發(fā)送給STM32F103RCT6開發(fā)板,然后,開發(fā)板的STM32F103RCT6微控制器將這三個字符再回送給上位機(這里表示計算機)。工程PRJ15的運行流程7.4串口通信庫函數(shù)類型實例本節(jié)介紹庫函數(shù)類型的串口通信工程實例,與寄存器類型工程PRJ15實現(xiàn)相同的功能,具體建設(shè)步驟如下:(1)在工程PRJ14的基礎(chǔ)上,新建工程“PRJ16”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ16”下。此時的工程PRJ16與工程PRJ14完全相同。(2)新建文件uart2.c和uart2.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ16\BSP”下。代碼:代碼:代碼:將文件uart2.c添加到工程管理器的“BSP”分組下,將目錄“D:\STM32F103RCT6PRJ\PRJ16\STM32F10x_FWLib\src”下的文件stm32f10x_usart.c添加到工程管理器的“LIB”分組下。7.4聲碼器聲碼器SYN6288是一種中文語音合成芯片,通過硬件的形式實現(xiàn)了將中文文本轉(zhuǎn)化為語音(TTS)。一般地,上位機(這里指ARM微控制器)通過串口將文本數(shù)據(jù)發(fā)送到SYN6288,然后,SYN6288通過文本(包括漢字、數(shù)字和字母等)的編碼值,在語音庫中查找其數(shù)字形式存儲的發(fā)音,再通過片內(nèi)的數(shù)模轉(zhuǎn)換器(還集成了數(shù)字濾波器等)將數(shù)字形式的語音轉(zhuǎn)換為模擬語音信號,并送出模擬語音信號。SYN6288可以直接驅(qū)動8歐姆0.5W的揚聲器。7.4.1聲碼器工作原理借助于網(wǎng)標(biāo)TXD_AUDIO和RXD_AUDIO,STM32F103RCT6微控制器的PA9和PA10管腳與SYN6288的RXD和TXD相連接。由于SYN6288的輸入端RXD為與標(biāo)準(zhǔn)的串口信號反向,所以,需要借助于一個反相器(這里使用了三極管S8050)連接TXD_AUDIO和RXD。在STM32F103RCT6微控制器中,PA9和PA10復(fù)用了USART1_TX和USART1_RX功能,即PA9和PA10可作為串口USART1的TXD和RXD端口。聲碼器SYN6288只能工作在波特率為9600bps、19200bps和38400bps下,并且要求串口數(shù)據(jù)格式為“1位起始位、8位數(shù)據(jù)位、無校驗位、1位停止位”。因此,可配置STM32F103RCT6微控制器串口USART1工作在9600bps波特率下,然后,借助于串口USART1按照SYN6288規(guī)定的數(shù)據(jù)包協(xié)議向其發(fā)送文本數(shù)據(jù),實現(xiàn)文本數(shù)據(jù)的語音轉(zhuǎn)換與輸出。SYN6288的數(shù)據(jù)包格式包結(jié)構(gòu)包頭(1字節(jié))數(shù)據(jù)區(qū)長度數(shù)據(jù)區(qū)命令字(1字節(jié))命令參數(shù)(1字節(jié))文本數(shù)據(jù)異或校驗碼(1字節(jié))數(shù)據(jù)0xFD0x000x??0x??0x??0x??0x??...0x??0x??說明固定為0xFD0x??為數(shù)據(jù)區(qū)的字節(jié)數(shù)見下表長度必須小于等于200字節(jié)全部數(shù)據(jù)(不含校驗碼)的異或值包結(jié)構(gòu)包頭(1字節(jié))數(shù)據(jù)區(qū)長度數(shù)據(jù)區(qū)包結(jié)構(gòu)包頭(1字節(jié))數(shù)據(jù)區(qū)長度數(shù)據(jù)區(qū)命令字(1字節(jié))命令參數(shù)(1字節(jié))文本數(shù)據(jù)異或校驗碼(1字節(jié))數(shù)據(jù)0xFD0x000x020x21無無0xDE查詢SYN6288的工作狀態(tài)“數(shù)據(jù)區(qū)”的控制命令格式數(shù)據(jù)區(qū)(長度小于等于203個字節(jié))命令字(1字節(jié))命令參數(shù)(1字節(jié))文本(最多200字節(jié))異或校驗碼(1字節(jié))取值含義高5位含義低3位含義0x01播放文本可取值0,1,2,...,15中的任一值當(dāng)取值為0時,無背景音樂;當(dāng)取值為1至15中的某一數(shù)k時,播放編號為k的背景音樂0文本采用GB2312編碼要轉(zhuǎn)化為語音的文本全部數(shù)據(jù)(含包頭、表示數(shù)據(jù)區(qū)長度的2個字節(jié)、命令字、命令參數(shù)和文本,不含異或校驗碼)的異或值1文本采用GBK編碼2文本采用BIG5編碼3文本采用UNICODE碼0x31設(shè)置波特率00000b0設(shè)置波特率為9600bps無文本1設(shè)置波特率為19200bps2設(shè)置波特率為38400bps0x02停止播放無參數(shù)0x03暫停播放0x04繼續(xù)播放SYN6288配置波特率數(shù)據(jù)包SYN6288播放控制的數(shù)據(jù)包波特率(bps)數(shù)據(jù)包96000xFD0x000x030x310x000xCF192000xFD0x000x030x310x010xCE384000xFD0x000x030x310x020xCD播放控制數(shù)據(jù)包停止播放0xFD0x000x020x20xFD暫停播放0xFD0x000x020x030xFC繼續(xù)播放0xFD0x000x020x040xFB轉(zhuǎn)義文本表序號轉(zhuǎn)義文本含義1[v?]這里的“?”可取值為0至16,表示播放文本的音量大小,0為靜音,16為最大音量,默認(rèn)為“[v10]”2[m?]這里的“?”可取值為0至16,表示播放背景音樂的音量大小,0為靜音,16為最大音量,默認(rèn)為“[m4]”3[t?]這里的“?”可取值為0至5,表示語速,0為最慢,5為最快,默認(rèn)為“[t4]”4[n?]數(shù)字的發(fā)音方式,這里的“?”可取值為0至2,為1表示數(shù)字單個發(fā)音(例如“12”發(fā)音為“一二”,為2表示相鄰數(shù)字合成為數(shù)值發(fā)音(例如“12”發(fā)音為“十二”),為0表示自動識別,默認(rèn)為“[n0]”5[y?]數(shù)字1的讀法,“?”只能取值0或1,為0時,“1”讀“幺”;為1時,“1”讀“一”,默認(rèn)為“[y0]”6[o?]文本朗讀方式,“?”只能取值0或1,為0時,自然朗讀;為1時,逐字發(fā)音,默認(rèn)為“[o0]”7[r][r]后面緊跟的漢字按姓氏發(fā)音,用于多音字的情況8[2][2]后緊跟的兩個漢字聯(lián)合成一個詞語發(fā)音,中間無停頓9[3][3]后緊跟的三個漢字聯(lián)合成一個詞語發(fā)音,中間無停頓聲碼器SYN6288支持4種文本編碼體系

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論