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

          新聞中心

          STM32之串口通信

          作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏

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

          void USART1_IRQHandler(void)

          {

          u8 res;

          if(USART1->SR&(1<<5))//接收到數(shù)據(jù)

          {

          res=USART1->DR;

          if((USART_RX_STA&0x80)==0)//接收未完成

          {

          if(USART_RX_STA&0x40)//接收到了0x0d

          {

          if(res!=0x0a)

          USART_RX_STA=0;//接收錯誤,重新開始

          else

          USART_RX_STA|=0x80; //接收完成了

          }else //還沒收到0X0D

          {

          if(res==0x0d)

          USART_RX_STA|=0x40;

          else

          {

          USART_RX_BUF[USART_RX_STA&0X3F]=res;

          USART_RX_STA++;

          if(USART_RX_STA>63)USART_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收

          }

          }

          }

          }

          }

          #endif

          //該函數(shù)的重點就是判斷接收是否完成,通過檢測是否收到0X0D、0X0A 的連續(xù)2 個字節(jié)//(0X0D 后跟0X0A 表示回車鍵)來檢測是否結(jié)束。當(dāng)檢測到這個結(jié)束序列之后,就會置//位USART_RX_STA 的最高為來標(biāo)記已經(jīng)收到了一次數(shù)據(jù)。之后等待外部函數(shù)清空該位//之后才開始第二次接收。所接收的數(shù)據(jù)全部存放在USART_RX_BUF 里面,一次接收數(shù)//據(jù)不能超過64個字節(jié),否則被丟棄。

          //初始化IO 串口1

          //pclk2:PCLK2時鐘頻率(Mhz)

          //bound:波特率

          //CHECK OK

          //091209

          void uart_init(u32 pclk2,u32 bound)

          {

          float temp;

          u16 mantissa;

          u16 fraction;

          temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV

          mantissa=temp; //得到整數(shù)部分

          fraction=(temp-mantissa)*16; //得到小數(shù)部分

          mantissa<<=4;

          mantissa+=fraction;

          RCC->APB2ENR|=1<<2; //使能PORTA口時鐘

          RCC->APB2ENR|=1<<14; //使能串口時鐘

          GPIOA->CRH&=0XFFFFF00F;

          GPIOA->CRH|=0X000008B0;//IO狀態(tài)設(shè)置

          RCC->APB2RSTR|=1<<14; //復(fù)位串口1

          RCC->APB2RSTR&=~(1<<14);//停止復(fù)位

          //波特率設(shè)置

          USART1->BRR=mantissa; // 波特率設(shè)置

          USART1->CR1|=0X200C; //1位停止,無校驗位.

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

          //使能接收中斷

          USART1->CR1|=1<<8; //PE中斷使能

          USART1->CR1|=1<<5; //接收緩沖區(qū)非空中斷使能

          MY_NVIC_Init(3,3,USART1_IRQChannel,2);//組2,最低優(yōu)先級

          #endif

          }

          主函數(shù)

          #include

          #include"common.h"

          int main(void)

          {

          u8 t;

          u8 len;

          u16 times=0;

          Stm32_Clock_Init(9); //系統(tǒng)時鐘設(shè)置

          delay_init(72); //延時初始化

          uart_init(72,9600); //串口初始化為9600

          while(1)

          {

          if(USART_RX_STA&0x80)

          {

          len=USART_RX_STA&0x3f;//得到此次接收到的數(shù)據(jù)長度

          printf("n您發(fā)送的消息為:n");

          for(t=0;t

          {

          USART1->DR=USART_RX_BUF[t];

          while((USART1->SR&0X40)==0);//等待發(fā)送結(jié)束

          }

          printf("nn");//插入換行

          USART_RX_STA=0;

          }else

          {

          times++;

          if(timesP00==0)

          {

          printf("n 簡單的串口實驗n");

          }

          if(times 0==0)printf("請輸入數(shù)據(jù),以回車鍵結(jié)束n");

          delay_ms(10);

          }

          }

          }

          實驗現(xiàn)象:




          上一頁 1 2 下一頁

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

          評論


          相關(guān)推薦

          技術(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); })();