野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21350|回复: 5

STM32F103ZET6的USART2的问题

[复制链接]
发表于 2014-5-19 16:23:28 | 显示全部楼层 |阅读模式
求大神赐教,为什么我用USART2的DMA方式接收不到外部一模块发送来的数据,USART2应该怎样与外部模块的串口线相连啊。
下面是我对USART2的配置,求大神指点哪里出错了,还是我的硬件连接错了:

void USART2_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);

        /* 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 = 9600;
        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_InitStructure.DMA_PeripheralBaseAddr = USART2_DR_Base;          

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

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

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

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

                /*内存地址不变*/
                DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;       

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

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

       // DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
               
                /*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发送完成后产生中断
}

回复

使用道具 举报

发表于 2014-5-19 16:25:31 | 显示全部楼层
USART2在的引脚在ISO板子有复用,使用的时候需要把板子左侧跳帽的“485R-A3”和 “485D-A2”跳帽拔掉,就样就不会有影响了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-19 17:04:49 | 显示全部楼层
姬银瑶 发表于 2014-5-19 16:25
USART2在的引脚在ISO板子有复用,使用的时候需要把板子左侧跳帽的“485R-A3”和 “485D-A2”跳帽拔掉,就样 ...

我把跳帽拔了,怎么还是没收到任何数据啊。。。
回复 支持 反对

使用道具 举报

发表于 2014-5-19 17:30:05 | 显示全部楼层
王付强 发表于 2014-5-19 17:04
我把跳帽拔了,怎么还是没收到任何数据啊。。。

你的配置有问题,为什么你要使用      GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);

函数重映射串口的引脚,你重映射之后串口的引脚就变成PD5和PD6了,参考一下野火USART1的例程来改一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-19 20:35:49 | 显示全部楼层
祁羽彤 发表于 2014-5-19 17:30
你的配置有问题,为什么你要使用      GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);

函数重映射串 ...

嗯,大神,这个问题我发现了,可是我改完以后还是收不到数据,野火STM32F103ZET6的USART2怎么与外部模块的U口相连,是不是需要一个电平转化
回复 支持 反对

使用道具 举报

发表于 2014-5-19 22:40:49 | 显示全部楼层
王付强 发表于 2014-5-19 20:35
嗯,大神,这个问题我发现了,可是我改完以后还是收不到数据,野火STM32F103ZET6的USART2怎么与外部模块的 ...

板子上的电平是ttl的,你看下你的模块的信号是什么电平的

或者你先不要用DMA模式接受,先用查询的方式看看能不能接收到数据先。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 04:30 , Processed in 0.028682 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表