新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32單片機串口通訊代碼

        STM32單片機串口通訊代碼

        作者: 時間:2016-11-24 來源:網絡 收藏
        STM32開發中,串口是我們最常用的接口。通過串口,我們很方便地把數據輸出到電腦,方便我們進行程序調試。下面我們來看看STM32的串口通訊代碼。

        要實現串口通訊,我們要進行下面幾個步驟:

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

        首先:要打開GPIO口的時鐘和串口模塊時鐘。在圓點博士小四軸中,我們用的是GPIOA和COM1模塊。

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

        其次:要指定GPIO口,即確定哪些IO是用于串口通訊的。記得使用GPIO_Mode_AF_PP模式

        GPIO_InitStructure.GPIO_Pin = BS004_COM1_TX;//圓點博士:設置PA9管腳為串口TX
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //圓點博士:設置串口TX最大允許輸出速度
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //圓點博士:設置串口TX為輸出
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        //
        GPIO_InitStructure.GPIO_Pin = BS004_COM1_RX;//圓點博士:設置PA9管腳為串口RX
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //圓點博士:設置串口RX為輸入
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        第三步:設置串口模塊參數,如波特率,奇偶校驗這些。

        USART_InitStructure.USART_BaudRate = 115200;//圓點博士:設置串口波特率為115200
        USART_InitStructure.USART_WordLength = USART_WordLength_8b; //圓點博士:設置串口數據長度為8位
        USART_InitStructure.USART_StopBits = USART_StopBits_1; //圓點博士:設置串口停止位長度為1位
        USART_InitStructure.USART_Parity = USART_Parity_No ;//圓點博士:設置串口奇偶校驗為無
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //圓點博士:設置串口數據流控制為無
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//圓點博士:設置串口為發送和接收模式
        USART_Init(USART1, &USART_InitStructure);//圓點博士:設置串口參數

        第四步:如果使用串口中斷的話,還要設置中斷優先級。下面例子設置為最高優先級0。

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        最后一步,就是打開中斷,并使能串口模塊拉。

        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//圓點博士:允許接收中斷
        USART_Cmd(USART1, ENABLE);

        上面例子只啟動了接收中斷。這樣,當STM32串口接收到數據的時候,代碼就會自動跳轉到中斷代碼里面執行對應的操作。

        那么,對于發送,怎么辦呢? 我們采用查詢的方式來發送。

        void BS004_COM1_Send_Char(unsigned char ascii_code) //圓點博士:發送一個字符
        {
        USART_SendData(USART1,ascii_code);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}//圓點博士:等待直到發送完成
        }

        如過要發送單字符,使用下面的方法:

        BS004_COM1_Send_Char(/);//圓點博士:發送字符/
        BS004_COM1_Send_Char(13);//圓點博士:發送回車字符

        如過要發送字符串,則使用下面的方法。

        void BS004_COM1_Send_Str_Body(unsigned char* str_buf)//圓點博士:發送一個指定長度的字符串
        {
        unsigned char i,str_len;
        str_len=0;
        for(i=0;i<64;i++)
        {
        str_len++;
        if(str_buf[i]==.) break;
        }
        for(i=0;i
        }

        在上面的例子中,使用了符號.作為字符串結束標志。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 玛曲县| 文成县| 三门峡市| 上犹县| 呼图壁县| 察哈| 易门县| 凤山市| 雷山县| 新昌县| 佛冈县| 广西| 衡水市| 黄龙县| 龙泉市| 高安市| 泰宁县| 阿拉善盟| 肇州县| 安义县| 余江县| 如皋市| 静安区| 上杭县| 乌苏市| 酒泉市| 隆子县| 肥西县| 黎城县| 丰都县| 浠水县| 军事| 鄯善县| 睢宁县| 武定县| 阿克苏市| 河南省| 来宾市| 张掖市| 贵溪市| 巫溪县|