日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2024年10月08日(星期二)

正在發(fā)生

2019年10月08日 | stm32 實現(xiàn)串口中斷接收浮點型、整型數(shù)據(jù)

發(fā)布者:來來去去來來 來源: eefocus關(guān)鍵字:stm32  串口中斷  接收浮點型  整型數(shù)據(jù) 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

之前已經(jīng)實現(xiàn)了在stm32中移植printf函數(shù)和scanf函數(shù),相信很多網(wǎng)友也已經(jīng)熟練掌握這個技能了。最近在項目中遇到了問題,需要在串口助手中向下位機(jī)stm32寫整型或者浮點型數(shù)據(jù)。這個時候只能使用串口中斷接收函數(shù)。


void USART1_IRQHandler(void)


{


       uint8_t  ch;


       while(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)


      {


           ch=USART_ReceiveData(USART1);


       }


}


但是很快發(fā)現(xiàn)程序這樣寫過于簡陋,只能接收單個字符,不符合我的要求,然后參考網(wǎng)上例程又將串口接收中斷函數(shù)進(jìn)行改動。改為如下形式:


#define RxBufferSize   100     //接收數(shù)組定義盡量大點


uint8_t RxBuffer1[RxBufferSize  ];


__IO uint8_t RxCounter= 0x00;    //接收計數(shù)


uint8_t  NbrOfDataToRead = RxBufferSize  ;  


/***************以上變量均為全局變量******************/




void USART1_IRQHandler(void)

{

      while(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

     {


           RxBuffer1[RxCounter++] = USART_ReceiveData(USART1);


           if(RxCounter1 == NbrOfDataToRead1)     //如果達(dá)到最大計數(shù),則不進(jìn)行接收,中斷關(guān)閉

           {

                USART_ITConfig(USARTy, USART_IT_RXNE, DISABLE);

           }

    }

}


上面的方面實現(xiàn)了將串口中斷接收到的字符保存在數(shù)組中,可是問題還是來了,就是保存在數(shù)組中的數(shù)據(jù)是單個字符,并不能是我需要的整型或者浮點型數(shù)據(jù),不能直接使用。感覺又白忙活了一天。


又在網(wǎng)上找資料,有人提了頭文件#include "stdio.h"中的    sscanf函數(shù),其函數(shù)原型為:


#pragma __scanf_args

extern _ARMABI int sscanf(const char * __restrict /*s*/,

                    const char * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2)));

   /*

    * is equivalent to fscanf except that the argument s specifies a string

    * from which the input is to be obtained, rather than from a stream.

    * Reaching the end of the string is equivalent to encountering end-of-file

    * for the fscanf function.

    * Returns: the value of the macro EOF if an input failure occurs before any

    *          conversion. Otherwise, the scanf function returns the number of

    *          input items assigned, which can be fewer than provided for, or

    *          even zero, in the event of an early matching failure.


看到了這里終于找到出路了,sscanf()函數(shù)的作用很強大,這里不再贅述,感興趣的網(wǎng)友可以自己百度下,介紹的很詳細(xì),我在這里只提及它的一個功能,就是可以把字符數(shù)組轉(zhuǎn)換成字符串,大家想想,只要能夠得到字符串,那么剩下的就簡單多了。話不多說,直接來干貨,下面給出如何將串口中斷函數(shù)接收到的字符數(shù)組轉(zhuǎn)換成字符串:


void USART1_IRQHandler(void)

{

    static __IO uint8_t i=0;

    char str1[100];

    if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)

    {     

        ch[i++] = USART_ReceiveData(USART1);

        if(ch[i-1] == '*')    

        {

            sscanf(ch,"%[^*]",str1);  //利用sscanf函數(shù)把字符數(shù)組轉(zhuǎn)換成字符串,"%[^*]"表示取數(shù)據(jù)到*為止

            convalue=atof(str1);            //利用atof函數(shù)把字符串轉(zhuǎn)換成浮點型數(shù)據(jù)

            i=0;

        }

    }

}


上面的程序就是終極程序了,我來大概說明下:同理我先把接收的數(shù)據(jù)放到字符數(shù)組ch[]里面,我的結(jié)束標(biāo)志‘*’,當(dāng)判斷接收到‘*'時,表示接收完畢,然后進(jìn)入if語句,利用sscanf函數(shù),把字符數(shù)組轉(zhuǎn)換成字符串str1,然后我用函數(shù)atof()把字符串str1轉(zhuǎn)換成浮點型數(shù)據(jù)并賦值給全局變量convalue,以便隨時調(diào)用。


這樣我就可以在串口上發(fā)送數(shù)據(jù),通過串口中斷接收函數(shù),得到數(shù)據(jù)。

關(guān)鍵字:stm32  串口中斷  接收浮點型  整型數(shù)據(jù) 引用地址:stm32 實現(xiàn)串口中斷接收浮點型、整型數(shù)據(jù)

上一篇:STM32中的一些小坑-ADC通道設(shè)置-寫FLASH
下一篇:STM32F1XX系列 HAL庫 CAN大量收發(fā)數(shù)據(jù)

推薦閱讀

據(jù)外媒報道,雷諾集團(tuán)在巴黎車展上發(fā)布了一款機(jī)器人概念車(robo-vehicle concept)——雷諾EZ-ULMO,這是一款電動車輛,也是也是一款互聯(lián)共享移動出行方案,旨在為用戶提供高端的出行體驗。 EZ-ULTIMO概念車是雷諾新車三部曲中的重要一環(huán),與未來城市移動出行EZ-GO及共享移動出行EZ-PRO共同展現(xiàn)了雷諾的未來愿景。 該款概念車可提供按需服務(wù),可按...
近幾年,智能機(jī)器人進(jìn)入我們的生活的速度遠(yuǎn)遠(yuǎn)超出我們的想象,從制造業(yè)的切割機(jī)器人、裝配機(jī)器人、搬運機(jī)器人,到服務(wù)行業(yè)的物流機(jī)器人、建筑機(jī)器人、場地機(jī)器人,再到家庭機(jī)器人,智能機(jī)器人革命正在向各個領(lǐng)域深度滲透。 新一輪智能機(jī)器人革命下,制造企業(yè)又該如何調(diào)整結(jié)構(gòu)?S&A特域冷水機(jī)總結(jié)了兩點。 一、不斷創(chuàng)新,掌握核心技術(shù) 目前,激光制造...
NVIDIA發(fā)布重磅應(yīng)用、系統(tǒng)以及與寶馬集團(tuán)合作 NVIDIA提出了下一代計算的愿景,該愿景將全球信息經(jīng)濟(jì)的重心從服務(wù)器轉(zhuǎn)移到了新型的強大且靈活的數(shù)據(jù)。 NVIDIA創(chuàng)始人兼首席執(zhí)行官在其加州住宅的廚房中錄制的六集同時發(fā)布的主題演講中,介紹了NVIDIA最近對Mellanox的收購,還有重盼所歸的基于NVIDIA Ampere 架構(gòu)的新產(chǎn)品以及重要的最新軟件技術(shù)。 這場...

史海拾趣

小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved