98国产精品综合一区二区三区,国产福利视频,男人添女人囗交做爰视频,日本免费一区二区三区视频观看

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> STM32串口第一個字節(jié)丟失問題的分析過程

STM32串口第一個字節(jié)丟失問題的分析過程

關鍵字:STM32 串口 作者:admin 來源:不詳 發(fā)布時間:2018-05-18  瀏覽:23

STM32串口發(fā)送必須先檢測狀態(tài),否則第一個字節(jié)無法發(fā)出,發(fā)送完畢,必須檢測發(fā)送狀態(tài)是否完成,否則,發(fā)送不成功,使用stm32f10x調試串口通訊時,發(fā)現一個出錯的現象,硬件復位重啟之后,發(fā)送測試數據0x01 0x02 0x03 0x04..接收端收到的數據為:0x02 0x03 0x04,第一個數據丟失。換成發(fā)送別的數值的數據,如0x06 0x0ff,則接收到0x0ff,0x06丟失。錯誤依舊。

故障排除過程:

1、剛開始懷疑是接收端的錯誤,我是使用電腦串口,運行串口輔助調試工具接收,換成其他軟件后,發(fā)現故障依舊,而且電腦軟件一直是開啟狀態(tài),不像和電腦軟件有關。

2、使用單步調試,單步運行各個發(fā)送指令,都正常。能收到0x01 0x02 0x03 0x04的數據。間接的排除了不是電腦軟件的問題,而是其他的錯誤。

3、單步調試運行雖然正常了,但連續(xù)運行時,錯誤依舊,F在有點摸不到頭緒了,單步運行正常,看起來編程沒有出錯,那故障在哪里呢?測試程序如下

USART_SendData(USART2, 0x01); //A

while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); //B

USART_SendData(USART2, 0x02); //C

while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);

USART_SendData(USART2, 0x03);

while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);

USART_SendData(USART2, 0x04);

while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);

4、猜測,也許是因為某個特殊原因,使第二個數據覆蓋了首個數據,使得首個數據丟失。假設:在執(zhí)行B指令時,USART的 TC 狀態(tài)位==SET,那么就會緊接著執(zhí)行C指令,也就有可能發(fā)生數據的覆蓋。于是,在A指令前,加入如下指令:USART_ClearFlag(USART2,USART_FLAG_TC);

5、加入上一條指令后,運行,錯誤消失了。說明上一個假設,應該是成立的。

6、查閱stm32f10x參考手冊,找到這樣一句話:

TC:發(fā)送完成

當包含有數據的一幀發(fā)送完成后,由硬件將該位置位。如果USART_CR1中的TCIE為1,則產生中斷。由軟件序列清除該位(先讀USART_SR,然后寫入USART_DR)。TC位 也可以通過寫入0來清除,只有在多緩存通訊中才推薦這種清除程序。

0:發(fā)送還未完成;1:發(fā)送完成。

7、注意到這一句:由軟件序列清除該位(先讀USART_SR,然后寫入USART_DR)。 也就是說,要先read USART_SR,然后write USART_DR,才能完成TC狀態(tài)位的清除。而硬件復位后,串口發(fā)送的首個數據之前沒有read SR的操作,是直接write DR,也就是說,TC沒有被清除掉。 說明第4步的猜測是對的。

8、那么,應該把指令A前面加的USART_ClearFlag(USART2,USART_FLAG_TC); 改為USART_GetFlagStatus(USART2, USART_FLAG_TC);,應該也能消除錯誤。測試后證實,確實如此,在發(fā)送首個數據之前,先讀取一下USART_SR,那么就不會出現首個數據丟失的情況了。

9、總結:硬件復位后,串口發(fā)送首個數據之前,先讀取一下USART_SR,則能夠保證首個數據發(fā)送時,不出現覆蓋的情況。當然,也有別的方法,比如先清除TC狀態(tài)位,或是,在write USART_DR之后,加入一個小延時,讓數據發(fā)送完畢,應該也能間接排除這個錯誤。

編輯:admin  最后修改時間:2018-05-18

聯系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A09

Copyright © 2014-2025 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

少妇bbwbbw性生话| 国产亚洲成av人片在线观黄桃| 在厨房被c到高潮a毛片奶水| 年轻的小婊2韩剧中文版| 艳妇乳肉豪妇荡乳av无码福利| 日本亲与子乱人妻ihd| 性大毛片视频| 又粗又爽高潮午夜免费视频| 无人视频在线观看完整版高清| 两个人免费视频| 飘雪在线影院观看免费完整版高清| 校草喝下春药被男生玩弄| 很黄的吸乳a片三男一女| 杨思敏1—5集无删减在线观看| 热の综合热の国产中文网| 欧美日韩精品一区二区在线播放| 亚洲国产精品自在自线观看| 色噜噜狠狠一区二区三区| 息与子五十路孕中文字幕| 甜性涩爱在线播放| 欧美熟妇dodk巨大| 色精阁久艾草国产www| 老农民里老干棒媳妇回来了吗| 拍裸戏时被c了h| 黑人巨大vs日本人优在线| gogo全球专业高清摄影| 欧美熟妇丰满肥白大屁股免费视频| 国产偷窥盗拍丰满老熟女| 老师黑色双开真丝旗袍恩施视频| 久久妇女高潮喷水多长时间| 人妻小慧办公室沉伦全文番外篇| 中文字幕人妻丝袜二区| 18禁白丝喷水视频www视频| 国产大屁股喷水视频在线观看| 国产精品久久人妻拍拍水牛影视| 和上司出差被内谢在线播放| 刺激videoschina偷拍| 亚洲变态另类一区二区三区| 亚洲欧美强伦一区二区| 欧美肥妇bwbwbwbxx小说| 奇迹少女第四季|