<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32之串口通信

          作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
          實驗?zāi)康模?div class="xhhxr5d" id="sina_keyword_ad_area2">

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

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

          實驗平臺:

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

          硬件接口:

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

          相關(guān)寄存器:

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

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

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

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

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


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

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

          都是通過這3 個寄存器來設(shè)置的

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

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

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

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

          程序設(shè)計:

          (注:本人的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)標(biāo)記

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

          #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)

          //標(biāo)準(zhǔn)庫需要的支持函數(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中斷服務(wù)程序

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

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

          //接收狀態(tài)

          //bit7,接收完成標(biāo)志

          //bit6,接收到0x0d

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

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


          上一頁 1 2 下一頁

          關(guān)鍵詞: STM32串口通

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();