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

標(biāo)題: 求助:我用stm32f103串口接收數(shù)據(jù),怎么處理接收后的數(shù)據(jù)呢? [打印本頁]

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

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

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

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




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