历史上的今天
今天是:2025年01月12日(星期日)
2020年01月12日 | STM8S AD转换
2020-01-12 来源:eefocus
//不说那么多了,直接上程序
void ADC1_DeInit(void)
{
ADC1->CSR = ADC1_CSR_RESET_VALUE;
ADC1->CR1 = ADC1_CR1_RESET_VALUE;
ADC1->CR2 = ADC1_CR2_RESET_VALUE;
ADC1->CR3 = ADC1_CR3_RESET_VALUE;
ADC1->TDRH = ADC1_TDRH_RESET_VALUE;
ADC1->TDRL = ADC1_TDRL_RESET_VALUE;
ADC1->HTRH = ADC1_HTRH_RESET_VALUE;
ADC1->HTRL = ADC1_HTRL_RESET_VALUE;
ADC1->LTRH = ADC1_LTRH_RESET_VALUE;
ADC1->LTRL = ADC1_LTRL_RESET_VALUE;
ADC1->AWCRH = ADC1_AWCRH_RESET_VALUE;
ADC1->AWCRL = ADC1_AWCRL_RESET_VALUE;
}
void ADC1_Init(ADC1_ConvMode_TypeDef ADC1_ConversionMode,
ADC1_Channel_TypeDef ADC1_Channel,
ADC1_PresSel_TypeDef ADC1_PrescalerSelection,
ADC1_ExtTrig_TypeDef ADC1_ExtTrigger,
FunctionalState ADC1_ExtTriggerState,
ADC1_Align_TypeDef ADC1_Align,
ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel,
FunctionalState ADC1_SchmittTriggerState)
{
/* Check the parameters */
assert_param(IS_ADC1_CONVERSIONMODE_OK(ADC1_ConversionMode));//单次还
是连续转换
assert_param(IS_ADC1_CHANNEL_OK(ADC1_Channel));
assert_param(IS_ADC1_PRESSEL_OK(ADC1_PrescalerSelection));
assert_param(IS_ADC1_EXTTRIG_OK(ADC1_ExtTrigger));
assert_param(IS_FUNCTIONALSTATE_OK(((ADC1_ExtTriggerState))));
assert_param(IS_ADC1_ALIGN_OK(ADC1_Align));
assert_param(IS_ADC1_SCHMITTTRIG_OK(ADC1_SchmittTriggerChannel));
assert_param(IS_FUNCTIONALSTATE_OK(ADC1_SchmittTriggerState));
/*-----------------CR1 & CSR configuration --------------------*/
/* Configure the conversion mode and the channel to convert
respectively according to ADC1_ConversionMode & ADC1_Channel values
& ADC1_Align values */
ADC1_ConversionConfig(ADC1_ConversionMode, ADC1_Channel, ADC1_Align);
/* Select the prescaler division factor according to
ADC1_PrescalerSelection values */
ADC1_PrescalerConfig(ADC1_PrescalerSelection);
/*-----------------CR2 configuration --------------------*/
/* Configure the external trigger state and event respectively
according to NewState, ADC1_ExtTrigger */
ADC1_ExternalTriggerConfig(ADC1_ExtTrigger, ADC1_ExtTriggerState);
/*------------------TDR configuration ---------------------------*/
/* Configure the schmitt trigger channel and state respectively
according to ADC1_SchmittTriggerChannel & ADC1_SchmittTriggerNewState
values */
ADC1_SchmittTriggerConfig(ADC1_SchmittTriggerChannel,
ADC1_SchmittTriggerState);
/* Enable the ADC1 peripheral */
ADC1->CR1 |= ADC1_CR1_ADON;
}
void ADC1_Cmd(FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONALSTATE_OK(NewState));
if (NewState != DISABLE)
{
ADC1->CR1 |= ADC1_CR1_ADON;
}
else /* NewState == DISABLE */
{
ADC1->CR1 &= (u8)(~ADC1_CR1_ADON);
}
}
void ADC1_StartConversion(void)
{
ADC1->CR1 |= ADC1_CR1_ADON;
}
FlagStatus ADC1_GetFlagStatus(ADC1_Flag_TypeDef Flag)
{
u8 flagstatus = 0;
u8 temp = 0;
/* Check the parameters */
assert_param(IS_ADC1_FLAG_OK(Flag));
if ((Flag & 0x0F) == 0x01)
{
/* Get OVR flag status */
flagstatus = (u8)(ADC1->CR3 & ADC1_CR3_OVR);
}
else if ((Flag & 0xF0) == 0x10)
{
/* Get analog watchdog channel status */
temp = (u8)(Flag & 0x0F);
if (temp < 8)
{
flagstatus = (u8)(ADC1->AWSRL & (1 << temp));
}
else
{
flagstatus = (u8)(ADC1->AWSRH & (1 << (temp - 8)));
}
}
else /* Get EOC | AWD flag status */
{
flagstatus = (u8)(ADC1->CSR & Flag);
}
return ((FlagStatus)flagstatus);
}
u16 ADC1_GetConversionValue(void)
{
u16 temph = 0;
u8 templ = 0;
if (ADC1->CR2 & ADC1_CR2_ALIGN) /* Right alignment */
{
/* Read LSB first */
templ = ADC1->DRL;
/* Then read MSB */
temph = ADC1->DRH;
temph = (u16)(templ | (u16)(temph << (u8)8));
}
else /* Left alignment */
{
/* Read MSB firts*/
temph = ADC1->DRH;
/* Then read LSB */
templ = ADC1->DRL;
temph = (u16)((u16)(templ << (u8)6) | (u16)(temph << (u8)8));
}
return ((u16)temph);
}
//以下程序是用AN3即PB3进行AD转换,并将AD值放在 u16 ADVal
//初始化时调用:
GPIO_DeInit(GPIOB);
GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//设置IO为悬浮输入
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_3,
ADC1_PRESSEL_FCPU_D6,ADC1_EXTTRIG_TIM,DISABLE,
ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL3,DISABLE);
/*单次转换*/ /*PB3/AN3*/ /*6分频*/ /*内部定时器1 TRG事件*/
/*禁止外部触发转换*/ /*数据右对齐 (低8字节在ADC_DRL寄存器,其余高字节
位在ADC_DRH寄存器)读顺序
应先读低位,再读高位字节*/
ADC1_Cmd(ENABLE);//允许进行AD转换
//进行AD取值时调用:
ADC1_StartConversion();//开始AD转换
while(0==ADC1_GetFlagStatus(ADC1_FLAG_EOC));//等待转换完成
ADC1_ClearFlag(ADC1_FLAG_EOC); //清除AD完成标志位
ADVal = ADC1_GetConversionValue();//读AD值
史海拾趣
|
整流二极管反向恢复时间与关断尖峰的关系。 在一般的桥式整流电路中,整流后的电压波形是方波,工作中会有一个尖峰。现在问题是: 1、这个尖峰是如何产生的。 2、这个尖峰的大小跟二极管的反向恢复时间的关系是怎么样的? 3、如果 ...… 查看全部问答> |
|
问题很简单,我在irq_mj_read 中自己构造IRP 查询文件全路径,结果出错 0xc00000d 参数错误 请联系我:13791007364 张波, 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急… 查看全部问答> |
|
1.计算机、电子或相关专业本科毕业 2.熟悉TI DSP结构 3.熟悉C与C++ 4.1年以上TI DSP软件开发工作经验 5.具有高度的责任心,有团队合作精神 即将成立新的公司,公司需要以下人员:图象处理和模式识别,DSP+ARM软硬开发,音视频编解码,音 ...… 查看全部问答> |
|
因為我用MSP430的板子做的作品想要加入量測功率的功能我聽說MSP430內就有可以做功率量測的功能但是我不知道該如何使用?所以想說買一顆功率量測IC來實現 ,可是不知道用哪顆IC比較適合?所以希望有人能提供要如何用MSP430來做功率量測的方法或方向或 ...… 查看全部问答> |
|
问一下,在一个树形或者网型网络中,相邻两个FFD路由能够同时收到多个RFD的数据,?正常一个RFD只能与其父节点通信,这要实现跳网吗?大侠们看看。… 查看全部问答> |




