新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32下485使用記錄

        stm32下485使用記錄

        作者: 時間:2016-12-01 來源:網絡 收藏
        使用STM32做為控制器,板上要求有4個485接口,一個232接口,當232有數據到達時,按條件轉發給485,當485有數據到達時,無條件轉給232
        剛開始編寫代碼時,由于對485使用不熟悉,不知道該注意哪些,就直接編寫程序:
        1.配置管腳,這里管腳配置232與485是一樣的,但485要用一個管腳的高低電平控制輸入輸出方向,這里使用使用4個管腳對串口2--串口4控制
        2.中斷配置,每個串口給與打開對應的中斷線,并給與一定的優先級
        3.串口配置,這里包含時鐘、波特率、8N1等,并選擇使用的中斷事件,這里所有串口都選用接收中斷
        232配置和485配置是一樣的,無非485是半雙工的,需要控制方向,還有一個特別注意的地方,也是我記錄這個文檔的原因:
        由于硬件是我手工制作,不確定所用串口都能使用,所以使用循環輸出測試是否到pc的串口助手,測試結果發現程序一直會進入
        輸入中斷,沒錯是輸入中斷,發送數據進入輸入中斷,后經仔細研究發現問題,代碼如下:
        主函數
        int main(void)
        {
        u8 cmd = 0xaa;
        //配置過程不寫了
        while(1)
        {

        serial3_putchar(cmd);

        }

        }

        串口接收中斷我已打開,這里不寫了
        串口3發送字節函數
        void Serial3PutChar(u8 c)
        {
        int i;

        MAX485EN3(); //485輸出控制 GPIO_SetBits(GPIOE, GPIO_Pin_15)

        USART_SendData(USART3, c);

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

        MAX485RE3(); //485輸入控制 GPIO_ResetBits(GPIOE, GPIO_Pin_15)

        }
        串口中斷服務子程序
        void USART3_IRQHandler(void)
        {

        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
        {
        Serial1PutChar(Serial3GetChar()); //串口1發送串口2接收到的數據

        USART_ClearITPendingBit(USART2, USART_IT_RXNE);
        }
        }

        后來經過本人查找資料及反復思量,發現問題是485發送數據的時間不夠,后經修改波特率為9600,輸入中斷不再產生,
        但發送數據與接收到的數據不相同,后在發送函數內加了一定時間延時,方可!
        void Serial3PutChar(u8 c)
        {
        int i;

        MAX485EN3(); //485輸出控制 GPIO_SetBits(GPIOE, GPIO_Pin_15)

        delay_mS(1);

        USART_SendData(USART3, c);

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

        delay_mS(10);

        MAX485RE3(); //485輸入控制 GPIO_ResetBits(GPIOE, GPIO_Pin_15)

        }


        關鍵詞: stm32485使用記

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 永定县| 东宁县| 武冈市| 夹江县| 丰城市| 西宁市| 台州市| 宁武县| 汤阴县| 东乡县| 聊城市| 蕲春县| 金寨县| 罗山县| 渝中区| 黔江区| 丰城市| 库尔勒市| 景东| 纳雍县| 临泉县| 五常市| 平果县| 昆山市| 博乐市| 黄浦区| 布尔津县| 鄂州市| 绿春县| 西乌珠穆沁旗| 乌拉特前旗| 板桥市| 汪清县| 泰安市| 西林县| 汉寿县| 南华县| 海丰县| 屯昌县| 宜丰县| 高邮市|