- UID
- 1029342
- 性别
- 男
|
/** @para none
* @ret none
* @brief 配置dma
*/
void adc_dma_init()
{
DMA_InitTypeDef dma;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel1);
dma.DMA_PeripheralBaseAddr = (u32)&(ADC1->DR); //DMA对应的外设基地址
dma.DMA_MemoryBaseAddr = (u32)&ad_value; //内存存储基地址
dma.DMA_DIR = DMA_DIR_PeripheralSRC;//DMA的转换模式为SRC模式,由外设搬移到内存
dma.DMA_M2M = DMA_M2M_Disable; //M2M模式禁用
dma.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//定义外设数据宽度为16位
dma.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //DMA搬移数据尺寸,HalfWord就是为16位
dma.DMA_BufferSize = CH_NUM; //DMA缓存大小CH_NUM个
dma.DMA_MemoryInc = DMA_MemoryInc_Enable; //接收一次数据后,目标内存地址后移
dma.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //接收一次数据后,设备地址禁止后移
dma.DMA_Mode = DMA_Mode_Circular; //转换模式,循环缓存模式。
dma.DMA_Priority = DMA_Priority_High; //DMA优先级高
DMA_Init(DMA1_Channel1,&dma);
}
/** @para none
* @ret none
* @brief 完成adc配置
*/
void adc_config(void)
{
adc_gpio_init();
adc_dma_init();
adc_init();
}
/** @para none
* @ret none
* @brief 启动adc,开始转换
*/
void adc_start(void)
{
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//连续转换开始,ADC通过DMA方式不断的更新RAM区。
DMA_Cmd(DMA1_Channel1,ENABLE);
}
/** @para ADC_Channel --- (ADC_Channel0 ~ ADC_Channel17)
* @ret ADC_Channel_x 的ADC值
*/
uint16_t get_ChannelVale(uint8_t ADC_Channel)
{
uint16_t ret = 0;
switch(ADC_Channel)
{
case ADC_Channel_0:
ret = ad_value[0];
break;
case ADC_Channel_1:
ret = ad_value[1];
break;
case ADC_Channel_2:
ret = ad_value[2];
break;
}
return ret;
} |
|