eda工具william hill官网
直播中

徐丹

7年用户 291经验值
私信 关注
[资料]

写了一个用DMA读取ADC数据的程序,记录下整个过程和一点心得

昨天学习了DMA写了一个用DMA读取ADC数据的程序,记录下整个过程和一点心得

DMA配置详细说明

(MDK的汉字2复制过来就是乱码,我重新打了一遍注释,晕~)


//DMA1各通道配置//外设->存储器/16位数据宽度//DMA_CHx:DMA通道CHx//cpar:外设地址//cmar:存储器地址//cndtr:数据传输量(因为我是一个16位的数据,所以是一)void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr){    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);    //使能DMA时钟        DMA_DeInit(DMA_CHx);   //重设DMA为缺省值    DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //外设地址    DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //存储器地址    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //外设到存储器的传输模式    DMA_InitStructure.DMA_BufferSize = 1;  //数据量为1(应该为cndtr参数)    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;  //    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord  ;  //16位!!!特别注意    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord  ; //16位!!!特别注意    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  //循环模式    DMA_InitStructure.DMA_Priority = DMA_Priority_High; //优先级高    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //(内存到内存禁止)    DMA_Init(DMA_CHx,&DMA_InitStructure);  //初始化    DMA_SetCurrDataCounter(DMA1_Channel1,1);//设置数据量(应该为cndtr参数,若有其它需要改变即                                             //可,我这里是为了直观)} ADC相关配置



更多回帖

发帖
×
20
完善资料,
赚取积分