欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求助:我用stm32f103串口接收數據,怎么處理接收后的數據呢? [打印本頁]

作者: plyl    時間: 2018-8-16 18:41
標題: 求助:我用stm32f103串口接收數據,怎么處理接收后的數據呢?
我用stm32f103串口接收數據,怎么處理接收后的數據呢?
比如說,串口接收數據為數字1,stm32怎么樣識別這個數字1

作者: boss雪走    時間: 2018-8-16 19:49
可以通過顯示屏,或者LED亮暗來識別吧
作者: 1042925236    時間: 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);                                                                                //根據參數初始化中斷寄存器                   }
作者: ch12063119    時間: 2018-8-16 21:29
pc機和單片機通信的話發送的默認接收到的實際是1的ascll碼,你可以上網搜搜如何轉換,將接收的處理一下就能轉換了
作者: 人中狼    時間: 2018-8-16 21:48
用判斷語句,或SWITCH語句,串口通訊都是由協議的,接收到數據后根據協議格式和內容進行判斷就行了
作者: yousunny    時間: 2018-8-16 23:29
原子歷程直接有呢,還是識別數組的呢。你去看下。
作者: ux4123    時間: 2018-8-17 13:54
一般是16進制的
作者: woshige    時間: 2018-8-17 14:32
使用串口助手發送的“1”其實是字符“1”,在接收判斷的時候注意變量類型就可以了
作者: plyl    時間: 2018-8-17 18:46
yousunny 發表于 2018-8-16 23:29
原子歷程直接有呢,還是識別數組的呢。你去看下。

可以給發一下嗎?謝謝
作者: plyl    時間: 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);   
                }
    }
作者: insurace    時間: 2018-8-17 21:13
看你定義的是用什么類型接收,如果是char型就是字符,如果你用的是int型接收,那就可以直接當做int的使用,其實還是看傳輸協議兩邊的人是怎么定義的,只要對應好關系就可以的
作者: wushiye54    時間: 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

作者: 達達達    時間: 2018-8-24 09:35
如果你是16進制發送的話,直接if判斷接收是否為1就可以了,如果不是的話你就判斷是否位字符“1”
作者: lijihong_2018    時間: 2018-8-24 10:25
讀出來存在相應的數組里,有空就去處理,怎么處理要看需求
作者: armboy    時間: 2018-8-24 10:27
C語言的標準庫里有一個函數叫int atoi(const char *nptr);
頭文件, #include <stdlib.h>




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1