stm32f103c8r6 dma 测试

发布时间:2024年01月21日

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);

}

文章来源:https://blog.csdn.net/weixin_46290197/article/details/135725887
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。