-
ADC1
和
ADC2
双
ADC
模式
TIM8
< br>同时触发。
折腾了
3
天,各种查询,感谢网上的大侠提供的信息。现总结下我遇到的问题
<
/p>
1
、配置问题:
ADC1
配置模式选择:
ADC_Mode_RegSimult
触发选择:
ADC_Externa
lTrigConv_Ext_IT11_TIM8_TRGO
GPIO_PinRemapConfig
(GPIO_Remap_ADC1_ETRGREG, ENABLE);
/*
重要!!通过复用选择触
发
*/
就这一句话,我找了一天的原因,汗!!
重点:要使用管脚重映射来选择外部触发信号,原因:
2
、配置
T
IM8TRGO
信号要注意:如果选择了更新模式,同时又开启了预加载,那么此时重<
/p>
复计数器会影响这个信号的输出。
3<
/p>
、
ADC
配置程序:
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef
DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/* ADCCLK =
PCLK2
/
4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
//
设置
ADC
分频因子
6 72M/
6=12,ADC
最大时间不
能超过
14M
GPIO_PinRemapConfig
(GPIO_Remap_ADC1_ETRGREG, ENABLE);
/*
重要!!
通过复用选择
触发
*/
/* Enable peripheral clocks
------------------------------------------------*/
/* Enable DMA1
and DMA2 clocks */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 |
RCC_AHBPeriph_DMA2, ENABLE);
/* Enable ADC1,
ADC2, ADC3 and GPIOC clocks */
RCC_APB2PeriphClockCmd(RCC_
APB2Periph_ADC1 | RCC_APB2Periph_ADC2 |
RCC_APB2Periph_ADC3,
ENABLE);
/*
DMA1 channel1 configuration
----------------------------------------------*/
DMA_DeInit(DMA1_Channel1);
DMA__PeripheralBaseAddr =
ADC1_DR_Address;
DMA__MemoryBaseAddr =
(uint32_t)&AdcCh12Buf;
//ADC12
公用缓冲
DMA__DIR =
DMA_DIR_PeripheralSRC;
//
从外设读
DMA__BufferSize
= AdDataNum;
//
传送数量
DMA__PeripheralInc =
DMA_PeripheralInc_Disable;
//
外设地址加关闭
DMA__MemoryInc
=
DMA_MemoryInc_Enable;
//<
/p>
寄存器地
址加开启
DMA__PeripheralDataSize =
DMA_PeripheralDataSize_Word;
//
字
32
位传
< br>输
DMA__MemoryDataSize
=
DMA_MemoryDataSize_Word;
p>
//
字
32
位传输
DMA__Mode
=
DMA_Mode_Circular;
//<
/p>
单
次
传
输
:
DMA_Mode_Normal
,
DMA_Mode_Circular
DMA__Priority = DMA_Priority_High;
//
高优先级
DMA__M2M =
DMA_M2M_Disable;
//
非存储器到存储器模式
DMA_Init(DMA1_Channel1,
&DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1,
DMA_IT_TC, ENABLE);
//
中断配置:半满和全满
/* Enable DMA1
channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
/*
DMA2 channel5 configuration
----------------------------------------------*/
DMA_DeInit(DMA2_Channel5);
DMA__PeripheralBaseAddr =
ADC3_DR_Address;
//ADC3
地址
DMA__MemoryBaseAddr =
(uint32_t)&Adc3Buf;
//
数据缓冲
DMA__DIR =
DMA_DIR_PeripheralSRC;
//
从外设读
DMA__BufferSize
= AdDataNum;
//
传输个数
DMA__PeripheralInc
=
DMA_PeripheralInc_Disable;
//
外设地址增加关
闭
DMA__MemoryInc
=
DMA_MemoryInc_Enable;
//
寄存
器地
址增加开启
DMA__PeripheralDataSize
=
DMA_PeripheralDataSize_HalfWord;
//
半字
传输
DMA__MemoryDataSize
=
DMA_MemoryDataSize_HalfWord;
//
半字传输
DMA__Mode
=
DMA_Mode_Circular;
//
普通传
输
,DMA_Mode_Circular
DMA__Priority =
DMA_Priority_High;
DMA__M2M = DMA_M2M_Disable;
DMA_Init(DMA2_Channel5,
&DMA_InitStructure);
/* Enable DMA2
channel5 */
DMA_Cmd(DMA2_Channel5, ENABLE);
/*
ADC1 configuration -------------------------------
-----------------------*/
ADC__Mode = ADC_Mode_RegSimult;
//
同步规则
ADC__ScanConvMode = DISABLE;
//
扫描禁止
ADC__ContinuousConvMode = DISABLE;
//
连续转换,由外部启动
ADC__ExternalTrigConv
=
ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO;
//
使用
T
IM8
的
TRGO:
ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO
ADC__DataAlign
= ADC_DataAlign_Right;
//
右对齐
ADC__NbrOfChannel = 1;
//
规则转换数量
ADC_Init(ADC1,
&ADC_InitStructure);
/* ADC1 regular channels configuration
*/
ADC_RegularChannelConfig(ADC1,
ADC_Channel_10, 1, ADC_SampleTime_1Cycles5);
//
电压
检
测通道
//ADC_RegularChannelConfig(ADC1,
ADC_Channel_1,
2,
ADC_SampleTime_28Cycles5);
//
电压给定通道
ADC_DiscModeChannelCountConfig(ADC1,
2);
//
间断模式通道计数
ADC_DiscModeCmd(ADC1,
ENABLE);
//
使能间断模式
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* ADC2
configuration ------------------------------------
------------------*/
ADC__Mode = ADC_Mode_RegSimult;
//ADC2
和
ADC3
这些位为保留位
ADC__ScanConvMode =
DISABLE;
ADC__ContinuousConvMode =
DISABLE;
ADC__ExternalTrigConv
=ADC_ExternalTrigConv_None;
ADC__DataAlign =
ADC_DataAlign_Right;
ADC__NbrOfChannel = 1;
ADC_Init(ADC2,
&ADC_InitStructure);
/* ADC2 regular channels configuration
*/
ADC_RegularChannelConfig(ADC2,
ADC_Channel_11, 1, ADC_SampleTime_1Cycles5);
//
电流
-
-
-
-
-
-
-
-
-
上一篇:最新How-many---How-much区别与练习(1)
下一篇:解剖名词解释