打印

我的32板子串口2怎么收不到数据

[复制链接]
737|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白鹭hu|  楼主 | 2018-6-30 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大神们,我想用板子的串口2接收外部一个模块发送来的数据,用DMA方式,可是怎么接收不到数据呢,串口2能发送数据,也能用DMA方式从内存到外设发送数据,可是收不到外部模块发送的数据,我都要急死了。。。有哪位大神有类似的程序吗,能不能参考一下,是不是我的配置问题,跪求。下面是我的程序:还有就是接收数据和设置是软件流控制还是硬件流控制有关系吗?我是新手,求大神指教
void USART2_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        /* config USART2 clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

        /* USART2 GPIO config */
   /* Configure USART2 Tx (PA.02) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
            
  /* Configure USART2 Rx (PA.03) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
         
        /* USART2 mode config */
        USART_InitStructure.USART_BaudRate = 115200;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

        USART_Init(USART2, &USART_InitStructure);
    USART_Cmd(USART2, ENABLE);
}

/**
  * @brief  USART2 TX DMA 配置
  * @param  无
  * @retval 无
  */
void USART2_DMA_Config(void)
{
                DMA_InitTypeDef DMA_InitStructure;
        
                /*开启DMA时钟*/
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
        
          NVIC_Config();                                   //配置DMA中断

                /*设置DMA源:串口数据寄存器地址*/
                DMA_InitStructure.DMA_PeripheralBaseAddr = USART2_DR_Base;           

                /*内存地址(要传输的变量的指针)*/
                DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;

                /*方向:从外设到内存*/               
                DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;        

                /*传输大小DMA_BufferSize=SENDBUFF_SIZE*/        
                DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;

                /*外设地址不增*/            
                DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

                /*内存地址自增*/
                DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;        

                /*外设数据单位*/        
                DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

                /*内存数据单位 8bit*/
                DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;         

                /*DMA模式:不断循环*/
                DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
                //DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;         

                /*优先级:中*/        
                DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;  

                /*禁止内存到内存的传输        */
                DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

                /*配置DMA1的6通道*/                  
                DMA_Init(DMA1_Channel6, &DMA_InitStructure);            
               
                /*使能DMA*/
                DMA_Cmd (DMA1_Channel6,ENABLE);                                       
                DMA_ITConfig(DMA1_Channel6,DMA_IT_TC,ENABLE);  //配置DMA发送完成后产生中断
}

static void NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  /* 配置P[A|B|C|D|E]0为中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

396

主题

396

帖子

0

粉丝