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

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

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

串口調(diào)試助手如何將數(shù)據(jù)發(fā)送至STM32

貿(mào)澤電子設(shè)計(jì)圈 ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-09-26 14:41 ? 次閱讀
本例程通過(guò)PC機(jī)的串口調(diào)試助手將數(shù)據(jù)發(fā)送至STM32,接收數(shù)據(jù)后將所接收的數(shù)據(jù)又發(fā)送至PC機(jī),具體下面詳談。。。

實(shí)例一:

void USART1_IRQHandler(u8 GetData){u8 BackData;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中斷產(chǎn)生{USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中斷標(biāo)志.GetData = UART1_GetByte(BackData); //也行GetData=USART1->DR;USART1_SendByte(GetData); //發(fā)送數(shù)據(jù)GPIO_SetBits(GPIOE, GPIO_Pin_8 ); //LED閃爍,接收成功發(fā)送完成delay(1000);GPIO_ResetBits(GPIOE, GPIO_Pin_8 );}}

這是最基本的,將數(shù)據(jù)接收完成后又發(fā)送出去,接收和發(fā)送在中斷函數(shù)里執(zhí)行,main函數(shù)里無(wú)其他要處理的。

優(yōu)點(diǎn):簡(jiǎn)單,適合很少量數(shù)據(jù)傳輸。

缺點(diǎn):無(wú)緩存區(qū),并且對(duì)數(shù)據(jù)的正確性沒(méi)有判斷,數(shù)據(jù)量稍大可能導(dǎo)致數(shù)據(jù)丟失 。

實(shí)例二:

void USART2_IRQHandler(){if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //中斷產(chǎn)生{USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除中斷標(biāo)志Uart2_Buffer[Uart2_Rx_Num] = USART_ReceiveData(USART2);Uart2_Rx_Num++;}

if((Uart2_Buffer[0] == 0x5A)&&(Uart2_Buffer[Uart2_Rx_Num-1] == 0xA5)) //判斷最后接收的數(shù)據(jù)是否為設(shè)定值,確定數(shù)據(jù)正確性Uart2_Sta=1;

if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) //溢出{USART_ClearFlag(USART2,USART_FLAG_ORE); //讀SRUSART_ReceiveData(USART2); //讀DR}}

if( Uart2_Sta ){for(Uart2_Tx_Num=0;Uart2_Tx_Num USART2_SendByte(Uart2_Buffer[Uart2_Tx_Num]); //發(fā)送數(shù)據(jù)Uart2_Rx_Num = 0; //初始化Uart2_Tx_Num = 0;Uart2_Sta = 0;}

這是加了數(shù)據(jù)頭和數(shù)據(jù)尾的接收方式,數(shù)據(jù)頭和尾的個(gè)數(shù)可增加,此處只用于調(diào)試之用。中斷函數(shù)用于接收數(shù)據(jù)以及判斷數(shù)據(jù)的頭尾,第二個(gè)函數(shù)在main函數(shù)里按照查詢方式執(zhí)行。

優(yōu)點(diǎn):較簡(jiǎn)單,采用緩存區(qū)接收,對(duì)提高數(shù)據(jù)的正確行有一定的改善 。

缺點(diǎn):要是第一次數(shù)據(jù)接收錯(cuò)誤,回不到初始化狀態(tài),必須復(fù)位操作 。

實(shí)例三:

void USART2_IRQHandler(){if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //中斷產(chǎn)生{USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除中斷標(biāo)志.Uart2_Buffer[Uart2_Rx] = USART_ReceiveData(USART2);Uart2_Rx++;Uart2_Rx &= 0x3F; //判斷是否計(jì)數(shù)到最大}if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) //溢出{USART_ClearFlag(USART2,USART_FLAG_ORE); //讀SRUSART_ReceiveData(USART2); //讀DR}}if( Uart2_Tx != Uart2_Rx ){USART2_SendByte(Uart2_Buffer[Uart2_Tx]); //發(fā)送數(shù)據(jù)Uart2_Tx++;Uart2_Tx &= 0x3F; //判斷是否計(jì)數(shù)到最大}

采用FIFO方式接收數(shù)據(jù),由0x3F可知此處最大接收量為64個(gè),可變,中斷函數(shù)只負(fù)責(zé)收,另一函數(shù)在main函數(shù)里執(zhí)行,F(xiàn)IFO方式發(fā)送。

優(yōu)點(diǎn):發(fā)送和接收都很自由,中斷占用時(shí)間少,有利于MCU處理其它。

缺點(diǎn):對(duì)數(shù)據(jù)的正確性沒(méi)有判斷,一概全部接收。

實(shí)例四:

void USART2_IRQHandler(){if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //中斷產(chǎn)生{USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除中斷標(biāo)志Uart2_Buffer[Uart2_Rx] = USART_ReceiveData(USART2);Uart2_Rx++;Uart2_Rx &= 0xFF;}if(Uart2_Buffer[Uart2_Rx-1] == 0x5A) //頭Uart2_Tx = Uart2_Rx-1;if((Uart2_Buffer[Uart2_Tx] == 0x5A)&&(Uart2_Buffer[Uart2_Rx-1] == 0xA5)) //檢測(cè)到頭的情況下檢測(cè)到尾{Uart2_Len = Uart2_Rx-1- Uart2_Tx; //長(zhǎng)度Uart2_Sta=1; //標(biāo)志位}if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) //溢出{USART_ClearFlag(USART2,USART_FLAG_ORE); //讀SRUSART_ReceiveData(USART2); //讀DR}}if( Uart2_Sta ){for(tx2=0;tx2 <= Uart2_Len;tx2++,Uart2_Tx++)USART2_SendByte(Uart2_Buffer[Uart2_Tx]); //發(fā)送數(shù)據(jù)Uart2_Rx = 0; //初始化Uart2_Tx = 0;Uart2_Sta = 0;}

數(shù)據(jù)采用數(shù)據(jù)包的形式接收,接收后存放于緩存區(qū),通過(guò)判斷數(shù)據(jù)頭和數(shù)據(jù)尾(可變)來(lái)判斷數(shù)據(jù)的“包”及有效性,中斷函數(shù)用于接收數(shù)據(jù)和判斷頭尾以及數(shù)據(jù)包長(zhǎng)度,另一函數(shù)在main函數(shù)里執(zhí)行,負(fù)責(zé)發(fā)送該段數(shù)據(jù)。

優(yōu)點(diǎn):適合打包傳輸,穩(wěn)定性和可靠性很有保證,可隨意發(fā)送,自動(dòng)挑選有效數(shù)據(jù)。

缺點(diǎn):緩存區(qū)數(shù)據(jù)長(zhǎng)度要根據(jù)“包裹”長(zhǎng)度設(shè)定, 要是多次接收后無(wú)頭無(wú)尾,到有頭有尾的那一段數(shù)據(jù)恰好跨越緩存區(qū)最前和最后位置時(shí),可能導(dǎo)致本次數(shù)據(jù)丟失,不過(guò)這種情況幾乎沒(méi)有可能。

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

    關(guān)注

    48

    文章

    969

    瀏覽量

    102991
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352505

原文標(biāo)題:今天,你Get了嗎?STM32串口接收數(shù)據(jù)的幾種不同方式

文章出處:【微信號(hào):Mouser-Community,微信公眾號(hào):貿(mào)澤電子設(shè)計(jì)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    串口調(diào)試助手中發(fā)送圖片并接收問(wèn)題

    請(qǐng)教一下大神,我們用某串口調(diào)試助手發(fā)送JPG格式圖片,串口調(diào)試
    發(fā)表于 06-03 23:46

    如何通過(guò)PC機(jī)的串口調(diào)試助手數(shù)據(jù)發(fā)送至STM32

    如何通過(guò)PC機(jī)的串口調(diào)試助手數(shù)據(jù)發(fā)送至STM32?
    發(fā)表于 12-09 07:05

    PC機(jī)的串口調(diào)試助手STM32是如何進(jìn)行數(shù)據(jù)收發(fā)的

    怎樣通過(guò)PC機(jī)的串口調(diào)試助手數(shù)據(jù)發(fā)送至STM32
    發(fā)表于 12-09 07:17

    如何通過(guò)PC機(jī)的串口調(diào)試助手數(shù)據(jù)發(fā)送至STM32

    如何通過(guò)PC機(jī)的串口調(diào)試助手數(shù)據(jù)發(fā)送至STM32?
    發(fā)表于 12-13 07:26

    STM32采集溫濕度是怎樣通過(guò)串口發(fā)送至AIR800的呢

    STM32采集溫濕度是怎樣通過(guò)串口發(fā)送至AIR800的呢?怎樣通過(guò)nrf24l01實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信呢?
    發(fā)表于 12-17 07:03

    stm32串口接收數(shù)據(jù)的幾個(gè)方式

    stm32串口接收數(shù)據(jù)的幾個(gè)方式本例程通過(guò)PC機(jī)的串口調(diào)試助手
    發(fā)表于 01-26 06:56

    怎樣使用RXTXxcomm信息通過(guò)串口方式發(fā)送至單片機(jī)上呢

    怎樣使用RXTXxcomm信息通過(guò)串口方式發(fā)送至單片機(jī)上呢?發(fā)送過(guò)程中有何問(wèn)題?怎樣去解決呢?
    發(fā)表于 02-14 06:49

    串口調(diào)試助手_Android版

    常用的串口調(diào)試助手,方便進(jìn)行串口數(shù)據(jù)顯示,
    發(fā)表于 11-19 15:27 ?0次下載

    串口調(diào)試助手2.1

    串口調(diào)試助手用于串口數(shù)據(jù)收發(fā),可用16進(jìn)制發(fā)送和接收。
    發(fā)表于 04-28 16:30 ?50次下載

    串口調(diào)試助手怎么用_串口調(diào)試助手使用方法

    串口是嵌入式開(kāi)發(fā)和單片機(jī)開(kāi)發(fā)中不可缺少的外設(shè)設(shè)備,通用也要運(yùn)用于整個(gè)平臺(tái)。所以如何利用串口調(diào)試助手是十分重要的,接下來(lái)為大家介紹下如何使用串口
    發(fā)表于 11-28 16:22 ?7.2w次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b><b class='flag-5'>助手</b>怎么用_<b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b><b class='flag-5'>助手</b>使用方法

    基于STM32串口DMA發(fā)送

    使用STM32串口進(jìn)行DMA發(fā)送(Noraml模式),在某個(gè)任務(wù)中連續(xù)調(diào)用兩次發(fā)送函數(shù)log_printf(),但是發(fā)回的數(shù)據(jù)
    發(fā)表于 06-08 08:13 ?2.2w次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>串口</b>DMA<b class='flag-5'>發(fā)送</b>

    通過(guò)PC機(jī)的串口調(diào)試助手數(shù)據(jù)發(fā)送至STM32資料下載

    電子發(fā)燒友網(wǎng)為你提供通過(guò)PC機(jī)的串口調(diào)試助手數(shù)據(jù)發(fā)送至ST
    發(fā)表于 04-10 08:50 ?29次下載
    通過(guò)PC機(jī)的<b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b><b class='flag-5'>助手</b><b class='flag-5'>將</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>發(fā)送至</b><b class='flag-5'>STM32</b>資料下載

    STM32STM32CUBEMX+UART串口調(diào)試,循環(huán)接受發(fā)送數(shù)據(jù)

    STM32CUBEMX+UART串口調(diào)試,循環(huán)接受發(fā)送數(shù)據(jù)芯片型號(hào):STM32F411VET6工
    發(fā)表于 12-27 18:33 ?4次下載
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>STM32</b>CUBEMX+UART<b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b>,循環(huán)接受<b class='flag-5'>發(fā)送</b><b class='flag-5'>數(shù)據(jù)</b>

    串口調(diào)試助手免費(fèi)下載

    一個(gè)非常好用的串口調(diào)試助手,可以多條命令同時(shí)發(fā)送
    發(fā)表于 07-05 15:31 ?12次下載

    QT 串口示波器的串口調(diào)試助手功能

    串口調(diào)試助手功能: 支持傳統(tǒng)的串口調(diào)試助手的基本收發(fā)功能,同時(shí)可以刷新大量的
    發(fā)表于 07-07 15:26 ?2611次閱讀