新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)串口處理獲得的經(jīng)驗(yàn)(stm32)

        單片機(jī)串口處理獲得的經(jīng)驗(yàn)(stm32)

        作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
        最近搞了一個(gè)stm32串口數(shù)據(jù)幀批處理代碼,遇到了很多問(wèn)題,作為剛工作的我,經(jīng)驗(yàn)太缺乏,實(shí)在是需要總結(jié)一番,以避免以后再出現(xiàn)同樣的錯(cuò)誤。

        大致情況羅列如下:

        本文引用地址:http://www.104case.com/article/201611/315410.htm

        1、串口接收中斷處理

        在學(xué)校的時(shí)候根本沒(méi)有接觸過(guò)什么循環(huán)處理的方法,到現(xiàn)在我也講不上來(lái)這個(gè)方法的名字是什么,反正自己會(huì)運(yùn)用了。大致的情況是環(huán)形數(shù)組處理,代碼如下:

        //======================>> 接收數(shù)據(jù)中斷
        if( USART_GetITStatus( COM_USARTx, USART_IT_RXNE ) != RESET )
        {
        if( COM_Rx_Sign == 1 )
        {
        COM_Cout_mS = DEF_COM_FRM_END_MS;
        }
        COM_Uart_RxBuf.Buf[ COM_Uart_RxBuf.WriteSize++ ] = USART_ReceiveData( COM_USARTx );
        if( COM_Uart_RxBuf.WriteSize >= COM_TxRx_BUF_SIZE ) /* 循環(huán)接收數(shù)據(jù)存儲(chǔ) */
        {
        COM_Uart_RxBuf.WriteSize = 0;
        }
        USART_ClearITPendingBit( COM_USARTx, USART_IT_RXNE );/* Clear the USART Receive interrupt */
        }

        2、發(fā)送數(shù)據(jù)處理

        采用的是usart轉(zhuǎn)485接口,所以在常態(tài)要將485置為接受狀態(tài),只有發(fā)送數(shù)據(jù)的時(shí)候才置為發(fā)送狀態(tài)。這樣說(shuō)表面上看著沒(méi)啥問(wèn)題,但是剛開始的時(shí)候一直出現(xiàn)發(fā)送數(shù)據(jù)最后一個(gè)字節(jié)丟失,我一直不知道問(wèn)題,最后仿真器在中斷里面485置為接受之前設(shè)置了一個(gè)斷點(diǎn)



        關(guān)鍵詞: 單片機(jī)串口處理stm3

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 台东县| 南安市| 台中市| 涟源市| 建瓯市| 定兴县| 罗山县| 德保县| 静宁县| 贵德县| 台东县| 泽库县| 彭泽县| 二连浩特市| 兰西县| 寻乌县| 莲花县| 新蔡县| 赤峰市| 关岭| 菏泽市| 佳木斯市| 教育| 崇州市| 会同县| 长乐市| 壶关县| 中宁县| 交口县| 应城市| 固原市| 车险| 梧州市| 聂荣县| 伊金霍洛旗| 新乡县| 辰溪县| 崇义县| 禹州市| 章丘市| 东乌珠穆沁旗|