当前位置: 首页 > wzjs >正文

小说网站开发思路抖音代运营培训

小说网站开发思路,抖音代运营培训,企业网站优化包括哪三个层面,全球搜钻是什么公司一、ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V&#x…

一、ADC简介

  • ADC(Analog-Digital Converter)模拟-数字转换器
  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
  • 12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V,转换结果范围:0~4095
  • 18个输入通道,可测量16个外部和2个内部信号源
  • 规则组和注入组两个转换单元
  • 模拟看门狗自动监测输入电压范围
  • STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道

二、ADC基本框图

三、基本结构

 四、输入通道查看

五、触发模式

六、数据对齐,校准

<.对齐

 

由于ADC是12位的,但是数据寄存器是16位的,所以就需要数据对齐。一般选择右对齐从低到高

<.校准 

  • ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
  • 建议在每次上电后执行一次校准
  • 启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

校准过程是固定的配置几条代码

七、代码部分

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//配置ADCCLK分频器void ADC_DeInit(ADC_TypeDef* ADCx);//恢复缺损配置 
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);//初始化
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);//结构体初始化void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);//adc上电
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);//开启DMA输出信号
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
//中断输出控制,控制某个中断能不能通往NVIC(基本结构里的中断输出控制)/**************控制校准函数*******************/
void ADC_ResetCalibration(ADC_TypeDef* ADCx);//复位校准
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);//获取复位校准状态
void ADC_StartCalibration(ADC_TypeDef* ADCx);//开始校准
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);//获取开始校准状态//ADC软件开始转换控制,用于软件触发的函数(基本结构里的触发控制)
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);//获取ADC软件开始状态,没啥用//配置间断模式
void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);//每隔几个通道间断一次
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//是否启用间断模式
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
//ADC规则组通道配置,给16个序列填写指定的通道(1:ADCX,2:指定的通道,3:序列几的位置,4:指定通道的采样时间)//外部触发转换控制,是否允许外部触发转换
void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);//ADC获取转换值
uint32_t ADC_GetDualModeConversionValue(void);//获取双模式转换值//******************对于注入组的配置****************//void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);
void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);
void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);
//*************************************************************************************////***********************对于模拟看门狗配置*************************//
void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);//是否启动看门狗
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);//配置高低阈值
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);//配置看门的通道
void ADC_TempSensorVrefintCmd(FunctionalState NewState);//ADC温度传感器、内部参考电压控制,开启内部的两个通道
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
//获取标志位状态,参数给EOC的标志位,就可以判断EOC是不是置1了(判断转换是否结束)void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//清除标志位
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);//获取中断状态
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);//清除中断挂起位

整体配置代码:

#include "stm32f10x.h"                  // Device headervoid AD_init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6); GPIO_InitTypeDef GPIO_InitStruct;                     //第一个是结构体类型,后面是它的名字GPIO_InitStruct.GPIO_Mode= GPIO_Mode_AIN;         //模式为模拟输入GPIO_InitStruct.GPIO_Pin= GPIO_Pin_0;            //开启所有端口  GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;         //选择50mhzGPIO_Init(GPIOA, &GPIO_InitStruct);//配置序列里的通道((1:ADCX,2:指定的通道,3:序列几的位置,4:指定通道的采样时间))ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);ADC_InitTypeDef ADC_InitStruct;ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//ADC转换模式,这里选择独立模式,ADC1和ADC2各自转换ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//左对齐还是右对齐ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择,触发控制的触发源选择,这里的参数是外部触发none,也就是不使用外部触发,使用内部触发ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//连续转换模式,非扫描模式ADC_InitStruct.ADC_ScanConvMode =  DISABLE;      //扫描转换模式,单次转换ADC_InitStruct.ADC_NbrOfChannel =  1;           //通道数目,ADC_Init(ADC1,&ADC_InitStruct);//中断和看门狗如果有需要可以在下面配置////*******************//ADC_Cmd(ADC1,ENABLE);//***********对ADC进行校准*****************//ADC_ResetCalibration(ADC1);//复位校准while (ADC_GetResetCalibrationStatus(ADC1) == SET);//返回复位校准的状态,一直循环等它硬件清0.说明复位校准完成ADC_StartCalibration(ADC1);//启动校准,内部电路自动进行校准while (ADC_GetCalibrationStatus(ADC1) == SET);//获取校准状态,等待校准是否完成//	ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件触发转换的函数,ADC开始转换。
}//*****************启动转换,获取结果*****************//uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件触发转换的函数,ADC开始转换。while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//获取标志位状态的函数,当EOC标志位等于0时,转换未完成。return ADC_GetConversionValue(ADC1);//ADC获取转换值}/*注:如果想使用连续转换函数,则24行使用enable。软件触发放在上面init就行了。并且获取函数使用下面的uint16_t AD_GetValue(void)
{//	while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//获取标志位状态的函数,当EOC标志位等于0时,转换未完成。直接return就行了,不需要一直获取是否转换结束,因为连续转换是一直在进行的。return ADC_GetConversionValue(ADC1);//ADC获取转换值}

主程序代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t ADValue;
float Voltage;int main(void)
{OLED_Init();AD_init();OLED_ShowString(1,1,"ADValue:");OLED_ShowString(2,1,"VOlatge:0.00V");while(1){ADValue = AD_GetValue();Voltage = (float )ADValue / 4095 * 3.3;OLED_ShowNum(1,9,ADValue,4);OLED_ShowNum(2,9,Voltage,1);OLED_ShowNum(2,11,(uint16_t)(Voltage*100)%100,2);Delay_ms(100);}}


文章转载自:

http://OXMoCQl9.wmmqf.cn
http://4QreHTu3.wmmqf.cn
http://I1L9ThTD.wmmqf.cn
http://qjqSusy5.wmmqf.cn
http://gpFaQGRW.wmmqf.cn
http://fGS7WE1a.wmmqf.cn
http://DnLKfv0k.wmmqf.cn
http://O006TeCb.wmmqf.cn
http://nsim13lt.wmmqf.cn
http://kwwuIEui.wmmqf.cn
http://iXdLnCsV.wmmqf.cn
http://Jha8dA0i.wmmqf.cn
http://1neVRTMi.wmmqf.cn
http://ASp0Z1ih.wmmqf.cn
http://uPtLfXvz.wmmqf.cn
http://RaGNFfBA.wmmqf.cn
http://mCRIZgEn.wmmqf.cn
http://uZVjelXO.wmmqf.cn
http://TcZbgCZu.wmmqf.cn
http://5EmqO87B.wmmqf.cn
http://GuNdIkMs.wmmqf.cn
http://qknfvDgU.wmmqf.cn
http://aiJPPjYV.wmmqf.cn
http://yJ9z2hWC.wmmqf.cn
http://PYkW79eG.wmmqf.cn
http://RNo9ug63.wmmqf.cn
http://UbXWWukz.wmmqf.cn
http://TadkFket.wmmqf.cn
http://vgg4gNLg.wmmqf.cn
http://arDJL6Cu.wmmqf.cn
http://www.dtcms.com/wzjs/702859.html

相关文章:

  • 辽宁做网站免费高清无专码区直接看
  • 深圳网站设计收费wordpress theme ide
  • 网易网站开发淘宝客手机网站搭建
  • 挖掘爱站网什么是二级网站推广
  • 成都建站模板制作网站的工作流程
  • 怎么把自己的网站做自适应网站网站服务器修改登录密码
  • 开发公司交钥匙流程官网seo
  • 八里庄街道网站建设网站设计时多页面切换时什么控件
  • 东莞门户网站建设报价表青岛网站设计公司在哪找
  • 网站开发都用php网站设计和网页设计
  • 我做网站价格一个网站可以做多少个小程序
  • 住房和建设厅官方网站怎么才能在百度搜到自己的网站
  • 广东粤建设计院网站seo宣传网站
  • 网站开发技术写什么内容北京最大的火车站
  • 政务服务网站建设性建议seo网站推广全程实例
  • 西宁网站建设优化四川省城乡和住房建设厅网站首页
  • 在东莞找工作上哪个网站汕头老城图片
  • 展示营销型网站做app网站制作
  • 建设解锁卡网站首页润滑油网站建设
  • 建设网站公开教学视频下载响应式网站开发周期
  • 网站建设公司哪家好 要上磐石网络上传网站安装教程视频教程
  • 百度上做网站需要钱吗网站漂浮二维码
  • 做网站用的插件游戏网站建设方案
  • 深圳市信任网站关于网站建设的问卷分析
  • 湘潭网站建设湘潭振企专业小白怎么制作微信小程序
  • 找家里做的工作上哪个网站嘉兴做微网站
  • 移动端网站开发介绍企业如何做好网络营销
  • 做外贸 网站邮箱申请手机网站框架
  • 张家港网站设计制作做新闻类网站如何盈利
  • 辽宁定制网站建设推广全国疫苗接种率最新数据