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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2175|回復: 1
打印 上一主題 下一主題
收起左側

STM32串口接收字符串控制繼電器的代碼問題,求大佬幫我看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:475866 發表于 2019-3-11 19:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大佬們,請耐心幫我看看,我在試著實現一個串口接收字符串的數據,然后經過ARM的比對開啟繼電器,不知道我這樣寫能實現否?我編譯過代碼了,沒有問題,但是好像數據收不到也傳不出去。
功能如下:stm32接收到一組字符串 “0+25.4 ”進入數組,然后用公式計算得出數值ch=25.4,再與原來的aimtemp的數據比大小,如果大于aimtemp,那么就開啟繼電器,否則不開啟,然后把字符串“0+25.4”透過傳輸口發送。如果收到的字符串是“1+25.4”,那么將計算后的值(ch=25.4)放到aimtemp中,然后把“1+25.4”的字符串發送出去。
我開了一個數組,這樣行嗎,我有實現到每收到一個數據就中斷,然后處理完再接受第二個數據嗎?
我接收的數據們,是使用完就被扔掉了嗎,還是存在哪里了?

單片機源程序:
#include <stdio.h>
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "beep.h"
#include "sys.h"
        int main(void)
{
         GPIO_InitTypeDef GPIO_InitStructure;
         USART_InitTypeDef USART_InitStructure;
         NVIC_InitTypeDef NVIC_InitStructure;
        //時鐘
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        

           USART_DeInit(USART1);  
        
//開一個連接繼電器的端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
        
          //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART1_RX          PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATIN
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
        


    USART_InitStructure.USART_BaudRate=9600;
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
    USART_InitStructure.USART_Parity=USART_Parity_No;
    USART_InitStructure.USART_StopBits=USART_StopBits_1;
    USART_InitStructure.USART_WordLength=USART_WordLength_8b;
    USART_Init(USART1,&USART_InitStructure);
    USART_Cmd(USART1,ENABLE);



    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

                 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;               
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
          NVIC_Init(&NVIC_InitStructure);        

        LED_Init()
  SysTick_Init()
        BEEP_Init();
        
        
  while (1)
  {
        Delay_us(5000);                 
  LED2_REV;        
  }
}


void USART1_IRQHandler(void)
  { u8 i=0;
                int flag;
                float ch=1;
                int aimtemp=35;
                u8 *s;
          char USART_RX_BUF[7];
        
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
        {  
                USART_RX_BUF[i++]=USART_ReceiveData(USART1);
    if (i==8)  i=0;//2»D′D£Ñé
                ch=(USART_RX_BUF[2]-'0')*10+(USART_RX_BUF[3]-'0')*1+(USART_RX_BUF[5]-'0')*0.1;
        
                if(USART_RX_BUF[0]=='1'){
                        flag=1;
                        aimtemp=ch;
                }
               
                if(USART_RX_BUF[0]=='0'){
                        if(ch>aimtemp)
                                GPIO_SetBits(GPIOA,GPIO_Pin_7)
                        else
                                GPIO_ResetBits(GPIOA,GPIO_Pin_7);   
                        flag=1;
                }
               
                if(flag==1){
                        while(*s!='\0' ){
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET){
                                        USART_SendData(USART1,*s);
                                        s++;
                                }
                        }
                }
               
                if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET) {
                        USART_ClearFlag(USART1, USART_FLAG_ORE)
                        }
        }
}


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

使用道具 舉報

沙發
ID:466164 發表于 2019-3-13 21:23 | 只看該作者
實驗一下不就行了,還沒學STM32。定義一個合適變量,每次自動放里面,中斷一次覆蓋一次,否則你數組得多大,用過了要也沒用。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产精品国产偷麻豆 | 精品中文字幕一区二区三区 | av男人的天堂在线 | 国内精品一区二区三区 | 日本在线小视频 | 成人高清在线 | 免费一级欧美在线观看视频 | 成年人黄色小视频 | 欧美一二三 | 精品九九九 | 国产91黄色 | 欧美在线成人影院 | 久久91精品 | 亚洲在线| 国产高清一区二区三区 | 免费一级做a爰片久久毛片潮喷 | 国产区第一页 | 欧美日韩国产精品激情在线播放 | 欧美精品1区2区3区 精品国产欧美一区二区 | 日本不卡高字幕在线2019 | 欧美一区二区三区四区视频 | 大学生a级毛片免费视频 | 国产午夜精品久久久久免费视高清 | 精品欧美一区二区三区免费观看 | 欧美成人a∨高清免费观看 91伊人 | 日韩精品视频在线 | 亚洲国产精品一区二区三区 | 亚洲精品中文字幕在线观看 | 久久99精品国产麻豆婷婷 | 性欧美hd| 天天操天天操 | 色综合一区 | 精品国产乱码久久久久久闺蜜 | 青久草视频 | 国产精品福利网站 | 日韩www| 狠狠干综合视频 | 91玖玖| 欧美精品导航 | 日韩免费一区二区 | 午夜精品一区二区三区在线播放 |