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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

GD32F310開發板串口的數據接收與數字自動轉換

冬至配餃子 ? 來源:兆易創新GD32 MCU ? 作者:卡文迪許怪 ? 2022-09-22 16:43 ? 次閱讀

串口的功能網上有很多,但是處理串口的數據需要一些小手段,但是str的函數有點才長,不適用長的數據接收,所以給310搞一個接收數據的輕量級API的小玩意。

開發環境

Keil-MDK 5.34

Windows10

固件庫-GD32F3x0_Firmware_Library_V2.2.0

新建工程就不贅述,看這個

啟動串口

void uart_init(void)
{
    //使能時鐘
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_USART0);
    
    //Tx PA9 復用推挽輸出
    gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_9);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
    //Rx    PA10
    gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_10);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ, GPIO_PIN_10);
    nvic_irq_enable(USART0_IRQn,0,0);
    gpio_af_set(GPIOA,GPIO_AF_1,GPIO_PIN_9|GPIO_PIN_10);
    /*USART 設置*/
    usart_deinit(USART0);
    usart_baudrate_set(USART0,115200);
    usart_word_length_set(USART0,USART_WL_8BIT);
    usart_stop_bit_set(USART0,USART_STB_1BIT);
    usart_parity_config(USART0,USART_PM_NONE);
    usart_hardware_flow_rts_config(USART0,USART_RTS_DISABLE);
    usart_hardware_flow_cts_config(USART0,USART_CTS_DISABLE);
    usart_receive_config(USART0,USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0,USART_TRANSMIT_ENABLE);
    usart_enable(USART0);
    usart_interrupt_enable(USART0,USART_INT_RBNE);
    usart_interrupt_enable(USART0, USART_INT_IDLE);         /* 使能USART0空閑中斷 */
}
//串口中斷配置
uint16_t t=0;
void USART0_IRQHandler(void)
{
    if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_RBNE))
    {
        gd_led_toggle();
        t=usart_data_receive(USART0);//接收數據
        usart_data_transmit(USART0,USART_RX[t]);
        usart_interrupt_disable(USART0,USART_INT_RBNE);
        usart_data_transmit(USART0,t);
    }else if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_IDLE))
    {
        usart_interrupt_disable(USART0,USART_INT_IDLE);
    }
}

數據處理API

struct _Chang_Num
{
    char *Source;
    char Sign[8];
    float NUM[8];
    char flag;
};

char Data_Chang_NUM (struct _Chang_Num *Item)
{
    char Data_Array[12] = {0};                  //數字的str數
    char str[36];                               //裝source數據到這個緩存區,這個緩存區是要變的
    char Data;
    char n,m = 0;
    char i,flag = 1;                            //i是當前找的是 第幾個 Sign
    char Find_Time = strlen(Item->Sign);        //要找多少個
    char Length = strlen(Item->Source);         //源的長度
    strcpy(str,Item->Source);
    if(Length > 36)
        Length = 36;
    for (i = 0; i < Find_Time; i++)
    {
        flag = 0;
        for(n = 0;n < Length;n++)
        {
            Data = str[n];
            if(str[n] == Item->Sign[i])           //找到標志
            {
                str[n] = 0;
                flag = 1;                       //開始識別str
                m = 0;
            }
            if(flag)
            {
                if((str[n] <= '9' && str[n] >= '0') || str[n] == '.' || str[n] == '-')
                {
                    Data_Array[m] = str[n];               //把數字相關str的裝起來
                    m++;                                //m是數字在str的長度
                }
                else
                {
                    if(m > 0)                            //數字部分結束
                    {
                        if(Data_Array[m-1] == '.' || Data_Array[m-1] == '-')    //不讓最后一位為 '.' and '-'
                            Data_Array[m-1] = '\0';
                        else
                            Data_Array[m] = '\0';
                            
                        break;
                    }
                }
            }
        
        }
        Item->NUM[i] = atof(Data_Array);
        // Data_Replace ("123",Data_Array,0,sizeof(Data_Array));
    }
    return Item->flag;
}

配置好你想要的參數在結構體中,然后將串口的緩沖區放入這個函數即可。

將printf函數映射到串口,看這里

struct _Chang_Num Item_n = {
    .Source = "a:3.14......,b:3322..,c:-9.0..-",
    .Sign = {':',':',':'},
};
int main (void)
{
    printf("sign :%s",Item_n.Sign);
    Data_Chang_NUM (&Item_n);
    for (char i = 0; i < 3; i++)
    {
        printf("num %d :%.2f \n",i,Item_n.NUM[i]);
    }
    while(1);
}

API效果

poYBAGMsH3aAMsOaAAAy5BJW6YI852.png




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • API
    API
    +關注

    關注

    2

    文章

    1501

    瀏覽量

    62025
  • 數據接收
    +關注

    關注

    0

    文章

    12

    瀏覽量

    7813
  • GD32F3
    +關注

    關注

    0

    文章

    11

    瀏覽量

    3854
收藏 人收藏

    評論

    相關推薦

    GD32330C-START開發板試用體驗:+ 串口USART收發數據

    1.使用串口首先我們得根據GD32F330C8T6芯片的datasheet找到對應的引腳。在GD32330C-START開發板原理圖中,查看該引腳有沒有引出來。 (1)在
    發表于 11-08 11:28 ?5435次閱讀
    <b class='flag-5'>GD</b>32330C-START<b class='flag-5'>開發板</b>試用體驗:+ <b class='flag-5'>串口</b>USART收發<b class='flag-5'>數據</b>

    GD32F310開發板試用--基于RTT Nano的RTT軟件包使用

    微控制器。GD32F310系列MCU最高主頻可達72MHz并支持DSP指令運算。配備了64KB的內置Flash及48KB的SRAM,內核訪問閃存高速零等待。采用LQFP32封裝。 在評測期間,我移植
    的頭像 發表于 08-09 11:17 ?1823次閱讀

    GD32F310K-START開發板上實現ucois-II的移植的設計

    1、ucos-II在GD32F310開發板上的移植介紹μC/OS-II由Micrium公司提供,是一個可移植、可固化的、可裁剪的、占先式多任務實時內核,它適用于多種微處理器,微控制器和數字處理芯片
    發表于 08-22 16:26

    GD32F310開發板實現四線OLED顯示的設計

    1、在GD32F310開發板實現四線OLED顯示的設計  本次采用四線OLED與開發板實現通信,使用模擬IIC方式,在自己平時的應用中OLED屏幕還是用的比較多的,本文目標是實現OLED顯示功能
    發表于 08-31 15:25

    GD32F310開發板試用之硬件SPI驅動0.96寸LCD

    1、GD32F310開發板試用之硬件SPI驅動0.96寸LCD  SPI 簡介及特點  具有全雙工、半雙工和單工模式的主從操作。  16位寬度,獨立的發送和接收緩沖區。  8位或16位數據
    發表于 09-22 15:31

    GD32F310開發板串口的一些特殊功能介紹

    串口主要用于通信和調試信息輸出,今天仔細觀察GDF310數據手冊發現一些特殊功能:1、自動波特率檢測;2、數據發送/接受,高位在前/后;3
    發表于 09-22 15:40

    基于GD32F310開發板完成超頻及ADC極限采樣率實驗

    主力的型號,供貨情況更加穩定一些,且價格上比較有優勢。所以當在公眾號中看到有GD32F310開發板試用的時候,就申請了來。趁著周末的時間來試用一下同時評估一下用來替換現在使用的GD32F330的可能性
    發表于 09-29 15:35

    GD32F310上對浮點DSP運算及Modbus移植進行測評

    低成本平臺也需要一款性能強,價格優的芯片,GD32F310即可作為考慮。基于此,測評一方面考慮其運算性能,另一方面考慮其工控通信功能。2、浮點DSP運算測評從數據手冊可以看到,該款芯片支持FPU,集成
    發表于 09-30 11:09

    基于GD32F310開發板的CMSIS-DAP燒錄與定時器采集脈寬問題

    1、CMSIS-DAP上電只能燒錄一次問題解決&定時器脈寬采集  GD32F310擁有TSSOP20、QFN28、QFN32、LQFP32以及LQFP48共5種封裝類型,采用Arm
    發表于 09-30 12:04

    基于GD32F310開發板的AD多通道交流采樣計算

    1、基于GD32F310開發板的AD多通道交流采樣計算  很幸運能夠有機會試用兆易公司的GD32F310開發板。本次使用中,我將使用開發板
    發表于 09-30 14:29

    基于GD32F310開發板的RT-Thread Shell移植及調試心得

      GD32F310系列采用Arm Cortex-M4內核,主頻達到72MHz,配備了16KB到64KB的嵌入式閃存及4KB到8KB的SRAM。片上集成了多達5個16位通用定時器、1個16位基本定時器和1
    發表于 09-30 14:47

    基于GD32F310開發板移植FreeRTOS的步驟詳解

    1、GD32F310移植FreeRTOS  開發板信息  我們在來看看關于這款開發板:  GD32F310K-START 評估使用
    發表于 10-10 18:07

    基于GD32F310開發板在rt-thread上添加finsh及其shell功能

    1、GD32F310開發板試用+finsh/shell添加與進程STACK優化  上一次只是移植了rt-thread nano的內核,但rt-thread的finsh/shell,是一大很有特點
    發表于 11-08 16:05

    GD32F310開發板上移植FreeRTOS的步驟相關資料分享

    的FreeRTOS版本為:v202112.00  開發板信息  我們在來看看關于這款開發板:  GD32F310K-START 評估使用 GD32
    發表于 11-08 16:58

    如何利用GD32F310讀取HDC1080環境溫濕度

    本次試用目的是利用GD32F310的I2C0實現對HDC1080的初始化及讀取環境溫濕度,并利用UART口在電腦上顯示出來。
    的頭像 發表于 04-15 15:23 ?2937次閱讀
    如何利用<b class='flag-5'>GD32F310</b>讀取HDC1080環境溫濕度
    主站蜘蛛池模板: 天天曰天天干| 91福利网winktv| yiren22亚洲综合高清一区| 中文一级黄色片| 女人张开双腿让男人桶爽免 | 99青草| 国产精品9999| 亚洲成在线| 国产精品伦理久久久久| www.色涩涩.com| 五月婷婷丁香综合网| 成人99国产精品一级毛片| a级午夜毛片免费一区二区| 亚洲成人av| 丁香婷婷影院| 好大好硬好深好爽视频h| 三级成人影院| 手机在线免费视频| 精品国产自在现线看久久| 久久综合中文字幕| 国产精品美女久久久久网| 亚洲三级毛片| 7m视频精品凹凸在线播放| 在线a亚洲老鸭窝天堂新地址 | 美女黄视频免费| 久久国产精品岛国搬运工| 亚洲qingse中文久久网| 91成人免费在线视频| 乡村乱人伦短小说| 激情五月婷婷丁香| 亚洲haose在线观看| 日韩欧美中文字幕在线播放| 日日干日日爽| 香港三级理论在线观看网站| 午夜影院在线观看| 在线精品一区二区三区| 4hc44四虎www视频| 狠狠干精品| 自拍偷拍福利| 操他射他影院| 又长又大又粗又硬3p免费视频|