在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32之串口通信

            STM32之串口通信

            作者: 時間:2016-11-24 來源:網(wǎng)絡 收藏
            實驗目的:

            實現(xiàn)利用串口1 不停的打印一個信息到電腦上,同時接收從串口發(fā)過來的數(shù)據(jù),把發(fā)送過來的數(shù)據(jù)直接送回給電腦。

            本文引用地址:http://www.biyoush.com/article/201611/320972.htm

            實驗平臺:

            基于STM32F103C8T6的彩屏開發(fā)板

            硬件接口:

            注意:因為我的開發(fā)板上的串口和LED共用了PA9和PA10,所以在使用USART1時務必屏蔽LED,不然兩者會互相影響而導致實現(xiàn)現(xiàn)象無法呈現(xiàn)。

            相關寄存器:

            1,串口時鐘使能。串口作為STM32 的一個外設,其時鐘由外設時鐘使能寄存器控制,這

            里我們使用的串口1 是在APB2ENR 寄存器的第14 位。

            2,串口復位。串口1 的復位是通過配置APB2RSTR 寄存器的第14 位來實現(xiàn)的。。通過向該位寫1來復位串口1,寫0 結束復位。

            3,串口波特率設置。每個串口都有一個自己獨立的波特率寄存器USART_BRR

            波特率的計算,STM32 的串口波特率計算公式如下:


            上式中, 是給串口的時鐘(PCLK1 用于USART2、3、4、5,PCLK2 用于USART1);USARTDIV 是一個無符號定點數(shù)。我們只要得到USARTDIV 的值,就可以得到串口波特率寄存器USART1->BRR 的值。

            4,串口控制。STM32 的每個串口都有3 個控制寄存器USART_CR1~3,串口的很多配置

            都是通過這3 個寄存器來設置的

            5,數(shù)據(jù)發(fā)送與接收。STM32 的發(fā)送與接收是通過數(shù)據(jù)寄存器USART_DR 來實現(xiàn)的,這是

            一個雙寄存器,包含了TDR 和RDR。

            6,串口狀態(tài)。串口的狀態(tài)可以通過狀態(tài)寄存器USART_SR 讀取。

            (注:詳細的介紹使用請參考ST公司的數(shù)據(jù)手冊)

            程序設計:

            (注:本人的usart.c usart.h delay.c delay.h sys.c sys.h是引用網(wǎng)上一位網(wǎng)友整理的)

            usart.h

            #ifndef __USART_H

            #define __USART_H

            #include

            #include "stdio.h"

            extern u8 USART_RX_BUF[64]; //接收緩沖,最大63個字節(jié).末字節(jié)為換行符

            extern u8 USART_RX_STA; //接收狀態(tài)標記

            //如果想串口中斷接收,請不要注釋以下宏定義

            #define EN_USART1_RX //使能串口1接收

            void uart_init(u32 pclk2,u32 bound);

            #endif

            usart.c

            #include "sys.h"

            #include "usart.h"

            //加入以下代碼,支持printf函數(shù),而不需要選擇use MicroLIB

            #if 1

            #pragma import(__use_no_semihosting)

            //標準庫需要的支持函數(shù)

            struct __FILE

            {

            int handle;

            };

            FILE __stdout;

            //定義_sys_exit()以避免使用半主機模式

            _sys_exit(int x)

            {

            x = x;

            }

            //重定義fputc函數(shù)

            int fputc(int ch, FILE *f)

            {

            while((USART1->SR&0X40)==0);//循環(huán)發(fā)送,直到發(fā)送完畢

            USART1->DR = (u8) ch;

            return ch;

            }

            #endif

            //end

            //////////////////////////////////////////////////////////////////

            #ifdef EN_USART1_RX //如果使能了接收

            //串口1中斷服務程序

            //注意,讀取USARTx->SR能避免莫名其妙的錯誤

            u8 USART_RX_BUF[64]; //接收緩沖,最大64個字節(jié).

            //接收狀態(tài)

            //bit7,接收完成標志

            //bit6,接收到0x0d

            //bit5~0,接收到的有效字節(jié)數(shù)目

            u8 USART_RX_STA=0; //接收狀態(tài)標記


            上一頁 1 2 下一頁

            關鍵詞: STM32串口通

            評論


            技術專區(qū)

            關閉