娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

什么是串口

毫無疑問,串口是我們接觸到的第一種通信接口,無論是串口調(diào)試還是與外設(shè)的通信,串口的用途十分廣。


關(guān)于同步和異步,最簡單的區(qū)分方法就是看在通信時需不需要接時鐘線,像SPI、I2C等通信接口都需要接CLK線,毫無疑問它們都是同步的,而串口是一種擁有兩種模式的通信接口,可以選擇是否連接時鐘線。至于串行和并行,區(qū)分的方法就是看數(shù)據(jù)是一位一位的發(fā)送還是以一個字節(jié)(8位)或16位的格式發(fā)送,顯然并口的數(shù)據(jù)線就要多的多,而串行接口的數(shù)據(jù)線就少的多,若只發(fā)送或只接受(單工),一根數(shù)據(jù)線就夠了,半雙工或全雙工的通信接口也一般只需要兩條數(shù)據(jù)線。


UART是一種通用串行數(shù)據(jù)總線,用于異步通信。該總線雙向通信,可以實(shí)現(xiàn)全雙工傳輸和接收。在嵌入式設(shè)計中,UART用于主機(jī)與輔助設(shè)備通信,如汽車音響與外接AP之間的通信,與PC機(jī)通信包括與監(jiān)控調(diào)試器和其它器件,如EEPROM通信。


STM32上的串口

現(xiàn)在基本所有的MCU都會有串口,在STM32上有為數(shù)不少的串口,而且同一串口可以在不同的引腳映射,給我們的開發(fā)帶來了極大的方便,據(jù)有經(jīng)驗(yàn)的人教導(dǎo),可以用串口收發(fā)數(shù)據(jù)的模塊千萬不要使用別的通信接口,一是因?yàn)榇诘呐渲煤褪褂么_實(shí)簡單好用,二是因?yàn)檫B接雙方使用“端對端”的方式連接,發(fā)生錯誤后的排查檢測也比較容易。但是串口也有數(shù)據(jù)傳輸速度較慢的不足,只能用于低速通信,以及從程序開發(fā)的角度上看,串口具有獨(dú)占性,一旦有一個程序使用了某個串口,則別的程序無法再使用這個串口;即使是同一個程序,在使用同一個串口的時候,由于“串行通信”的特性,因而無法采用多線程編程對某個串口進(jìn)行同時操作,否則會因各命令相互干擾而導(dǎo)致所有的命令都失效。


STM32中的USART框圖



STM32中的USART寄存器



SR(狀態(tài)寄存器)中可以獲知當(dāng)前串口的狀態(tài)


DR(數(shù)據(jù)寄存器)用來存放接收或?qū)⒁l(fā)送的數(shù)據(jù)


BRR(波特率寄存器)用來設(shè)置串口的波特率


CR(控制寄存器)則用來對USART進(jìn)行配置及使能


GTPR可以設(shè)置USART的保護(hù)時間和預(yù)分頻系數(shù)


STM32中串口的配置

串口的配置較為簡單,短短幾步就能完成對串口的配置


此處借用原子哥的原碼來進(jìn)行講解


void uart_init(u32 pclk2,u32 bound)

{   

float temp;

u16 mantissa;

u16 fraction;    

temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV@OVER8=0

mantissa=temp; //得到整數(shù)部分

fraction=(temp-mantissa)*16; //得到小數(shù)部分@OVER8=0 

    mantissa<<=4;

mantissa+=fraction; 

RCC->AHB1ENR|=1<<0;    //使能PORTA口時鐘  

RCC->APB2ENR|=1<<4;  //使能串口1時鐘 

GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,復(fù)用功能,上拉輸出

  GPIO_AF_Set(GPIOA,9,7); //PA9,AF7

GPIO_AF_Set(GPIOA,10,7);//PA10,AF7     

//波特率設(shè)置

  USART1->BRR=mantissa; //波特率設(shè)置  

USART1->CR1&=~(1<<15); //設(shè)置OVER8=0 

USART1->CR1|=1<<3;  //串口發(fā)送使能 

#if EN_USART1_RX   //如果使能了接收

//使能接收中斷 

USART1->CR1|=1<<2;  //串口接收使能

USART1->CR1|=1<<5;    //接收緩沖區(qū)非空中斷使能    

MY_NVIC_Init(3,3,USART1_IRQn,2);//組2,最低優(yōu)先級 

#endif

USART1->CR1|=1<<13;  //串口使能

}

入口參數(shù)為時鐘頻率和波特率


1、首先通過時鐘頻率和波特率計算出“mantisa”這個參數(shù)是一會兒賦值給USARTx->BRR 寄存器的,來設(shè)置串口的波特率


2、使能IO口時鐘和所用串口的時鐘


3、設(shè)置IO口(TX、RX),設(shè)置為復(fù)用功能,復(fù)用為USART


4、設(shè)置波特率,是否過采樣(16倍過采樣來保證較好的容錯性),數(shù)據(jù)長度和有無校驗(yàn)位


5、使能發(fā)送和接收


6、使能中斷,并且設(shè)置中斷的優(yōu)先級以及優(yōu)先級分組


7、使能串口



STM32中串口中斷


STM32中串口接收數(shù)據(jù)

#if EN_USART1_RX   //如果使能了接收

//串口1中斷服務(wù)程序

//注意,讀取USARTx->SR能避免莫名其妙的錯誤   

u8 USART_RX_BUF[USART_REC_LEN];     //接收緩沖,最大USART_REC_LEN個字節(jié).

//接收狀態(tài)

//bit15, 接收完成標(biāo)志

//bit14, 接收到0x0d

//bit13~0, 接收到的有效字節(jié)數(shù)目

u16 USART_RX_STA=0;       //接收狀態(tài)標(biāo)記   

  

void USART1_IRQHandler(void)

{

u8 res;

#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.

OSIntEnter();    

#endif

if(USART1->SR&(1<<5))//接收到數(shù)據(jù)

{  

res=USART1->DR; 

if((USART_RX_STA&0x8000)==0)//接收未完成

{

if(USART_RX_STA&0x4000)//接收到了0x0d

{

if(res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始

else USART_RX_STA|=0x8000; //接收完成了 

}else //還沒收到0X0D

{

if(res==0x0d)USART_RX_STA|=0x4000;

else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=res;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收   

}  

}

}       

#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.

OSIntExit();   

#endif

#endif  

u8 USART_RX_BUF[USART_REC_LEN];是定義了一個接收緩沖數(shù)組,來存放接收到的數(shù)據(jù),每個元素可以存放一個字節(jié)的數(shù)據(jù),數(shù)組的長度為USART_REC_LEN。


關(guān)于操作系統(tǒng)的部分暫時忽略,接下來定義了一個16位的接收狀態(tài)標(biāo)記USART_RX_STA


它的第15位是接收完成標(biāo)志,第14位是接收到0x0d的標(biāo)志,而0-13位表示接收到的有效字節(jié)的數(shù)目


當(dāng)接收到一個數(shù)據(jù)后,把接收到的數(shù)據(jù)(DR寄存器中的值)暫存在中間變量中,先檢驗(yàn)接收是否完成,若未完成,檢驗(yàn)是否接收到0x0d,如果接收到,修改狀態(tài)標(biāo)記,然后把中間變量的值賦給緩沖數(shù)組,將狀態(tài)標(biāo)記的值自增,完成對一個字節(jié)的接收


STM32中串口發(fā)送數(shù)據(jù)

使用串口發(fā)送數(shù)據(jù)就更加簡單了,只需要將要發(fā)送的數(shù)據(jù)(8位)賦給數(shù)據(jù)寄存器(DR)然后等待發(fā)送完成即可

關(guān)鍵字:STM32  通信接口  串口 引用地址:STM32通信接口(一)串口

上一篇:STM32通信接口(二)IIC--軟件模擬
下一篇:STM32 SPI2讀W25Q128驅(qū)動

推薦閱讀

半導(dǎo)體產(chǎn)業(yè)協(xié)會(SIA)昨(5)日公布,2018年1月份全球半導(dǎo)體銷售額為376億美元,環(huán)比下滑1.0%,符合正常的季節(jié)性調(diào)整,與去年同期相比,銷售額卻飆升22.7%。SIA總裁兼執(zhí)行長John Neuffer在聲明稿中指出,2017年半導(dǎo)體年度銷售改寫歷史新高;2018年初,半導(dǎo)體又創(chuàng)下歷年來一月份的最高銷售額,并實(shí)現(xiàn)連續(xù)第18個月的年增長,再創(chuàng)佳績。與去年同期相比,各主...
人工智能是引領(lǐng)未來的戰(zhàn)略性技術(shù),是新一輪科技革命和產(chǎn)業(yè)變革的重要驅(qū)動力量。為貫徹落實(shí)國務(wù)院《新一代人工智能發(fā)展規(guī)劃》、工信部《促進(jìn)新一代人工智能產(chǎn)業(yè)發(fā)展三年行動計劃(2018-2020年)》,推進(jìn)人工智能產(chǎn)業(yè)發(fā)展,日前,湖南正式發(fā)布《湖南省人工智能產(chǎn)業(yè)發(fā)展三年行動計劃(2019—2021年)》(以下簡稱《行動計劃》)。《行動計劃》提出,以“人工智能+”...
(文章來源:小智侃科技) 多年來,機(jī)器人制造商波士頓動力公司的Spot一直象征著即將進(jìn)行的機(jī)器人接管,盡管其創(chuàng)造者盡了最大努力將其定位為樂于助人和多技能的人類同伴。人們已經(jīng)看到這只狗似的機(jī)器人以可怕的速度打開門并輕快地覆蓋地面,其標(biāo)志性美學(xué)甚至激發(fā)了險惡的《黑鏡》(Black rror)關(guān)于未來的機(jī)器人人類獵人。但是Spot可能不是大多數(shù)倡導(dǎo)者...
近年來隨著蘋果Airpods的帶動,令整個藍(lán)牙耳機(jī)行業(yè)向TWS無線耳機(jī)轉(zhuǎn)型。從2016年開始,每年的藍(lán)牙音頻市場均是呈現(xiàn)快速增長。以價值鏈的重要性來看,藍(lán)牙主控芯片是其性能和體驗(yàn)最關(guān)鍵的一環(huán)。物奇微電子是國內(nèi)最先量產(chǎn)RISC-V架構(gòu)芯片設(shè)計公司,在2017年,公司量產(chǎn)了RISC-V架構(gòu)載波通訊芯片,目前出貨量已超千萬片;此外,公司還設(shè)計量產(chǎn)了首款集成Cadence...

史海拾趣

問答坊 | AI 解惑

硬件工程師基礎(chǔ)知識

硬件工程師基礎(chǔ)知識…

查看全部問答∨

整理中的傳感器部分清單

傳感器接近開關(guān)10-36VDC/200mA/4mmLJ18A3-4-Z/BX 樂清市新歐傳感器有限公司1傳感器接近開關(guān)10-36VDC/200mA/8mmLJ18A3-8-Z/BX 樂清市新歐傳感器有限公司1傳感器接近開關(guān)黃色/塑料/大   1傳感器光電二極管發(fā)射管EL-1KL3  2傳感器光電三極管接 ...…

查看全部問答∨

測試阻抗時測量錯誤的潛在來源

測試阻抗時測量錯誤的潛在來源…

查看全部問答∨

主板元件燒毀

如何分析主板元器件燒毀的原因? 具體有哪些分析思路?…

查看全部問答∨

人心不齊是團(tuán)隊(duì)發(fā)展的最大障礙

每個人哪怕略微有點(diǎn)責(zé)任心,對工作稍微注意點(diǎn)!…

查看全部問答∨

WinCE6.0中Catalog Item沒有CISCO Aironet 340/350 PCMCIA WLAN Card網(wǎng)卡驅(qū)動選項(xiàng)

我要加一個CISCO Aironet 350 PCMCIA 無線網(wǎng)卡,查看Windows Embedded CE6.0幫助文件,有CISCO Aironet 340/350 PCMCIA WLAN Card驅(qū)動可以用,位于Device Drivers\\Networking\\下。可是我的Wince6.0卻找不到這個驅(qū)動,不知道怎么回事?…

查看全部問答∨

WINCE 下ADSL撥號上網(wǎng)問題

wince5.0 我的板子不用ADSL線,用公司網(wǎng)絡(luò)上網(wǎng)正常,說明網(wǎng)卡及驅(qū)動沒有問題! 我用ADSL線直接接我的PC,通過輸入用戶名及密碼,正常登錄,并正常瀏覽網(wǎng)頁,說明ADSL線及賬戶沒有問題! 我的問題是: ADSL線接上我的板子,創(chuàng)建PPPOE后,只要一 ...…

查看全部問答∨

【LaunchPad手記】MSP430 LaunchPad演示應(yīng)用:內(nèi)部溫度測量

不會編輯帖子,直奔主題,利用剛剛到手的MSP430 LaunchPad演示應(yīng)用,內(nèi)部溫度測量,注意到手后的430先不要下載新程序哦,里面是帶程序的準(zhǔn)備工作1:下載IAR for MSP430,因?yàn)槲矣玫腎AR就暫時不提CCS了哦準(zhǔn)備工作2:檢查電腦是否安裝java程序,如果 ...…

查看全部問答∨

時鐘偏斜大于數(shù)據(jù)延遲在Quartus II 9.1 如何修改

問題就是這樣的,怎么改時序約束啊,具體步驟,我對Quartus II 9.1 不是很熟啊…

查看全部問答∨

數(shù)碼管 點(diǎn)陣已關(guān) 怎么還閃? 1062不能正常顯示

要使用1062液晶顯示   所以通過void cmg88()//關(guān)數(shù)碼管,點(diǎn)陣函數(shù),但是點(diǎn)陣關(guān)不不了,還是不停的閃,液晶顯示也有點(diǎn)閃,不知道為什么這樣。 程序如下: #include<reg51.h>//包含頭文件,一般情況不需要改動,頭文件包含特殊功 ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 滁州市| 夏邑县| 金山区| 山阳县| 会同县| 仙居县| 阿拉善右旗| 阳曲县| 阿图什市| 黔南| 本溪市| 林西县| 商河县| 高清| 山阴县| 固安县| 新平| 昌黎县| 灵川县| 鄄城县| 白河县| 朔州市| 饶河县| 西峡县| 金阳县| 西宁市| 闸北区| 百色市| 荣昌县| 弥勒县| 雅江县| 炉霍县| 连云港市| 大田县| 仙桃市| 遵化市| 新竹县| 镇江市| 兴城市| 勃利县| 灵石县|