stm32f103c8r6 dma 测试

本文介绍了STM32F10x开发中如何使用DMA进行数据传输,包括时钟配置、USART初始化、DMA初始化和配置,以及DMA将数据从外设地址传输到内存地址的过程。
摘要由CSDN通过智能技术生成

main.h文件
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "dma.h"


int main (void){//主程序
    u8 i;
    //RCC_Configuration(); //时钟设置
    uart_init(115200); //串口初始化(参数是波特率) 
  printf("STM32 DMA TEST!\r\n");
    printf("dataA:");
    for(i=0;i<Size;i++)
    {
        printf("%d ",dataA[i]);
    }
     printf("\r\n");
    
    printf("dataB:");
    for(i=0;i<Size;i++)
    {
        printf("%d ",dataB[i]);
    }
     printf("\r\n");
    
  DMA_config((u32) dataA,(u32) dataB,Size);
    
    printf("dataB:");
    for(i=0;i<Size;i++)
    {
        printf("%d ",dataB[i]);
    }
     printf("\r\n");
    
    while(1){
//        printf("STM32F103 hell word"); //纯字符串发送数据到串口
//        printf("\r\n");
//        delay_s(1); //延时1秒

    }
}

dma.h文件

#ifndef __DMA_H
#define __DMA_H
#include "stm32f10x.h" //STM32头文件
#define Size  8
extern const    u8 dataA[8]; //相当外设地址
extern u8 dataB[8];  //相当内存地址

void DMA_config(u32 src_addr,u32 dst_addr,u32  data_size);


#endif

dma.c文件

#include "dma.h"
#include "stm32f10x.h" //STM32头文件

 const    u8 dataA[8]={1,2,3,4,5,6,7,8}; //相当外设地址
 u8 dataB[8];  //相当内存地址
void DMA_config(u32 src_addr,u32 dst_addr,u32  data_size)
{
     DMA_InitTypeDef  DMA_InitStructure;
    
   /* Enable DMA1 clock */
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

     /* DMA1 channel1 configuration */
   DMA_DeInit(DMA1_Channel1);
   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)src_addr;//外设站点起始的地址
   DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)dst_addr;//存储器的地址
   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向 从外设站点搬到存储器站点
   DMA_InitStructure.DMA_BufferSize = data_size;//数据量(字节数小于65535)
   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;//外设地址需要自增
   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//地址需要自增
   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//宽度 字节
   DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;
   DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //单次
   DMA_InitStructure.DMA_Priority = DMA_Priority_High;//优先级设置高级
   DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;//使能 存储器到存储器的搬运
   DMA_Init(DMA1_Channel1, &DMA_InitStructure);
    
   DMA_Cmd(DMA1_Channel1, ENABLE);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值