久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

stm32 USART 的學(xué)習(xí)

作者:simeto   來源:simeto的空間   點(diǎn)擊數(shù):  更新時(shí)間:2014年06月20日   【字體:

錯(cuò)誤是最有效的學(xué)習(xí)了,不錯(cuò)我是沒辦法集中注意力去學(xué)習(xí),雖然很簡單,但是還是詳細(xì)有條理的寫一下找到錯(cuò)誤,不能靠碰運(yùn)氣寫程序,浪費(fèi)時(shí)間精力。 

 

1.循環(huán)方式的USART 

1.1功能:僅實(shí)現(xiàn)不停向PC發(fā)送數(shù)據(jù)

 1.2實(shí)現(xiàn)步驟:

①首先確定串口,STM32的PA9和PA10對(duì)應(yīng)的是 串口1 ,其中串口1時(shí)鐘的打開函數(shù)為RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);可見串口1為高速外設(shè)時(shí)鐘(APB2),具體的需要再參考數(shù)據(jù)手冊(cè) 。

②配置程序包括:RCC配置 (不知道具體干什么的);GPIO配置;NVIC配置(中斷配置,循環(huán)用不到);USART配置

③RCC配置 除了時(shí)鐘配置需要修改,其他暫時(shí)沒有發(fā)現(xiàn)不同,需要打開中斷時(shí)鐘,GPIO時(shí)鐘,還有AFIO復(fù)用時(shí)鐘(?,這個(gè)可以深入看一看,不太明白,功能是當(dāng)外設(shè)用的復(fù)用IO就需要開啟,這里應(yīng)該是不需要的,參考http://blog.sina.com.cn/s/blog_5d9349d10100u9ni.html)

④GPIO配置 TX設(shè)置為復(fù)用推挽輸出(GPIO_Mode_AF_PP)RX設(shè)置為懸空輸入(GPIO_Mode_IN_FLOATING)

⑤ USART配置 這個(gè)寫的是五花八門,問題多半出在這里,大分歧是需不需要進(jìn)行時(shí)鐘的配置,打開庫文件,找到USART_ClockInitTypeDef結(jié)構(gòu)體的定義:

typedef struct

{

uint16_t USART_Clock;

uint16_t USART_CPOL;

uint16_t USART_CPHA; //這個(gè)有問題,有兩種配置方式USART_CPHA_1Edge和USART_CPHA_2Edge,不知道有沒有影響

uint16_t USART_LastBit;

} USART_ClockInitTypeDef;

然后分別初始化時(shí)鐘和串口,使能串口

⑥發(fā)送數(shù)據(jù)函數(shù)  這個(gè)從技術(shù)上出問題的概率不大,但從猜測(cè)的角度,我覺得很有可能是這里的問題,STM32庫里有發(fā)送個(gè)數(shù)據(jù)的函數(shù)USART_SendData(串口,16位無符號(hào)整型數(shù)據(jù)),然后等待系統(tǒng)響應(yīng),判斷系統(tǒng)相應(yīng)的方法是通過判斷USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET時(shí),然后繼續(xù)執(zhí)行,找到該函數(shù),主要是

 if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)

{

bitstatus = SET;

}

else

{

bitstatus = RESET;

}返回bitstatus,這個(gè)我是不太看得懂,因?yàn)椴恢繳SARTx->SR(狀態(tài)寄存器)DR(數(shù)據(jù)寄存器)和USART_FLAG_TXE分別是如何操作的。但是有本書里提供了自己寫的驅(qū)動(dòng),里面說STM32固件中的字符發(fā)送函數(shù)不帶發(fā)送完成的判斷就馬上返回,所以會(huì)出現(xiàn)掉數(shù)據(jù)的現(xiàn)象,書中的函數(shù)應(yīng)該問題不大,不過先試一試,我在做實(shí)驗(yàn)時(shí),將一個(gè)燈綁在發(fā)送程序上,當(dāng)發(fā)送時(shí),燈被點(diǎn)亮,而復(fù)位后,燈一直在閃爍,這就是說程序正常執(zhí)行了,也就是說while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET)這個(gè)判斷一直可以通過,這是什么情況我就得搞懂庫中的函數(shù)了。書里的代碼也是按寄存器和位寫的,搞懂也不容易啊。

 USART_FLAG_TC是發(fā)送完成標(biāo)志位,USART_FLAG_TXE是發(fā)送數(shù)據(jù)寄存器空標(biāo)志位,這一下清楚了,就是判斷寄存器中數(shù)據(jù)為空 ->FLAG=1->庫函數(shù)返回set->繼續(xù)執(zhí)行,和預(yù)想的是一樣的,應(yīng)該沒問題,但這里為什么要先和狀態(tài)寄存器先進(jìn)行與運(yùn)算就不太 清楚了

 

關(guān)閉窗口
主站蜘蛛池模板: 波多野结衣在线观看一区二区三区 | 国产精品久久久 | 国内精品免费久久久久软件老师 | 国产精品a久久久久 | 欧美精品一区二区在线观看 | 欧美日韩亚洲三区 | 久久精品国产免费看久久精品 | 黄色三级毛片 | 国产传媒在线观看 | 国产视频福利一区 | 国产美女精品视频 | 欧美日韩亚洲三区 | 日韩高清电影 | 网站黄色在线 | 亚洲免费婷婷 | 精品国产91乱码一区二区三区 | 日韩精品一区在线 | 欧美日韩视频在线第一区 | 国产精品久久久久久久一区探花 | 电影91久久久 | 成人免费看黄网站在线观看 | 日本天天操 | 黄网免费 | 麻豆久久久久久久 | 精品国产18久久久久久二百 | 免费特级黄毛片 | www.亚洲 | 日韩欧美在线播放 | 很很干很很日 | 久久久久久久电影 | 精品美女久久久 | 成人久久久 | 嫩草视频免费 | 日韩伦理一区二区 | 一区二区三区精品在线视频 | 国产精品日日摸夜夜添夜夜av | 久久国产成人 | 在线2区| 91高清在线观看 | 亚洲成av | 在线一区|