久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12756|回復: 14
收起左側

求助:我用stm32f103串口接收數據,怎么處理接收后的數據呢?

  [復制鏈接]
ID:331360 發表于 2018-8-16 18:41 | 顯示全部樓層 |閱讀模式
5黑幣
我用stm32f103串口接收數據,怎么處理接收后的數據呢?
比如說,串口接收數據為數字1,stm32怎么樣識別這個數字1

回復

使用道具 舉報

ID:389552 發表于 2018-8-24 10:27 | 顯示全部樓層
C語言的標準庫里有一個函數叫int atoi(const char *nptr);
頭文件, #include <stdlib.h>
回復

使用道具 舉報

ID:389529 發表于 2018-8-24 10:25 | 顯示全部樓層
讀出來存在相應的數組里,有空就去處理,怎么處理要看需求
回復

使用道具 舉報

ID:381818 發表于 2018-8-24 09:35 | 顯示全部樓層
如果你是16進制發送的話,直接if判斷接收是否為1就可以了,如果不是的話你就判斷是否位字符“1”
回復

使用道具 舉報

ID:280876 發表于 2018-8-23 20:12 | 顯示全部樓層
這是我寫modbus串口中斷處理函數,你看一下

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

void USART1_IRQHandler(void)
{
  u8 res;          
  if((__HAL_UART_GET_FLAG(&USART1_RS485Handler,UART_FLAG_RXNE)!=RESET))  //接收中斷
  {                
    HAL_UART_Receive(&USART1_RS485Handler,&res,1,1000);
    if(RS485_RX_CNT<2047)
    {
      RS485_RX_BUFF[RS485_RX_CNT]=res;                //記錄接收到的值
      RS485_RX_CNT++;                              //接收數據增加1
      __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);  //清除中斷標志
      __HAL_TIM_SetCounter(&htim3,0);  //當接收到一個新的字節,將定時器3復位為0,重新計時(相當于喂狗)
      __HAL_TIM_ENABLE(&htim3);       //啟動定時器
      
      
    }
  }
}   
#endif
回復

使用道具 舉報

ID:383525 發表于 2018-8-17 21:13 | 顯示全部樓層
看你定義的是用什么類型接收,如果是char型就是字符,如果你用的是int型接收,那就可以直接當做int的使用,其實還是看傳輸協議兩邊的人是怎么定義的,只要對應好關系就可以的
回復

使用道具 舉報

ID:331360 發表于 2018-8-17 19:02 | 顯示全部樓層
人中狼 發表于 2018-8-16 21:48
用判斷語句,或SWITCH語句,串口通訊都是由協議的,接收到數據后根據協議格式和內容進行判斷就行了

這個while應該怎么改一下呢
while(1)
    {       
       if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//
                        printf("\r\nÄú·¢ËíμÄÏûÏ¢Îa:\r\n");
                        HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);        //·¢Ëí½óêÕμ½μÄêy¾Y
                        while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);                //μè′y·¢Ëí½áêø
                        printf("\r\n\r\n");//2åèë»»DD
                        USART_RX_STA=0;
                }else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf("\r\nALIENTEK MiniSTM32¿a·¢°å ′®¿úêμÑé\r\n");
                                printf("ÕyμãÔ-×ó@ALIENTEK\r\n\r\n\r\n");
                        }
                        if(times%200==0)printf("Çëêäèëêy¾Y,òÔ»Ø3μ¼ü½áêø\r\n");  
                        if(times%30==0)LED0=!LED0;//éá˸LED,ìáê¾Ïμí3ÕyÔúÔËDD.
                        delay_ms(10);   
                }
    }
回復

使用道具 舉報

ID:331360 發表于 2018-8-17 18:46 | 顯示全部樓層
yousunny 發表于 2018-8-16 23:29
原子歷程直接有呢,還是識別數組的呢。你去看下。

可以給發一下嗎?謝謝
回復

使用道具 舉報

ID:174087 發表于 2018-8-17 14:32 | 顯示全部樓層
使用串口助手發送的“1”其實是字符“1”,在接收判斷的時候注意變量類型就可以了
回復

使用道具 舉報

ID:387162 發表于 2018-8-17 13:54 | 顯示全部樓層
一般是16進制的
回復

使用道具 舉報

ID:308437 發表于 2018-8-16 23:29 | 顯示全部樓層
原子歷程直接有呢,還是識別數組的呢。你去看下。
回復

使用道具 舉報

ID:384109 發表于 2018-8-16 21:48 | 顯示全部樓層
用判斷語句,或SWITCH語句,串口通訊都是由協議的,接收到數據后根據協議格式和內容進行判斷就行了
回復

使用道具 舉報

ID:364278 發表于 2018-8-16 21:29 | 顯示全部樓層
pc機和單片機通信的話發送的默認接收到的實際是1的ascll碼,你可以上網搜搜如何轉換,將接收的處理一下就能轉換了
回復

使用道具 舉報

ID:387033 發表于 2018-8-16 20:25 | 顯示全部樓層
void Init_NVIC(void) {                  NVIC_InitTypeDef NVIC_InitStructure;                        //定義一個NVIC向量表結構體變量          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //設置中斷組 為2             NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                                //配置串口1為中斷源         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;           //設置占先優先級         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                               //設置副優先級         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能串口1中斷         NVIC_Init(&NVIC_InitStructure);                                                                                //根據參數初始化中斷寄存器                  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;                                //配置串口1為中斷源         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;           //設置占先優先級         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                               //設置副優先級         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能串口1中斷         NVIC_Init(&NVIC_InitStructure);                                                                                //根據參數初始化中斷寄存器                  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn;                                //配置串口1為中斷源         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;           //設置占先優先級         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                               //設置副優先級         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能串口1中斷         NVIC_Init(&NVIC_InitStructure);                                                                                //根據參數初始化中斷寄存器                   }
回復

使用道具 舉報

ID:387026 發表于 2018-8-16 19:49 | 顯示全部樓層
可以通過顯示屏,或者LED亮暗來識別吧
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲免费观看 | 国产99免费 | 国产精品视频网站 | 最新日韩在线视频 | 中文字幕视频在线观看 | 日本一区二区三区四区 | 91视频精选 | 青青草国产在线观看 | 99tv成人影院 | 天天色天天色 | 天天拍天天草 | 国产精品2区 | 91福利在线导航 | 免费一区 | 91av视频| 欧美精品中文字幕久久二区 | 国产高清自拍视频在线观看 | 在线一区 | 国产精品国产自产拍高清 | 国产一区二区精品在线观看 | 成人不卡 | 自拍亚洲| 日韩av在线一区二区 | 亚洲综合色丁香婷婷六月图片 | 日韩视频成人 | 日韩精品1区2区 | 免费看a | 精品1区2区3区 | 一区二区成人 | 国产精品国产精品国产专区不蜜 | 日韩一区二区三区av | 国产精品a久久久久 | 国产高清久久 | 中文字幕av亚洲精品一部二部 | 亚洲午夜小视频 | www.黄色在线观看 | 欧美日韩精品中文字幕 | 超碰美女在线 | 国产精品亚洲成在人线 | 日韩在线免费观看视频 | 中文字幕视频在线 |