在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

串口如何接收數(shù)據(jù) STM32串口接收數(shù)據(jù)

冬至子 ? 來源:紛紜雜談 ? 作者:CY_CHEN ? 2023-07-21 17:07 ? 次閱讀

如果采用查詢接收方式接受串口數(shù)據(jù),就會造成接收不及時,還沒接收完數(shù)據(jù),下一個數(shù)據(jù)就發(fā)過來了,就會把上一個數(shù)據(jù)覆蓋了,造成數(shù)據(jù)丟失。所以可以通過中斷去接收數(shù)據(jù),開啟接收中斷。而發(fā)送數(shù)據(jù),是我們自己決定的,只要調(diào)用函數(shù)就可以了,不需要開啟中斷。

要串口接收數(shù)據(jù),需要在昨天串口發(fā)送數(shù)據(jù)的基礎(chǔ)上,再設(shè)置中斷接收函數(shù)。接收數(shù)據(jù)的中斷時間有準(zhǔn)備好讀取接收到的數(shù)據(jù)、檢測到空閑線路,事件標(biāo)志分別為RXNE、IDLE。對應(yīng)狀態(tài)寄存器(USART_SR)的位5和位4。相應(yīng)的使能控制位RXNEIE、IDLEIE在控制寄存器 1 (USART_CR1)的位5和位4。

圖片

圖片

根據(jù)寄存器配置中斷

//設(shè)置中斷
  USART1- >SR       =    0;                    //清中斷標(biāo)志
  //外設(shè)中斷
  USART1- >CR1      |=    1< 5;                  //開接收中斷
  USART1- >CR1      |=    1< 4;                  //開空閑中斷
  //nvic
  prigroup = NVIC_GetPriorityGrouping();        //得到優(yōu)先級分組
  priority = NVIC_EncodePriority(prigroup,1,2);  //優(yōu)先級編碼
  NVIC_SetPriority(USART1_IRQn,priority);        //設(shè)置中斷優(yōu)先級
//    //
//  NVIC- >ISER[EXTI2_IRQn/32] = 1< 
  NVIC_EnableIRQ(USART1_IRQn);                  //使能USART1中斷

圖片

接著就是中斷函數(shù)來接收并處理得到的數(shù)據(jù)。需要標(biāo)志判斷是否進入接收中斷,還要設(shè)置一個一定長度的數(shù)組保存數(shù)據(jù)寄存器的數(shù)據(jù)。

中斷函數(shù)

u8 Usart1_buf[USART1_BUF_SIZE] = {0};      //定義數(shù)組保存數(shù)據(jù)
u8 Usart1_OK = 0;                          //接收數(shù)據(jù)標(biāo)志位


void USART1_IRQHandler()
{
  static u16 cnt = 0;

  if((USART1- >SR & (1< 5)) != 0)              //接收中斷
  {
    Usart1_buf[cnt] = USART1- >DR;              //把數(shù)據(jù)寄存器的值保存到數(shù)組中
    cnt++;
    if(cnt == USART1_BUF_SIZE - 1)            //判斷數(shù)組是否裝滿
    {
      Usart1_buf[cnt] = '?';
      Usart1_OK = 1;                          //接收數(shù)據(jù)標(biāo)志
      cnt = 0;
    }
  }
  else if((USART1- >SR & (1< 4)) != 0)          //空閑中斷
  {
    Usart1_buf[cnt]  = '?';
    Usart1_OK = 1;                            //接收數(shù)據(jù)標(biāo)志
    cnt = 0;
  }
  else
    USART1- >SR = 0;
}

主函數(shù)

#include "stm32f4xx.h"
#include "usart.h"
#include "stdio.h"
#include "string.h"


int main()
{
  Usart1_Init(9600);

  while(1)
  {
    if(Usart1_OK == 1)
    {
      Usart1_OK = 0;
      if(strcmp((const char *)Usart1_buf,"Hello!") == 0)//判斷接收到的數(shù)據(jù)
        Usart1_SendStr("Hi!rn"); 
      else 
        Usart1_SendStr("What do you say?rn");
    }
  }
}

在昨天發(fā)送程序的基礎(chǔ)上,再加上以上程序,就可以進行中斷接收數(shù)據(jù)了。其中string.h頭文件中,有很多函數(shù)可以處理字符串,可以用來方便地處理串口接收的數(shù)據(jù)。

圖片

圖片

最后編譯完燒入程序,從串口發(fā)送數(shù)據(jù)到STM32,達到預(yù)期效果,串口中斷接收就成功了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19372

    瀏覽量

    230437
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10914

    瀏覽量

    356724
  • 數(shù)據(jù)寄存器

    關(guān)注

    0

    文章

    33

    瀏覽量

    7778
  • 串口中斷
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    13959
  • 狀態(tài)寄存器
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    7113
收藏 人收藏

    評論

    相關(guān)推薦

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)方式總結(jié)

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)方式總結(jié)
    的頭像 發(fā)表于 09-19 09:14 ?7812次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>發(fā)送<b class='flag-5'>數(shù)據(jù)</b>和<b class='flag-5'>接收</b><b class='flag-5'>數(shù)據(jù)</b>方式總結(jié)

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)方式

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)方式總結(jié)!
    發(fā)表于 01-25 06:54

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)的方式有哪些?

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)的方式有哪些?
    發(fā)表于 12-02 07:15

    STM32串口是如何去實現(xiàn)數(shù)據(jù)發(fā)送與接收

    什么是串口復(fù)位呢?STM32串口是如何去實現(xiàn)數(shù)據(jù)發(fā)送與接收的?
    發(fā)表于 12-10 06:16

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)淺析

    STM32串口發(fā)送數(shù)據(jù)最直接的方式是什么呢?STM32串口接收
    發(fā)表于 02-18 06:09

    labview串口接收數(shù)據(jù)_labview串口被動接收數(shù)據(jù)

    字節(jié)的數(shù)據(jù)。最后,用一個狀態(tài)機來實現(xiàn)相鄰兩個字符的判斷。如果串口在相鄰兩個字符之間接收時間大于50ms,則判斷為兩個獨立的字符
    發(fā)表于 01-15 15:49 ?6.7w次閱讀
    labview<b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>數(shù)據(jù)</b>_labview<b class='flag-5'>串口</b>被動<b class='flag-5'>接收</b><b class='flag-5'>數(shù)據(jù)</b>

    STM32串口接收陀螺儀數(shù)據(jù)-2016-04-15

    stm32f103串口接收MPU6050數(shù)據(jù)
    發(fā)表于 05-23 10:24 ?21次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>接收</b>陀螺儀<b class='flag-5'>數(shù)據(jù)</b>-2016-04-15

    STM32串口通信數(shù)據(jù)亂碼的相關(guān)問題

    STM32串口通信以及溫度采集搞定,其中主要遇到STM32系列單片機時鐘樹的問題,串口通信遇到串口調(diào)試助手能夠
    發(fā)表于 06-22 08:01 ?1.2w次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>通信<b class='flag-5'>數(shù)據(jù)</b>亂碼的相關(guān)問題

    STM32串口接收不定長數(shù)據(jù)的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是STM32串口接收不定長數(shù)據(jù)的程序免費下載。
    發(fā)表于 08-26 08:00 ?62次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>接收</b>不定長<b class='flag-5'>數(shù)據(jù)</b>的程序免費下載

    stm32 串口接收不定長度數(shù)據(jù)及黏包處理 + 串口DMA接收

    ,那么stm32串口是如何實現(xiàn)接收不定長度數(shù)據(jù)的呢? 串口接收
    發(fā)表于 12-23 19:09 ?27次下載
    <b class='flag-5'>stm32</b> <b class='flag-5'>串口</b><b class='flag-5'>接收</b>不定長度<b class='flag-5'>數(shù)據(jù)</b>及黏包處理 + <b class='flag-5'>串口</b>DMA<b class='flag-5'>接收</b>

    stm32串口DMA數(shù)據(jù)接收不完整問題說明

    stm32串口DMA數(shù)據(jù)接收不完整問題說明最近做了一個項目需要用串口接收模塊端的應(yīng)答
    發(fā)表于 12-24 19:37 ?21次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>串口</b>DMA<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>接收</b>不完整問題說明

    關(guān)于STM32串口3的使用,接收并解析一幀數(shù)據(jù)

    關(guān)于STM32串口3的使用,接收并解析一幀數(shù)據(jù)當(dāng)stm32串口1被使用時,我們可以使用其他
    發(fā)表于 12-28 19:15 ?40次下載
    關(guān)于<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>3的使用,<b class='flag-5'>接收</b>并解析一幀<b class='flag-5'>數(shù)據(jù)</b>

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)環(huán)形緩沖區(qū)簡介??在單片機中串口通信是我們使用最頻繁的,使用串口
    發(fā)表于 12-28 19:24 ?31次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>接收</b> --環(huán)形緩沖區(qū)

    STM32串口中斷接收不定長報文介紹

    本項目中,需要使用STM32的USART6串口與FPGA板(下位機)通信,需要發(fā)送和接收數(shù)據(jù),有報文應(yīng)答機制。
    的頭像 發(fā)表于 10-26 11:01 ?1163次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>中斷<b class='flag-5'>接收</b>不定長報文介紹

    stm32虛擬串口接收數(shù)據(jù)處理

    STM32中使用虛擬串口時,我們需要處理接收數(shù)據(jù)接收到的數(shù)據(jù)可能是來自其他設(shè)備的傳感器
    的頭像 發(fā)表于 12-20 11:22 ?2385次閱讀
    主站蜘蛛池模板: 亚洲深夜| 国产色婷婷免费视频| 成人爽a毛片在线视频网站| 全免费一级午夜毛片| 日夜夜操| 国产在线视频网站| 天天操天天噜| 成人mv高清在线| 91大神大战丝袜美女在线观看| 免费国产在线视频| 久久久久久青草大香综合精品| 久久久99精品免费观看精品| 狠狠色噜狠狠狠狠色综合久| 欧美zoozzooz在线观看| 女人被免费网站视频在线| 四虎国产在线| 日韩欧美中文在线| 四虎国产精品免费久久影院| 色爽女视频| 六月婷婷激情| wwwww色| 天天干夜夜叭| 成片免费的禁v影片| 97爱sese| 亚洲一级毛片免费观看| 最近2018中文字幕2019视频| 亚洲另类激情综合偷自拍| 高清一区二区| 色多多最新地址福利地址| 手机毛片| 可以免费看的黄色片| 97久久人人| 精品午夜视频| 日本亚洲免费| 色狠狠成人综合网| 国产精品永久免费自在线观看| 天天舔天天操天天干| 69国产成人精品午夜福中文| 羞羞色院91精品网站| 国产福利vr专区精品| 日本三级视频|