📄 stm32f10x_adc.c
字号:
* Function Name : ADC_ResetCalibration
* Description : Resets the selected ADC calibration registers.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* Output : None
* Return : None
*******************************************************************************/
void ADC_ResetCalibration(ADC_TypeDef* ADCx)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Resets the selected ADC calibartion registers */
ADCx->CR2 |= CR2_RSTCAL_Set;
}
/*******************************************************************************
* Function Name : ADC_GetResetCalibrationStatus
* Description : Gets the selected ADC reset calibration registers status.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* Output : None
* Return : The new state of ADC reset calibration registers (SET or RESET).
*******************************************************************************/
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of RSTCAL bit */
if ((ADCx->CR2 & CR2_RSTCAL_Set) != (u32)RESET)
{
/* RSTCAL bit is set */
bitstatus = SET;
}
else
{
/* RSTCAL bit is reset */
bitstatus = RESET;
}
/* Return the RSTCAL bit status */
return bitstatus;
}
/*******************************************************************************
* Function Name : ADC_StartCalibration
* Description : Starts the selected ADC calibration process.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* Output : None
* Return : None
*******************************************************************************/
void ADC_StartCalibration(ADC_TypeDef* ADCx)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Enable the selected ADC calibration process */
ADCx->CR2 |= CR2_CAL_Set;
}
/*******************************************************************************
* Function Name : ADC_GetCalibrationStatus
* Description : Gets the selected ADC calibration status.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* Output : None
* Return : The new state of ADC calibration (SET or RESET).
*******************************************************************************/
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of CAL bit */
if ((ADCx->CR2 & CR2_CAL_Set) != (u32)RESET)
{
/* CAL bit is set: calibration on going */
bitstatus = SET;
}
else
{
/* CAL bit is reset: end of calibration */
bitstatus = RESET;
}
/* Return the CAL bit status */
return bitstatus;
}
/*******************************************************************************
* Function Name : ADC_SoftwareStartConvCmd
* Description : Enables or disables the selected ADC software start conversion .
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* - NewState: new state of the selected ADC software start conversion.
* This parameter can be: ENABLE or DISABLE.
* Output : None
* Return : None
*******************************************************************************/
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the selected ADC conversion on external event and start the selected
ADC conversion */
ADCx->CR2 |= CR2_EXTTRIG_SWSTART_Set;
}
else
{
/* Disable the selected ADC conversion on external event and stop the selected
ADC conversion */
ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
}
}
/*******************************************************************************
* Function Name : ADC_GetSoftwareStartConvStatus
* Description : Gets the selected ADC Software start conversion Status.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* Output : None
* Return : The new state of ADC software start conversion (SET or RESET).
*******************************************************************************/
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx)
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of SWSTART bit */
if ((ADCx->CR2 & CR2_SWSTART_Set) != (u32)RESET)
{
/* SWSTART bit is set */
bitstatus = SET;
}
else
{
/* SWSTART bit is reset */
bitstatus = RESET;
}
/* Return the SWSTART bit status */
return bitstatus;
}
/*******************************************************************************
* Function Name : ADC_DiscModeChannelCountConfig
* Description : Configures the discontinuous mode for the selected ADC regular
* group channel.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* - Number: specifies the discontinuous mode regular channel
* count value. This number must be between 1 and 8.
* Output : None
* Return : None
*******************************************************************************/
void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, u8 Number)
{
u32 tmpreg1 = 0;
u32 tmpreg2 = 0;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_REGULAR_DISC_NUMBER(Number));
/* Get the old register value */
tmpreg1 = ADCx->CR1;
/* Clear the old discontinuous mode channel count */
tmpreg1 &= CR1_DISCNUM_Reset;
/* Set the discontinuous mode channel count */
tmpreg2 = Number - 1;
tmpreg1 |= tmpreg2 << 13;
/* Store the new register value */
ADCx->CR1 = tmpreg1;
}
/*******************************************************************************
* Function Name : ADC_DiscModeCmd
* Description : Enables or disables the discontinuous mode on regular group
* channel for the specified ADC
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* - NewState: new state of the selected ADC discontinuous mode
* on regular group channel.
* This parameter can be: ENABLE or DISABLE.
* Output : None
* Return : None
*******************************************************************************/
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the selected ADC regular discontinuous mode */
ADCx->CR1 |= CR1_DISCEN_Set;
}
else
{
/* Disable the selected ADC regular discontinuous mode */
ADCx->CR1 &= CR1_DISCEN_Reset;
}
}
/*******************************************************************************
* Function Name : ADC_RegularChannelConfig
* Description : Configures for the selected ADC regular channel its corresponding
* rank in the sequencer and its sample time.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* - ADC_Channel: the ADC channel to configure.
* This parameter can be one of the following values:
* - ADC_Channel_0: ADC Channel0 selected
* - ADC_Channel_1: ADC Channel1 selected
* - ADC_Channel_2: ADC Channel2 selected
* - ADC_Channel_3: ADC Channel3 selected
* - ADC_Channel_4: ADC Channel4 selected
* - ADC_Channel_5: ADC Channel5 selected
* - ADC_Channel_6: ADC Channel6 selected
* - ADC_Channel_7: ADC Channel7 selected
* - ADC_Channel_8: ADC Channel8 selected
* - ADC_Channel_9: ADC Channel9 selected
* - ADC_Channel_10: ADC Channel10 selected
* - ADC_Channel_11: ADC Channel11 selected
* - ADC_Channel_12: ADC Channel12 selected
* - ADC_Channel_13: ADC Channel13 selected
* - ADC_Channel_14: ADC Channel14 selected
* - ADC_Channel_15: ADC Channel15 selected
* - ADC_Channel_16: ADC Channel16 selected
* - ADC_Channel_17: ADC Channel17 selected
* - Rank: The rank in the regular group sequencer. This parameter
* must be between 1 to 16.
* - ADC_SampleTime: The sample time value to be set for the
* selected channel.
* This parameter can be one of the following values:
* - ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles
* - ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles
* - ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles
* - ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles
* - ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles
* - ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles
* - ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles
* - ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles
* Output : None
* Return : None
*******************************************************************************/
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, u8 ADC_Channel, u8 Rank, u8 ADC_SampleTime)
{
u32 tmpreg1 = 0, tmpreg2 = 0;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CHANNEL(ADC_Channel));
assert_param(IS_ADC_REGULAR_RANK(Rank));
assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
/* if ADC_Channel_10 ... ADC_Channel_17 is selected */
if (ADC_Channel > ADC_Channel_9)
{
/* Get the old register value */
tmpreg1 = ADCx->SMPR1;
/* Calculate the mask to clear */
tmpreg2 = SMPR1_SMP_Set << (3 * (ADC_Channel - 10));
/* Clear the old discontinuous mode channel count */
tmpreg1 &= ~tmpreg2;
/* Calculate the mask to set */
tmpreg2 = (u32)ADC_SampleTime << (3 * (ADC_Channel - 10));
/* Set the discontinuous mode channel count */
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SMPR1 = tmpreg1;
}
else /* ADC_Channel include in ADC_Channel_[0..9] */
{
/* Get the old register value */
tmpreg1 = ADCx->SMPR2;
/* Calculate the mask to clear */
tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
/* Clear the old discontinuous mode channel count */
tmpreg1 &= ~tmpreg2;
/* Calculate the mask to set */
tmpreg2 = (u32)ADC_SampleTime << (3 * ADC_Channel);
/* Set the discontinuous mode channel count */
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SMPR2 = tmpreg1;
}
/* For Rank 1 to 6 */
if (Rank < 7)
{
/* Get the old register value */
tmpreg1 = ADCx->SQR3;
/* Calculate the mask to clear */
tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
/* Clear the old SQx bits for the selected rank */
tmpreg1 &= ~tmpreg2;
/* Calculate the mask to set */
tmpreg2 = (u32)ADC_Channel << (5 * (Rank - 1));
/* Set the SQx bits for the selected rank */
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SQR3 = tmpreg1;
}
/* For Rank 7 to 12 */
else if (Rank < 13)
{
/* Get the old register value */
tmpreg1 = ADCx->SQR2;
/* Calculate the mask to clear */
tmpreg2 = SQR2_SQ_Set << (5 * (Rank - 7));
/* Clear the old SQx bits for the selected rank */
tmpreg1 &= ~tmpreg2;
/* Calculate the mask to set */
tmpreg2 = (u32)ADC_Channel << (5 * (Rank - 7));
/* Set the SQx bits for the selected rank */
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SQR2 = tmpreg1;
}
/* For Rank 13 to 16 */
else
{
/* Get the old register value */
tmpreg1 = ADCx->SQR1;
/* Calculate the mask to clear */
tmpreg2 = SQR1_SQ_Set << (5 * (Rank - 13));
/* Clear the old SQx bits for the selected rank */
tmpreg1 &= ~tmpreg2;
/* Calculate the mask to set */
tmpreg2 = (u32)ADC_Channel << (5 * (Rank - 13));
/* Set the SQx bits for the selected rank */
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SQR1 = tmpreg1;
}
}
/*******************************************************************************
* Function Name : ADC_ExternalTrigConvCmd
* Description : Enables or disables the ADCx conversion through external trigger.
* Input : - ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* - NewState: new state of the selected ADC external trigger
* start of conversion.
* This parameter can be: ENABLE or DISABLE.
* Output : None
* Return : None
*******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -