打印

大家帮忙看下为什么STM32F030的USART1 DMA发不出数据

[复制链接]
6609|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huiguang_1|  楼主 | 2014-7-3 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void USART1_Configuration(void)
{
  USART_InitTypeDef USART_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  
        RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
       
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_0);//ÅäÖÃPA9³ÉµÚ¶þ¹¦ÄÜÒý½Å        TX
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_0);//ÅäÖÃPA10³ÉµÚ¶þ¹¦ÄÜÒý½Å  RX
       
//USART1_IO_CONFIG
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                                        //GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        RCC_USARTCLKConfig(RCC_USART1CLK_PCLK);//( RCC_USART1CLK_PCLK );
  USART_DeInit(USART1);
  USART_InitStructure.USART_BaudRate = 115200;//19200;
  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(USART1, &USART_InitStructure);
  USART_Cmd(USART1, ENABLE);
  USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
        USART_ClearFlag(USART1,USART_FLAG_TXE);
        /*
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);        */

}
/*******************************************************************************
* º¯ÊýÃû³Æ  : DMA_Configuration
* ÃèÊö      : ´®¿ÚµÄDMA·¢ËÍ
              Í¨Ñ¶¿Ú2ΪRS485¶Ë¿Ú¡£
* ÊäÈë      : None
* Êä³ö      : None
* ·µ»Ø      : None
*******************************************************************************/
void USART1_DMA(void)
{
    DMA_InitTypeDef DMA_InitStructure;
                NVIC_InitTypeDef NVIC_InitStructure;
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
   
    DMA_DeInit(DMA1_Channel2);                                                                                           //Page146
    DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;          //Page33
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)UART_SEND;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;         
    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;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Normal;
    DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel2, &DMA_InitStructure);

                NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel2_3_IRQn;    //ǶÌ×ͨµÀΪDMA1_Stream6_IRQn
                NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               //ͨµÀÖжÏʹÄÜ
                NVIC_Init(&NVIC_InitStructure);
               
                USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
                DMA_Cmd(DMA1_Channel2, ENABLE);
               
                //DMA_ITConfig(DMA1_Channel2, DMA_IT_TC, ENABLE);
}

相关帖子

沙发
huiguang_1|  楼主 | 2014-7-3 10:29 | 只看该作者
假如不用DMA的话,发送倒是可以出波特。
USART_SendData(USART1,0x01);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

使用特权

评论回复
板凳
beicheng| | 2014-7-3 12:11 | 只看该作者
偏移地址你看下对不对,

使用特权

评论回复
地板
njchenmin| | 2014-11-22 07:31 | 只看该作者
huiguang_1 发表于 2014-7-3 10:29
假如不用DMA的话,发送倒是可以出波特。
USART_SendData(USART1,0x01);
while(USART_GetFlagStatus(USART1, ...

你STM32F0使用DMA没有USART数据输出而不用DMA有数据输出的问题解决了吗?我也碰到同样的问题,而且我在STM32F051中使用USART2就正常,USART1不正常,而且如果同时使用两个串口,以前正常的串口2也不正常了。

使用特权

评论回复
5
huiguang_1|  楼主 | 2014-11-22 09:54 | 只看该作者
解决了

使用特权

评论回复
6
ak64| | 2014-12-10 23:51 | 只看该作者
怎么解决掉的

使用特权

评论回复
7
moon20704| | 2014-12-24 11:58 | 只看该作者
huiguang_1 发表于 2014-11-22 09:54
解决了

怎么解决的

使用特权

评论回复
8
moon20704| | 2014-12-24 11:59 | 只看该作者
huiguang_1 发表于 2014-11-22 09:54
解决了

我也碰到相同的问题,大神,请问怎么搞的?

使用特权

评论回复
9
huiguang_1|  楼主 | 2014-12-24 12:23 | 只看该作者
moon20704 发表于 2014-12-24 11:59
我也碰到相同的问题,大神,请问怎么搞的?

1803122924

使用特权

评论回复
10
SailorWzw| | 2015-4-2 18:36 | 只看该作者
一楼用的重映射端口为PB6PB7,查一下stm32f030的datasheet可知对应的是USART1_TX和USART1_RX,在查看DMA的请求映像是没有这个的,有的都是有上标的。 意思就是用DMA时不是所有复用的usart端口都可以,要看dma的请求源里有没有。

使用特权

评论回复
11
SailorWzw| | 2015-4-2 18:38 | 只看该作者
就楼主的程序端口换成PA2PA3,就可以了。

使用特权

评论回复
12
翻了个墙| | 2016-3-11 15:20 | 只看该作者
找到问题了不分享,差评。。。。。。。。。。。。

使用特权

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

本版积分规则

8

主题

93

帖子

3

粉丝