stm32mini板子串口开启一会失败一会成功不知道怎样解决

2019-10-15 22:14发布

主函数;
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "arduino.h"
//ALIENTEK Mini STM32¿a·¢°å·¶ày′úÂë3
//′®¿úêμÑé   
//¼¼êõÖ§3Ö£owww.openedv.com
//1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾
int main(void)
{       
        u8 t;
        u8 len;       
        u16 times=0;
        u8 ax;
        u8 bx='*';      //*μÄêμ¼êÖμÆäêμ′ú±í0x42ò2¾íêÇASCIIμÄÖμêÇ42

        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// éèÖÃÖD¶ÏóÅÏ輶·Ö×é
        uart_init(9600);         //′®¿ú3õê¼»ˉÎa9600
        LED_Init();                           //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
  USART3_Config();
        while(1)
        {
               
               
                delay_ms(100);
                LED0=!LED0;
                //GPIO_ResetBits(GPIOA,GPIO_Pin_8);
                LED1=0;
                ax=arduino_Analysis();
                printf("sudo=%d ",sudu);
                printf("a=%d ",ax);
                //printf("%d ",bx);
                //delay_ms(1000);
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
                //////////////////////////////////Ô-oˉêy
//                LED0=!LED0;
//                if(USART_RX_STA&0x8000)
//                {                                          
//                        len=USART_RX_STA&0x3fff;//μÃμ½′Ë′νóêÕμ½μÄêy¾Y3¤¶è
//                        printf(" Äú·¢ËíμÄÏûÏ¢Îa: ");
//                        for(t=0;t<len;t++)
//                        {
//                                USART1->DR=USART_RX_BUF[t];
//                                while((USART1->SR&0X40)==0);//μè′y·¢&#203;í&#189;áê&#248;
//                        }
//                        printf(" ");//2&#229;è&#235;&#187;&#187;DD
//                        USART_RX_STA=0;
//                }else
//                {
//                        times++;
//                        if(times%5000==0)
//                        {
//                                printf(" ALIENTEK MiniSTM32&#191;a·¢°&#229; ′&#174;&#191;úêμ&#209;é ");
//                                printf("&#213;yμ&#227;&#212;-×ó@ALIENTEK ");
//                        }
//                        if(times%200==0)printf("&#199;&#235;ê&#228;è&#235;êy&#190;Y,ò&#212;&#187;&#216;3μ&#188;ü&#189;áê&#248; ");  
//                //éá&#203;&#184;LED,ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD.
//                        delay_ms(10);   
//                //}
//        }         
}
}




arduino.c函数
#include "arduino.h"




u8 Arduino_sudo;
u8 Arduino_jiaodu;
u8 sudu;
u8 jiaodu;
u8 x=7;
u8 USART3_RX_BUF[USART_REC_LEN];     //&#189;óê&#213;&#187;o3&#229;,×&#238;′óUSART_REC_LEN&#184;&#246;×&#214;&#189;ú.
//&#189;óê&#213;×′ì&#172;
u8 Arduino_Receive_Data[11];
u8 Arduino_receive_counter=0;
u8 Arduino_receive_flag=0;
u8 Arduino_receive_temp[10]={0x42,0x39,0x49,0x39,0x45,0x39,0x49,0x54,0x39,0X39};
//u8 res[8];
//bit15£&#172;        &#189;óê&#213;íê3é±ê&#214;&#190;
//bit14£&#172;        &#189;óê&#213;μ&#189;0x0d
//bit13~0£&#172;        &#189;óê&#213;μ&#189;μ&#196;óDD§×&#214;&#189;úêy&#196;&#191;
u16 USART3_RX_STA=0;       //&#189;óê&#213;×′ì&#172;±ê&#188;&#199;       







void USART3_Config(void)                //á&#172;&#189;óêy′&#171;μ&#231;쨠 3&#245;ê&#188;&#187;ˉ &#197;&#228;&#214;&#195;USART2
{
        GPIO_InitTypeDef     GPIO_InitStructure;   //′&#174;&#191;ú&#182;&#203;&#191;ú&#197;&#228;&#214;&#195;&#189;á11ì&#229;±&#228;á&#191;
        USART_InitTypeDef    USART_InitStructure;  //′&#174;&#191;ú2&#206;êy&#197;&#228;&#214;&#195;&#189;á11ì&#229;±&#228;á&#191;
        NVIC_InitTypeDef   NVIC_InitStructure;

        //μú12&#189;£o′ò&#191;aGPIOoíUSART2&#191;&#188;tμ&#196;ê±&#214;ó
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //′ò&#191;aGPIOAê±&#214;óoíGPIOA&#184;′ó&#195;ê±&#214;ó
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);        //′ò&#191;a′&#174;&#191;ú&#184;′ó&#195;ê±&#214;ó
        USART_DeInit(USART3);  //&#184;′&#206;&#187;′&#174;&#191;ú1

        //μú22&#189;£o&#189;&#171;USART2 Tx£¨·¢&#203;í&#189;&#197;£&#169;μ&#196;GPIO&#197;&#228;&#214;&#195;&#206;aí&#198;íì&#184;′ó&#195;&#196;£ê&#189;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                           //′&#174;&#191;ú2·¢&#203;í&#189;&#197;
        //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                   //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //ê&#228;3&#246;&#203;ù&#182;è50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);                                   //3&#245;ê&#188;&#187;ˉGPIOA
                                                                                                                  
        //μú32&#189;£o&#189;&#171;USART2 Rx£¨&#189;óê&#213;&#189;&#197;£&#169;μ&#196;GPIO&#197;&#228;&#214;&#195;&#206;a&#184;&#161;&#191;&#213;ê&#228;è&#235;&#196;£ê&#189;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                           //′&#174;&#191;ú2&#189;óê&#213;&#189;&#197;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //&#184;&#161;&#191;&#213;ê&#228;è&#235;
        //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        //é&#207;à-ê&#228;è&#235;
        GPIO_Init(GPIOB, &GPIO_InitStructure);                                   //3&#245;ê&#188;&#187;ˉGPIOA



        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182; 3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×óó&#197;&#207;è&#188;&#182; 3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ í¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);  //&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;3&#245;ê&#188;&#187;ˉ
       
       
       
        //μú42&#189;£o&#197;&#228;&#214;&#195;USART12&#206;êy
        USART_InitStructure.USART_BaudRate             = 115200;                                                         //2¨ì&#216;&#194;êéè&#214;&#195;£o57600
        USART_InitStructure.USART_WordLength           = USART_WordLength_8b;                         //êy&#190;Y&#206;&#187;êyéè&#214;&#195;£o8&#206;&#187;
        USART_InitStructure.USART_StopBits             = USART_StopBits_1;                                 //í£&#214;1&#206;&#187;éè&#214;&#195;£o1&#206;&#187;
        USART_InitStructure.USART_Parity               = USART_Parity_No;                                 //ê&#199;·&#241;&#198;&#230;&#197;&#188;D£&#209;é£o&#206;T
        USART_InitStructure.USART_HardwareFlowControl  = USART_HardwareFlowControl_None; //ó2&#188;tá÷&#191;&#216;&#214;&#198;&#196;£ê&#189;éè&#214;&#195;£o&#195;&#187;óDê1&#196;ü
        USART_InitStructure.USART_Mode                 = USART_Mode_Rx ;//| USART_Mode_Tx;         //&#189;óê&#213;ó&#235;·¢&#203;í&#182;&#188;ê1&#196;ü
        USART_Init(USART3, &USART_InitStructure);                                                                                 //3&#245;ê&#188;&#187;ˉUSART2
       
       
       
       

    //′ò&#191;a·¢&#203;í&#214;D&#182;&#207;oí&#189;óê&#213;&#214;D&#182;&#207;(è&#231;1&#251;Dèòa&#214;D&#182;&#207;)
         // USART_ITConfig(USART2, USART_IT_TXE, ENABLE);  // ê1&#196;ü&#214;&#184;&#182;¨μ&#196;USART1·¢&#203;í&#214;D&#182;&#207; £&#187;
          USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // ê1&#196;ü&#214;&#184;&#182;¨μ&#196;USART1&#189;óê&#213;&#214;D&#182;&#207; £&#187;

        //μú52&#189;£oê1&#196;ü USART2£&#172; &#197;&#228;&#214;&#195;íê±&#207;
        USART_Cmd(USART3, ENABLE);                                                           //ê1&#196;ü USART2

    //è&#231;&#207;&#194;ó&#239;&#190;&#228;&#189;a&#190;&#246;μú1&#184;&#246;×&#214;&#189;ú&#206;T·¨&#213;yè··¢&#203;í3&#246;è¥μ&#196;&#206;êìa
   USART_ClearFlag(USART3, USART_FLAG_TC);                //&#199;&#229;′&#174;&#191;ú2·¢&#203;í±ê&#214;&#190;
       
}



void USART3_IRQHandler(void)                        //′&#174;&#191;ú3&#214;D&#182;&#207;·t&#206;&#241;3ìDò
        {

        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //&#189;óê&#213;&#214;D&#182;&#207;óDD§,è&#244;&#189;óê&#213;êy&#190;Y&#188;&#196;′&#230;&#198;÷&#194;ú
     {
                        Arduino_Receive_Data[Arduino_receive_counter]=USART_ReceiveData(USART3);

                          if(Arduino_receive_counter==0&& Arduino_Receive_Data[0]!='*') return ;/////87=W ê×&#214;&#161;
                           Arduino_receive_counter++;
                          
                           if(Arduino_receive_counter==10)
                                 {
                                         Arduino_receive_counter=0;
                                         Arduino_receive_flag=1;
                                       
                                         
         }
                        }
   }
       


u8 arduino_Analysis(void)
{
        if(Arduino_receive_flag==1)
        {
          Arduino_receive_flag=0;
                memcpy(Arduino_receive_temp,Arduino_Receive_Data,10);
//                printf("0=%d ",Arduino_receive_temp[0]);
//                printf("1=%d ",Arduino_receive_temp[1]);
//                printf("2=%d ",Arduino_receive_temp[2]);
//                printf("3=%d ",Arduino_receive_temp[3]);
//                printf("4=%d ",Arduino_receive_temp[4]);
//                printf("5=%d ",Arduino_receive_temp[5]);
//                printf("6=%d ",Arduino_receive_temp[6]);
//                printf("7=%d ",Arduino_receive_temp[7]);
//                printf("8=%d ",Arduino_receive_temp[8]);
//                printf("8=%d ",x);
               
               
        }
       
        //Res =Arduino_Receive_Data[Arduino_receive_counter];        //&#182;áè&#161;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y
        return Arduino_receive_temp[1];
        sudu=Arduino_receive_temp[7];
       
}






arduino.h函数如下
#ifndef _ARDUINO_H
#define _ARDUINO_H
#include "stdio.h"       
#include "usart.h"
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
#include "string.h"

#include "sys.h"


void USART3_Config(void);
//void USART3_IRQHandler(void);
//void TIM4_Init(u16 arr,u16 psc);
//void TIM4_IRQHandler(void);
void TIM4_Init(u16 arr,u16 psc);
u8 arduino_Analysis(void);

#define USART3_REC_LEN                          200          //&#182;¨ò&#229;×&#238;′ó&#189;óê&#213;×&#214;&#189;úêy 200
#define EN_USART3_RX                         1                //ê1&#196;ü£¨1£&#169;/&#189;&#251;&#214;1£¨0£&#169;′&#174;&#191;ú1&#189;óê&#213;
extern u8 sudu;         

//è&#231;1&#251;&#207;&#235;′&#174;&#191;ú&#214;D&#182;&#207;&#189;óê&#213;£&#172;&#199;&#235;2&#187;òa×¢êíò&#212;&#207;&#194;oê&#182;¨ò&#229;







#endif

有没有大神指导到底是怎么回事,一直找不到什么原因

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。