关于串口能发不能收的问题

2019-10-15 04:49发布

用ucos做了一个串口收发的程序,但是能发不能收,怀疑是中断配置组的问题,但是不知道怎么弄,大家一起交流交流吧,代码如下:

void USART2_IRQHandler(void)                        //′®¿ú1ÖD¶Ï·tÎñ3ìDò
{
        u8 Res;

        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  
                {
                Res =USART_ReceiveData(USART2);//(USART2->DR);       
                if(USART2_RX_STA<10)
                        {
                                USART2_RX_BUF[USART2_RX_STA]=Res;
                                USART2_RX_STA++;
                        }
          }                    
}




void Reveice_data(void)
{
         u8 rlen=10;
         u8 i;
//         delay_ms(10);
         if(rlen==USART2_RX_STA)
         {
                 for(i=0;i<rlen;i++)
                 {
                   buf[i]=USART2_RX_BUF[i];
                 }
                        USART2_RX_STA=0;
         }
               
}




配置:应该没问题
void usart2_init(u32 bound)
{  

        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        // GPIOAê±&#214;ó
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //′&#174;&#191;ú2ê±&#214;óê1&#196;ü

        USART_DeInit(USART2);  //&#184;′&#206;&#187;′&#174;&#191;ú2
                 //USART3_TX   PA2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART3_RX          PA3
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//&#184;&#161;&#191;&#213;ê&#228;è&#235;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
       
       

       
       
        USART_InitStructure.USART_BaudRate = bound;//2¨ì&#216;&#194;êò&#187;°&#227;éè&#214;&#195;&#206;a9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;


       
        //éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannel = USART2_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);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷
       
       
    USART_Init(USART2, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;&#214;D&#182;&#207;
    USART_Cmd(USART2, ENABLE);                    //ê1&#196;ü′&#174;&#191;ú
               


}


以下是.h文件
#ifndef __USART2_H
#define __USART2_H         
#include "sys.h"  



#define USART2_REC_LEN                          10          //&#182;¨ò&#229;×&#238;′ó&#189;óê&#213;×&#214;&#189;úêy 20

void usart2_init(u32 bound);
void Reveice_data(void);
void Send_data(void);


extern u8 USART2_RX_STA;
extern u8 USART2_RX_BUF[USART2_REC_LEN];

#endif




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