找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12573|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:331360 發(fā)表于 2018-8-16 18:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
5黑幣
我用stm32f103串口接收數(shù)據(jù),怎么處理接收后的數(shù)據(jù)呢?
比如說,串口接收數(shù)據(jù)為數(shù)字1,stm32怎么樣識別這個(gè)數(shù)字1

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:387026 發(fā)表于 2018-8-16 19:49 | 只看該作者
可以通過顯示屏,或者LED亮暗來識別吧
回復(fù)

使用道具 舉報(bào)

板凳
ID:387033 發(fā)表于 2018-8-16 20:25 | 只看該作者
void Init_NVIC(void) {                  NVIC_InitTypeDef NVIC_InitStructure;                        //定義一個(gè)NVIC向量表結(jié)構(gòu)體變量          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //設(shè)置中斷組 為2             NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                                //配置串口1為中斷源         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;           //設(shè)置占先優(yōu)先級         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                               //設(shè)置副優(yōu)先級         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能串口1中斷         NVIC_Init(&NVIC_InitStructure);                                                                                //根據(jù)參數(shù)初始化中斷寄存器                  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;                                //配置串口1為中斷源         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;           //設(shè)置占先優(yōu)先級         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                               //設(shè)置副優(yōu)先級         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能串口1中斷         NVIC_Init(&NVIC_InitStructure);                                                                                //根據(jù)參數(shù)初始化中斷寄存器                  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn;                                //配置串口1為中斷源         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;           //設(shè)置占先優(yōu)先級         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                               //設(shè)置副優(yōu)先級         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能串口1中斷         NVIC_Init(&NVIC_InitStructure);                                                                                //根據(jù)參數(shù)初始化中斷寄存器                   }
回復(fù)

使用道具 舉報(bào)

地板
ID:364278 發(fā)表于 2018-8-16 21:29 | 只看該作者
pc機(jī)和單片機(jī)通信的話發(fā)送的默認(rèn)接收到的實(shí)際是1的ascll碼,你可以上網(wǎng)搜搜如何轉(zhuǎn)換,將接收的處理一下就能轉(zhuǎn)換了
回復(fù)

使用道具 舉報(bào)

5#
ID:384109 發(fā)表于 2018-8-16 21:48 | 只看該作者
用判斷語句,或SWITCH語句,串口通訊都是由協(xié)議的,接收到數(shù)據(jù)后根據(jù)協(xié)議格式和內(nèi)容進(jìn)行判斷就行了
回復(fù)

使用道具 舉報(bào)

6#
ID:308437 發(fā)表于 2018-8-16 23:29 | 只看該作者
原子歷程直接有呢,還是識別數(shù)組的呢。你去看下。
回復(fù)

使用道具 舉報(bào)

7#
ID:387162 發(fā)表于 2018-8-17 13:54 | 只看該作者
一般是16進(jìn)制的
回復(fù)

使用道具 舉報(bào)

8#
ID:174087 發(fā)表于 2018-8-17 14:32 | 只看該作者
使用串口助手發(fā)送的“1”其實(shí)是字符“1”,在接收判斷的時(shí)候注意變量類型就可以了
回復(fù)

使用道具 舉報(bào)

9#
ID:331360 發(fā)表于 2018-8-17 18:46 | 只看該作者
yousunny 發(fā)表于 2018-8-16 23:29
原子歷程直接有呢,還是識別數(shù)組的呢。你去看下。

可以給發(fā)一下嗎?謝謝
回復(fù)

使用道具 舉報(bào)

10#
ID:331360 發(fā)表于 2018-8-17 19:02 | 只看該作者
人中狼 發(fā)表于 2018-8-16 21:48
用判斷語句,或SWITCH語句,串口通訊都是由協(xié)議的,接收到數(shù)據(jù)后根據(jù)協(xié)議格式和內(nèi)容進(jìn)行判斷就行了

這個(gè)while應(yīng)該怎么改一下呢
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);   
                }
    }
回復(fù)

使用道具 舉報(bào)

11#
ID:383525 發(fā)表于 2018-8-17 21:13 | 只看該作者
看你定義的是用什么類型接收,如果是char型就是字符,如果你用的是int型接收,那就可以直接當(dāng)做int的使用,其實(shí)還是看傳輸協(xié)議兩邊的人是怎么定義的,只要對應(yīng)好關(guān)系就可以的
回復(fù)

使用道具 舉報(bào)

12#
ID:280876 發(fā)表于 2018-8-23 20:12 | 只看該作者
這是我寫modbus串口中斷處理函數(shù),你看一下

#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++;                              //接收數(shù)據(jù)增加1
      __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);  //清除中斷標(biāo)志
      __HAL_TIM_SetCounter(&htim3,0);  //當(dāng)接收到一個(gè)新的字節(jié),將定時(shí)器3復(fù)位為0,重新計(jì)時(shí)(相當(dāng)于喂狗)
      __HAL_TIM_ENABLE(&htim3);       //啟動(dòng)定時(shí)器
      
      
    }
  }
}   
#endif
回復(fù)

使用道具 舉報(bào)

13#
ID:381818 發(fā)表于 2018-8-24 09:35 | 只看該作者
如果你是16進(jìn)制發(fā)送的話,直接if判斷接收是否為1就可以了,如果不是的話你就判斷是否位字符“1”
回復(fù)

使用道具 舉報(bào)

14#
ID:389529 發(fā)表于 2018-8-24 10:25 | 只看該作者
讀出來存在相應(yīng)的數(shù)組里,有空就去處理,怎么處理要看需求
回復(fù)

使用道具 舉報(bào)

15#
ID:389552 發(fā)表于 2018-8-24 10:27 | 只看該作者
C語言的標(biāo)準(zhǔn)庫里有一個(gè)函數(shù)叫int atoi(const char *nptr);
頭文件, #include <stdlib.h>
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表