赞
踩
目录
程序如下:
- #include "stm32f10x.h" // Device header
-
- void MyDMA_Init(uint32_t ADDR_A,uint32_t ADDR_B,uint16_t size)
- {
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
- DMA_InitTypeDef DMA_InitStruct;
- DMA_InitStruct.DMA_PeripheralBaseAddr=ADDR_A;//外设站点(起始站点)
- DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;//数据宽度
- DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Enable;//是否自增
- DMA_InitStruct.DMA_MemoryBaseAddr=ADDR_B;//存储器站点(目的点站)
- DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;//数据宽度
- DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;//是否自增
- DMA_InitStruct.DMA_BufferSize=size;//传输次数
- DMA_InitStruct.DMA_DIR=DMA_DIR_PeripheralSRC;//从外设站点到存储器站点转运
- DMA_InitStruct.DMA_M2M=DMA_M2M_Enable;//软件触发
- DMA_InitStruct.DMA_Mode=DMA_Mode_Normal;//传输计数器不自动重装
- DMA_InitStruct.DMA_Priority=DMA_Priority_Medium;//优先级
- DMA_Init(DMA1_Channel1,&DMA_InitStruct);
-
- DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA
- }
程序如下:
- #include "stm32f10x.h" // Device header
- uint16_t AD_value[4];
- void AD_Init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;
- GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
- GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStruct);
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
- RCC_ADCCLKConfig(RCC_PCLK2_Div6);
-
- ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC1,ADC_Channel_3,4,ADC_SampleTime_55Cycles5);
-
- ADC_InitTypeDef ADC_InitStruct;
- ADC_InitStruct.ADC_ContinuousConvMode=ENABLE;//单次转换
- ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;//数据右对齐
- ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//无外部触发源
- ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;//ADC1和ADC2独立
- ADC_InitStruct.ADC_NbrOfChannel=4;//通道数目
- ADC_InitStruct.ADC_ScanConvMode=ENABLE;//扫描模式
- ADC_Init(ADC1,&ADC_InitStruct);
-
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
- DMA_InitTypeDef DMA_InitStruct;
- DMA_InitStruct.DMA_PeripheralBaseAddr=(uint32_t)&ADC1->DR;//外设站点(起始站点)
- DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//数据宽度
- DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//是否自增
- DMA_InitStruct.DMA_MemoryBaseAddr=(uint32_t)AD_value;//存储器站点(目的点站)
- DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;//数据宽度
- DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;//是否自增
- DMA_InitStruct.DMA_BufferSize=4;//传输次数
- DMA_InitStruct.DMA_DIR=DMA_DIR_PeripheralSRC;//从外设站点到存储器站点转运
- DMA_InitStruct.DMA_M2M=DMA_M2M_Disable;//硬件触发
- DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;//传输计数器自动重装
- DMA_InitStruct.DMA_Priority=DMA_Priority_Medium;//优先级
- DMA_Init(DMA1_Channel1,&DMA_InitStruct);
-
- DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA
- ADC_DMACmd(ADC1,ENABLE);//ADC硬件触发DMA
- ADC_Cmd(ADC1,ENABLE);
- //校准
- ADC_ResetCalibration(ADC1);
- while(ADC_GetResetCalibrationStatus(ADC1)==SET);
- ADC_StartCalibration(ADC1);
- while(ADC_GetCalibrationStatus(ADC1)==SET);
- ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开始转换
- }
类型 | 起始地址 | 存储器 | 用途 |
ROM | 0x0800 0000 | 程序存储器Flash | 存储C语言编译后的程序代码 |
0x1FFF F000 | 系统存储器 | 存储BootLoader,用于串口下载 | |
0x1FFF F800 | 选项字节 | 存储一些独立于程序代码的配置参数 | |
RAM | 0x2000 0000 | 运行内存SRAM | 存储运行过程中的临时变量 |
0x4000 0000 | 外设寄存器 | 存储各个外设的配置参数 | |
0xE000 0000 | 内核外设寄存器 | 存储内核各个外设的配置参数 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。