在线时间5 小时
UID120898
ST金币0
蝴蝶豆0
注册时间2007-6-24
初级会员
- 最后登录
- 2018-11-28
|
a0a.1 0b0c
第一步 时钟
void CLK_Config(void)
{
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_8); /
/设置系统分频,分频越大系统指令时间越长,功耗越低,如果主程序不用快速执行那么请将这个分频设的高一点(1-128分频)
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
//启动ADC模块,启动后有1.2ma电流消耗,不用请禁用,对于间歇采样的用户,比如定时采样,请将此代码放置到采样开始前,采样好后立刻将模块禁止。
CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE);/
/其他模块做法相同,要一直用的就在系统初始化打开,否则请在用前开启。
/* Enable TIM2 clock */
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
/* Remap TIM2 ETR to LSE: TIM2 external trigger becomes controlled by LSE clock */
SYSCFG_REMAPPinConfig(REMAP_Pin_TIM2TRIGLSE, ENABLE);
/* Enable LSE clock */
CLK_LSEConfig(CLK_LSE_ON);
/* Wait for LSERDY flag to be reset */
while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
}
在主程序中的突击采样
u16 ADC_Supply(void)
{
uint8_t i;
uint16_t res;
/* Enable ADC clock */
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE); //【1]】开启模块时钟
/* de-initialize ADC */
ADC_DeInit(ADC1);
/*ADC configuration
ADC configured as follow:
- Channel VREF
- Mode = Single ConversionMode(ContinuousConvMode disabled)
- Resolution = 12Bit
- Prescaler = /1
- sampling time 9 */
ADC_VrefintCmd(ENABLE); //【2】参考电压使能(如果需要矫正采样值才需要开启参考电压,更准确的应该叫对比电压,这个电压值是厂家标定过的。
delay(60); //【2.1】让参考电压稳定
ADC_Cmd(ADC1, ENABLE); //【3】使能模块
ADC_Init(ADC1, ADC_ConversionMode_Single, //【3.1】配置寄存器
ADC_Resolution_12Bit, ADC_Prescaler_1);
ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_9Cycles);
ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);
delay(60); //【3.2】给采样模块稳定时间
ADC_DeInit(ADC1);
/* disable SchmittTrigger for ADC_Channel_24, to save power */
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_24, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, DISABLE);
ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, DISABLE);
/* initialize result */ //【3.3】软件触发采样,循环8次做平均
res = 0;
for(i=8; i>0; i--)
{
/* start ADC convertion by software */
ADC_SoftwareStartConv(ADC1);
/* wait until end-of-covertion */
while( ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0 );
/* read ADC convertion result */
res += ADC_GetConversionValue(ADC1);
}
/* de-initialize ADC */
ADC_VrefintCmd(DISABLE); //【3.1】禁止参考电压,节能
/* Disable ADC 1 for reduce current */
ADC_Cmd(ADC1, DISABLE); //【4.1】禁止采样模块
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, DISABLE); //【4.2】关闭采样时钟,到此模块不再耗电
return (res>>3);
}
楼下继续 |
-
-
stm8l-discovery_RTC.rar
下载
1.78 MB, 下载次数: 105, 下载积分: ST金币 -1
|