手机网站设计要求wordpress懒加载插件
2026/4/17 1:32:22 网站建设 项目流程
手机网站设计要求,wordpress懒加载插件,营销型网站建设ppt模板下载,网上国网app下载安装1.ADC简介1.简述#xff08;根据第二点#xff09;#xff1a;原本只有高、低电平之分#xff0c;现在通过ADC可以得到具体的电压值#xff08;数字电路只有高低电平#xff09;2.转换频率#xff1a;1MHz#xff08;根据第三点的1us转换时间#xff09;3.模拟看门狗根据第二点原本只有高、低电平之分现在通过ADC可以得到具体的电压值数字电路只有高低电平2.转换频率1MHz根据第三点的1us转换时间3.模拟看门狗可以监测指定的某个通道达到某个条件就会申请中断在中断中执行某些操作4.另外DAC是数字-模拟转换器PWM也是数字到模拟的桥梁通过调整占空比来模拟信号2.ADC内部结构1.普通ADC内部结构总结通过比较器DAC采用二分法输出已知编码的电压与输入电路中未知编码的电压比较逐次逼近未知编码最后输出正确的电压值VREF是参考电压结果取决于其电压值2.STM32的ADC内部结构注意注入通道由4个数据寄存器可以同时存4个数据而规则通道只有一个数据寄存器同时传入16个数据时只能通过1个其他的会被挤掉所以最好配合DMA数据转运帮手使用。触发ADC开始转换的信号软件触发程序中手写代码硬件触发利用定时器的更新事件触发也可以选择外部中断引脚即EXTI来触发转换VDDA和VSSA是内部模拟部分的电源ADCCLK是用于驱动内部逐次比较的时钟在RCC中通过ADC分频器后得到最大14MHz所以ADC分频器只能选择6分频12MHz和8分频9MHzEOC规则组的完成信号标志位JEOC注入组的完成信号标志位3.ADC基本结构部分解释触发控制就是选择软件触发还是硬件触发开关控制就是ADC_Cmd函数给ADC上电4.细节1.输入通道对应的GPIO口注意STM32只有ADC1和ADC22.规则组的4种转换模式1.单次转换非扫描模式解释在非扫描模式下16个序列就只有序列1有效在此选择通道后ADC对这个通道进行模数转换完成后在EOC置1即可。每次都会结束2.连续转换非扫描模式解释一直进行非扫描模式的转换。像读AD值的时候直接读数据寄存器3.单次转换扫描模式解释通道数目需要直接手动写入参数在扫描模式下16个序列可以自由使用但是每次转换都会有多个结果放在数据寄存器里这就意味着需要用DMA及时将数据挪走。4.连续转换扫描模式上面已经解释过两个模式的具体区别在此不再解释。3.触发控制规则组的触发源倒数第二个触发源的类型究竟是引脚还是定时器需要用AFIO重映射来确定4.数据对齐原因ADC是12位的转换结果是一个12位的数据但是数据寄存器是16位的一般用右对齐5.转换时间这就是稳定情况下最快1us的来源6.校准了解5.实战代码1.部分函数的功能//ADCCLK的配置函数配置ADCCLK分频器 void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); //配置ADC转换器 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); void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);//开启DMA输出信号 void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);//中断输出控制 void ADC_ResetCalibration(ADC_TypeDef* ADCx);//复位校准 FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);//获取复位校准状态 void ADC_StartCalibration(ADC_TypeDef* ADCx);//开始校准 FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);//获取开始校准状态 void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//用于软件触发 FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); //ADC获取软件开始转换状态不能判断是否结束 FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//获取标志位状态看EOC //配置间断模式 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规则组通道配置在序列中选择通道 void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); //ADC外部触发转换控制是否允许外部触发转换 uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); //ADC获取转值读取AD转换的数据寄存器即读取转换结果 uint32_t ADC_GetDualModeConversionValue(void); //ADC获取双模式转换值 //注入组 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); //配置看门通道 //ADC温度传感器内部参考电压控制 void ADC_TempSensorVrefintCmd(FunctionalState NewState); FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//获取标志位状态 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);//清除中断挂起位2.配置思路1.RCC开启时钟把GPIO和ADC的时钟打开包括ADCCLK的分频器也要配置2.配置GPIO配置成模拟输入模式3.配置开关将左边的通道接入右边的规则组里就是选择通道4.配置ADC转换器转换模式、通道数、触发源、数据对齐等5.开启ADC3.基本配置格式AD单通道、非扫描模式//ADC都是APB2上的设备 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//开启ADC1的时钟 //需要用到PA0口将可调的电压输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //配置ADCCLK RCC_ADCCLKConfig(RCC_PCLK2_Div6); //配置GPIO时钟 GPIO_InitTypeDef GPIO_InitStructure;//结构体定义 GPIO_InitStructure.GPIO_ModeGPIO_Mode_AIN; //模拟输入GPIO无效即为ADC专属模式 GPIO_InitStructure.GPIO_PinGPIO_Pin_0;//IO口 GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz; GPIO_Init(GPIOA,GPIO_InitStructure); //选择规则组的输入通道在序列1写入通道0 ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5); //初始化ADC ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_ModeADC_Mode_Independent;//ADC模式独立还是双模式 ADC_InitStructure.ADC_DataAlignADC_DataAlign_Right;//数据对齐 ADC_InitStructure.ADC_ExternalTrigConvADC_ExternalTrigConv_None; //外部触发转换选择触发源此处为软件触发 ADC_InitStructure.ADC_ContinuousConvModeDISABLE;//连续转换还是单次转换模式 ADC_InitStructure.ADC_ScanConvModeDISABLE;//扫描还是非扫描模式 ADC_InitStructure.ADC_NbrOfChannel1; //扫描模式下总工会用到的通道数 ADC_Init(ADC1,ADC_InitStructure); ADC_Cmd(ADC1,ENABLE);//开启ADC //校准 ADC_ResetCalibration(ADC1);//复位校准 while(ADC_GetResetCalibrationStatus(ADC1)SET);//获取复位校准状态 ADC_StartCalibration(ADC1);//开始校准 while(ADC_GetCalibrationStatus(ADC1)SET);//获取开始校准状态4.程序编写的细节1.避免AD的输出抖动采用迟滞比较即设置高低阈值高于上阈值或低于下阈值才进行操作。2.AD值跳变程度太高可以采用滤波的方法或裁剪分辨率即将数据尾部去掉

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询