• 大小: 126KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: 其他
  • 标签: STM32f4  

资源简介

STM32 F4的DMA可以方便陈述数据

资源截图

代码片段和文件信息

/*********************************************
    标题:操作DMA的练习
    软件平台:IAR for ARM6.21
    硬件平台:stm32f4-discovery
    主频:168M
    
    描述:从其他设备接收数据,再把数据发送出去
          USART3接收中断,发射用DMA
    author:小船
    data:2012-02-03
**********************************************/

#include  

u8 USART_DMA_Completed;
u8 Rx_Completed;
u8 Rx_data_counter;
u8 usart3_buffer[100];

void USART3_DMA_config(void);
void USART3_config(void);

void main ()

  
  SCB->AIRCR = 0x05AF0000 | 0x400;  //中断优先级分组 抢占:响应=3:1
  
  RCC->AHB1ENR |= ( (1<<3) | (1<<21) ); //使能GPIOD时钟使能DMA1时钟
  RCC->APB1ENR |= (1<<18);  //使能usart3时钟
  
  USART3_DMA_config();
  USART3_config();
  
  USART_DMA_Completed = 1;
  
  while(1)
  {  
    if(USART_DMA_Completed & Rx_Completed)  //之前数据已经发送完成,接收到新的数据
    {  
      DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
      while(DMA1_Stream3->CR & 0x00000001);//确保DMA可以被设置     
      DMA1->LIFCR |= 0x0f800000;//传送前清空DMA1_Stream3所有中断标志      
      DMA1_Stream3->NDTR = Rx_data_counter; //设置dma传输数据的数量
      if((USART3->SR & (1<<7))) //发送数据寄存器空
      {
        USART3->CR3 &= ~(1<<7);//除能usartdma发送
        USART_DMA_Completed = 0;
        DMA1_Stream3->NDTR = Rx_data_counter; //设置dma传输数据的数量
        DMA1_Stream3->CR |= 1;//使能dma
        USART3->CR3 |= (1<<7);//使能usartdma发送
        Rx_Completed = 0;
        Rx_data_counter = 0;
      }
    }
  }
}

/****************************************
  函数名:USART3_DMA_config
  参数:无
  返回值:无
  功能:DMA1数据流3与usart3关联的相关配置
****************************************/
void USART3_DMA_config(void)
{
  DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
  while(DMA1_Stream3->CR & 0x00000001);//确保DMA可以被设置
  
  DMA1->LIFCR |= 0x0f800000;//传送前清空DMA1_Stream3所有中断标志
  
  DMA1_Stream3->PAR = (uint32_t)&USART3->DR;//设置外设地址USART3->DR地址0x40004804
  DMA1_Stream3->M0AR = (uint32_t)usart3_buffer; //设置内存地址
  DMA1_Stream3->NDTR = Rx_data_counter; //设置dma传输数据的数量
  //DMA1_Stream3->FCR |= 0x00000007;//设置fifo
  /*
    设置dma通道4,即usart3tx
    优先级Medium
    传输方向内存到外设
    内存递增模式
    传输完成中断使能
  */
  DMA1_Stream3->CR |= ( 0x08000000 |0x00010000 | (1<<6)
                        | (1<<10) | (1<<4) ); 

  USART3->CR3 &= ~(1<<7);//usart3 dma发送模式除能
  
  NVIC->IP[14] = 0xA0;
  NVIC->ISER[0] |= (1<<14);
  
}

/**************************
  函数名:USART3_config
  参数:无
  返回值:无
  功能:配置usart3
************************/
void USART3_config(void)
{
  USART3->BRR = 0x0000016C;   //波特率115200
  /*
   使能usart3
  usart3发送使能
  usart3接收使能
  接收缓冲区非空中断使能
  8bit
  一位停止位
  无校验
  */
  USART3->CR1 |= (( 1<<13 ) | ( 1<<3 ) | ( 1<<2 ) | ( 1<<5 )); 
  
  GPIOD->AFR[1] |= 0x00000077;//选择PD89复用功能 
  
  GPIOD->MODER &= 0xFFF0FFFF; //设置PD89复用模式
  GPIOD->MODER |= 0x000A0000; 
  
//  GPIOD->OTYPER &= 0xFFFFDFFF; //设置PD9推挽输出
  
  GPIOD->OSPEEDR &= 0xFFFCFFFF; //PD8速度50m
  GPIOD->OSPEEDR |= 0x00020000;
  
  GPIOD->PUPDR &= 0xFFFCFFFF; //PD8
  GPIOD->PUPDR |= 0x0001

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      61080  2012-02-02 10:53  USART_DMA\Debug\Exe\usart.out

     文件      59240  2012-02-09 18:16  USART_DMA\Debug\Exe\USART_DMA.out

     文件      23245  2012-02-02 10:53  USART_DMA\Debug\List\usart.map

     文件      22374  2012-02-09 18:16  USART_DMA\Debug\List\USART_DMA.map

     文件      14796  2012-02-09 18:16  USART_DMA\Debug\Obj\main.o

     文件      58708  2012-02-04 10:41  USART_DMA\Debug\Obj\startup_stm32f4xx.o

     文件      11580  2012-02-04 10:41  USART_DMA\Debug\Obj\system_stm32f4xx.o

     文件        212  2012-02-03 20:12  USART_DMA\Debug\Obj\usart.pbd

     文件        212  2012-04-23 19:01  USART_DMA\Debug\Obj\USART_DMA.pbd

     文件      79281  2011-10-28 10:31  USART_DMA\inc\core_cm4.h

     文件      23979  2011-10-28 10:31  USART_DMA\inc\core_cm4_simd.h

     文件      15691  2011-10-28 10:31  USART_DMA\inc\core_cmFunc.h

     文件      16108  2011-10-28 10:31  USART_DMA\inc\core_cmInstr.h

     文件     530693  2011-10-28 10:31  USART_DMA\inc\stm32f4xx.h

     文件       2096  2011-10-28 10:31  USART_DMA\inc\system_stm32f4xx.h

     文件        983  2012-02-03 20:12  USART_DMA\settings\usart.cspy.bat

     文件       5693  2012-02-03 20:12  USART_DMA\settings\usart.dbgdt

     文件       1420  2012-02-03 20:12  USART_DMA\settings\usart.dni

     文件       3720  2012-02-02 15:40  USART_DMA\settings\usart.wsdt

     文件        983  2012-04-23 19:01  USART_DMA\settings\USART_DMA.cspy.bat

     文件       5376  2012-04-23 19:01  USART_DMA\settings\USART_DMA.dbgdt

     文件       1421  2012-04-23 19:01  USART_DMA\settings\USART_DMA.dni

     文件       3105  2012-03-26 08:39  USART_DMA\settings\usart_dma.wsdt

     文件      24546  2011-10-28 10:31  USART_DMA\startup\startup_stm32f4xx.s

     文件       1592  2011-10-03 19:51  USART_DMA\stm32f4xx_flash.icf

     文件       1615  2011-10-03 19:51  USART_DMA\stm32f4xx_flash_extsram.icf

     文件       1594  2011-10-03 19:51  USART_DMA\stm32f4xx_sram.icf

     文件       4227  2012-04-23 21:33  USART_DMA\USART_DMA.dep

     文件      48487  2012-02-03 20:35  USART_DMA\USART_DMA.ewd

     文件      49250  2012-02-03 20:35  USART_DMA\USART_DMA.ewp

............此处省略15个文件信息

评论

共有 条评论