网站收录在下降怎么样注册网站
- 作者: 五速梦信息网
- 时间: 2026年06月19日 07:31
当前位置: 首页 > news >正文
网站收录在下降,怎么样注册网站,传奇网站模板免费下载,自己搭服务器 做购物网站成本stm32学习 二.外设 8.TIM输出比较 OC(output compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系#xff0c;来对输出电平进行置1、置0、翻转操作#xff0c;用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 高级定时器的…stm32学习 二.外设 8.TIM输出比较 OC(output compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系来对输出电平进行置1、置0、翻转操作用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 高级定时器的前3个通道额外有死区生成和互补输出的功能 PWM脉冲宽度调制 在具有惯性的系统中可以通过对一系列脉冲的宽度进行调制来等效的获取需要的模拟参量常应用于电机控速等领域 频率 1 / T S T_S TS 占空比 T O N / T S T_ON / T_S TON/TS 分辨率 占空比变化步距 一般PWM模拟的频率在几k到几十k 占空比决定了PWM模拟出来的模拟电压的大小 分辨率就是占空比变化的精细程度一般要求不高的话1%就够用了 这个图是高级定时器前三个通道的输出比较部分电路OC1和OC1N连接的是两个MOS管死区生成电路防止两个MOS管同时导通导致短路 这个图是通用定时器的比较电路 ref(参考信号)指的是输出的高低电平ETRF一般用不到在选择器里可以进行极性选择选择直接输出还是经过非门输出 有效电平可以理解为1无效电平可以理解为0一般用的是最下面两个 上图中黄色线为ARR红色线为CCRCNT一直自增超过CCR时输出0到达ARR时归零 右下是H是高L是低PWMA接的是stm32的PWM输出口AIN1、2接GPIO脚PWMA和AIN1、2控制的AO1、2 PWM控制呼吸灯和舵机的部分代码 void PWM_Init(void) {/开启时钟/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/GPIO重映射/ // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO的时钟重映射必须先开启AFIO的时钟 // GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); //将TIM2的引脚部分重映射具体的映射方案需查看参考手册 // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //将JTAG引脚失能作为普通GPIO引脚使用/GPIO初始化/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1; //GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA0引脚初始化为复用推挽输出 //受外设控制的引脚均需要配置为复用模式 /配置时钟源/TIM_InternalClockConfig(TIM2); //选择TIM2为内部时钟若不调用此函数TIM默认也为内部时钟/时基单元初始化/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; //时钟分频选择不分频此参数用于配置滤波器时钟不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; //计数器模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period 20000 - 1; //计数周期即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler 72 - 1; //预分频器即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; //重复计数器高级定时器才会用到TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure); //将结构体变量交给TIM_TimeBaseInit配置TIM2的时基单元/输出比较初始化/TIM_OCInitTypeDef TIM_OCInitStructure; //定义结构体变量TIM_OCStructInit(TIM_OCInitStructure); //结构体初始化若结构体没有完整赋值//则最好执行此函数给结构体所有成员都赋一个默认值//避免结构体初值不确定的问题TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; //输出比较模式选择PWM模式1TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; //输出极性选择为高若选择极性为低则输出高低电平取反TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; //输出使能TIM_OCInitStructure.TIM_Pulse 0; //初始的CCR值TIM_OC1Init(TIM2, TIM_OCInitStructure); //将结构体变量交给TIM_OC1Init配置TIM2的输出比较通道1TIM_OC2Init(TIM2, TIM_OCInitStructure);/TIM使能/TIM_Cmd(TIM2, ENABLE); //使能TIM2定时器开始运行 } void PWM_SetCompare1(uint16_t Compare) {TIM_SetCompare1(TIM2, Compare); //设置CCR3的值 } void PWM_SetCompare2(uint16_t Compare) {TIM_SetCompare2(TIM2, Compare); //设置CCR3的值 }PWM控制直流电机的部分代码 void PWM_Init(void) {/开启时钟/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/GPIO初始化/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA2引脚初始化为复用推挽输出 //受外设控制的引脚均需要配置为复用模式/配置时钟源/TIM_InternalClockConfig(TIM2); //选择TIM2为内部时钟若不调用此函数TIM默认也为内部时钟/时基单元初始化/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; //时钟分频选择不分频此参数用于配置滤波器时钟不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; //计数器模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period 100 - 1; //计数周期即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler 36 - 1; //预分频器即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; //重复计数器高级定时器才会用到TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure); //将结构体变量交给TIM_TimeBaseInit配置TIM2的时基单元/输出比较初始化/ TIM_OCInitTypeDef TIM_OCInitStructure; //定义结构体变量TIM_OCStructInit(TIM_OCInitStructure); //结构体初始化若结构体没有完整赋值//则最好执行此函数给结构体所有成员都赋一个默认值//避免结构体初值不确定的问题TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; //输出比较模式选择PWM模式1TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; //输出极性选择为高若选择极性为低则输出高低电平取反TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; //输出使能TIM_OCInitStructure.TIM_Pulse 0; //初始的CCR值TIM_OC3Init(TIM2, TIM_OCInitStructure); //将结构体变量交给TIM_OC3Init配置TIM2的输出比较通道3/TIM使能/TIM_Cmd(TIM2, ENABLE); //使能TIM2定时器开始运行 }/*** 函 数PWM设置CCR* 参 数Compare 要写入的CCR的值范围0~100* 返 回 值无* 注意事项CCR和ARR共同决定占空比此函数仅设置CCR的值并不直接是占空比* 占空比Duty CCR / (ARR 1)*/ void PWM_SetCompare3(uint16_t Compare) {TIM_SetCompare3(TIM2, Compare); //设置CCR3的值 }9.输入捕获 IC(input capture)输入捕获 输入捕获模式下当通道引脚出现指定电平跳变时当前CNT的值被锁存到CCR中可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器有4个输入捕获通道 可配置为PWMI模式同时测量频率和占空比 可配合主从触发模式实现硬件全自动测量 每来一个上升沿通过滤波和预分频器触发一次捕获事件使CNT 细化结构 TI1FP1至从模式控制器就可以自动实现CNT的清零 主从触发模式是主模式、从模式、触发源选择的简称非官方名称 主模式可以将定时器内部的信号映射到TRGO引脚用于触发别的外设 从模式可以接受其他外设或者自身外设的一些信号用于控制自身定时器的运行也就是被别的信号控制 触发源选择就是选择从模式的触发源信号的 在库函数中这三个模式也就是三个函数 注意从模式中只有TI1FP1和TI2FP2所以只有通道1和通道2可以自动清零 注意CNT最大是65535如果信号频率太低CNT会溢出 一个选择上升沿触发一个选择下降沿触发就可以算出占空比 频率测量方式 实际上我们没有一个精度无穷大的秒表来测量时间所以有了上述两种方法 测频法测低频误差大测周法测高频误差大中界频率是在两种方法的N相等的地方分别取 f c 和 T f_c和T fc和T得出的 stm32中选择的是测周法用内部的72MHz去测频每一个上升沿或下降沿触发CNT 关于用输入捕获初始化(带PWMI)的代码 void IC_Init(void) {/开启时钟/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //开启TIM3的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/GPIO初始化/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA6引脚初始化为上拉输入/配置时钟源/TIM_InternalClockConfig(TIM3); //选择TIM3为内部时钟若不调用此函数TIM默认也为内部时钟/时基单元初始化/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; //时钟分频选择不分频此参数用于配置滤波器时钟不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; //计数器模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period 65536 - 1; //计数周期即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler 72 - 1; //预分频器即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; //重复计数器高级定时器才会用到TIM_TimeBaseInit(TIM3, TIM_TimeBaseInitStructure); //将结构体变量交给TIM_TimeBaseInit配置TIM3的时基单元/PWMI模式初始化/TIM_ICInitTypeDef TIM_ICInitStructure; //定义结构体变量TIM_ICInitStructure.TIM_Channel TIM_Channel_1; //选择配置定时器通道1TIM_ICInitStructure.TIM_ICFilter 0xF; //输入滤波器参数可以过滤信号抖动TIM_ICInitStructure.TIM_ICPolarity TIM_ICPolarity_Rising; //极性选择为上升沿触发捕获TIM_ICInitStructure.TIM_ICPrescaler TIM_ICPSC_DIV1; //捕获预分频选择不分频每次信号都触发捕获TIM_ICInitStructure.TIM_ICSelection TIM_ICSelection_DirectTI; //输入信号交叉选择直通不交叉TIM_PWMIConfig(TIM3, TIM_ICInitStructure); //将结构体变量交给TIM_PWMIConfig配置TIM3的输入捕获通道//此函数同时会把另一个通道配置为相反的配置实现PWMI模式/选择触发源及从模式/TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); //触发源选择TI1FP1TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); //从模式选择复位//即TI1产生上升沿时会触发CNT归零/TIM使能/TIM_Cmd(TIM3, ENABLE); //使能TIM3定时器开始运行 }获取占空比的函数 uint32_t IC_GetDuty(void) {return (TIM_GetCapture2(TIM3) 1) * 100 / (TIM_GetCapture1(TIM3) 1); //占空比Duty CCR2 / CCR1 * 100这里不执行1的操作也可 }10.TIM编码器接口 Encoder Interface编码器接口 编码器接口可接收增量(正交)编码器的信号根据编码器旋转产生的正交信号脉冲自动控制CNT自增或自减从而指示编码器的位置、旋转方向和旋转速度 每个高级定时器和通用定时器都拥有1个编码器接口 两个输入引脚借用了输入捕获的通道1和通道2 正交信号就是这种交错的两个方波信号 这里的极性选择指的是是否添加一个非门 ARR一般设为65535 - 1CNT没有负数所以反转就在65535附近 这里反相就是添加非门的意思 CNT或–需要TI1和TI2两个的状态所以能抗噪声 初始化代码 void Encoder_Init(void) {/开启时钟/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //开启TIM3的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/GPIO初始化/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA6和PA7引脚初始化为上拉输入/时基单元初始化/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; //时钟分频选择不分频此参数用于配置滤波器时钟不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; //计数器模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period 65536 - 1; //计数周期即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler 1 - 1; //预分频器即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; //重复计数器高级定时器才会用到TIM_TimeBaseInit(TIM3, TIM_TimeBaseInitStructure); //将结构体变量交给TIM_TimeBaseInit配置TIM3的时基单元/输入捕获初始化/TIM_ICInitTypeDef TIM_ICInitStructure; //定义结构体变量TIM_ICStructInit(TIM_ICInitStructure); //结构体初始化若结构体没有完整赋值//则最好执行此函数给结构体所有成员都赋一个默认值//避免结构体初值不确定的问题TIM_ICInitStructure.TIM_Channel TIM_Channel_1; //选择配置定时器通道1TIM_ICInitStructure.TIM_ICFilter 0xF; //输入滤波器参数可以过滤信号抖动TIM_ICInit(TIM3, TIM_ICInitStructure); //将结构体变量交给TIM_ICInit配置TIM3的输入捕获通道TIM_ICInitStructure.TIM_Channel TIM_Channel_2; //选择配置定时器通道2TIM_ICInitStructure.TIM_ICFilter 0xF; //输入滤波器参数可以过滤信号抖动TIM_ICInit(TIM3, TIM_ICInitStructure); //将结构体变量交给TIM_ICInit配置TIM3的输入捕获通道/编码器接口配置/TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//配置编码器模式以及两个输入通道是否反相//注意此时参数的Rising和Falling已经不代表上升沿和下降沿了而是代表是否反相//此函数必须在输入捕获初始化之后进行否则输入捕获的配置会覆盖此函数的部分配置/TIM使能/TIM_Cmd(TIM3, ENABLE); //使能TIM3定时器开始运行 }定期归零使Counter近似为旋转编码器的转速的函数 int16_t Encoder_Get(void) {/使用Temp变量作为中继目的是返回CNT后将其清零/int16_t Temp;Temp TIM_GetCounter(TIM3);TIM_SetCounter(TIM3, 0);return Temp; }11.ADC模数转换 ADCAnalog-Digital Converter ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量 12位逐次逼近型ADC1us转换时间 转换范围0~4095 stm32最多18个输入通道可测量16个外部和2个内部信号源 规则组和注入组两个转换单元 模拟看门狗自动监测输入电压范围 stm32f103c8t6有ADC1、210个外部输入通道 输入一个电压和SAR比较若大了则升高SAR的值低了则减小来逐次逼近 模拟至数字转换器就是上面的ADC0809 EXTI_15和11是注入通道和规则通道的START ADC是12位的但是寄存器统一是16位的所以存在一个数据对齐问题 靠右对齐左边留4个0靠左对齐右边留4个0一般是靠右对齐 ADC有一个内置自校准模式校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间在每个电容器上都会计算出一个误差修正码这个码用于消除在随后的转换中每个电容器上产生的误差 建议在每次上电后执行一次校准 启动校准前ADC必须处于关电状态超过至少两个ADC时钟周期 看门狗 喂狗当系统正常工作时会按照一定的时间间隔这个时间间隔通常小于看门狗定时器的超时时间向看门狗的输入端发送一个信号如高电平或低电平这个信号就是“喂狗”信号。接收到“喂狗”信号后看门狗定时器会被重置从而避免其超时并触发复位信号。 狗叫与咬人 狗叫如果看门狗在一定时间内没有收到来自系统的“喂狗”信号它会认为系统可能出现了异常或故障此时会触发一个中断或警告信号类似于狗在感知到潜在威胁时发出的吠叫声。 咬人如果看门狗在触发警告信号后一段时间内仍未收到系统的有效响应或恢复信号或者系统确实出现了严重故障无法自行恢复看门狗将采取进一步的行动如重启系统或执行其他恢复操作。 ADC单通道输入的初始化代码 void AD_Init(void) {/开启时钟/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/设置ADC时钟/RCC_ADCCLKConfig(RCC_PCLK2_Div6); //选择时钟6分频ADCCLK 72MHz / 6 12MHz/GPIO初始化/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA0引脚初始化为模拟输入/规则组通道配置/ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //规则组序列1的位置配置为通道0/ADC初始化/ADC_InitTypeDef ADC_InitStructure; //定义结构体变量ADC_InitStructure.ADC_Mode ADC_Mode_Independent; //模式选择独立模式即单独使用ADC1ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //数据对齐选择右对齐ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; //外部触发使用软件触发不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode DISABLE; //连续转换失能每转换一次规则组序列后停止ADC_InitStructure.ADC_ScanConvMode DISABLE; //扫描模式失能只转换规则组的序列1这一个位置ADC_InitStructure.ADC_NbrOfChannel 1; //通道数为1仅在扫描模式下才需要指定大于1的数在非扫描模式下只能是1ADC_Init(ADC1, ADC_InitStructure); //将结构体变量交给ADC_Init配置ADC1/ADC使能/ADC_Cmd(ADC1, ENABLE); //使能ADC1ADC开始运行/ADC校准/ADC_ResetCalibration(ADC1); //固定流程内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) SET); }ADC单通道获取输入的代码 uint16_t AD_GetValue(void) {ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发AD转换一次while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); //等待EOC标志位即等待AD转换结束return ADC_GetConversionValue(ADC1); //读数据寄存器得到AD转换的结果 }ADC多通道输入的初始化代码 void AD_Init(void) {/开启时钟/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/设置ADC时钟/RCC_ADCCLKConfig(RCC_PCLK2_Div6); //选择时钟6分频ADCCLK 72MHz / 6 12MHz/GPIO初始化/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA0、PA1、PA2和PA3引脚初始化为模拟输入/不在此处配置规则组序列而是在每次AD转换前配置这样可以灵活更改AD转换的通道//ADC初始化/ADC_InitTypeDef ADC_InitStructure; //定义结构体变量ADC_InitStructure.ADC_Mode ADC_Mode_Independent; //模式选择独立模式即单独使用ADC1ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //数据对齐选择右对齐ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; //外部触发使用软件触发不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode DISABLE; //连续转换失能每转换一次规则组序列后停止ADC_InitStructure.ADC_ScanConvMode DISABLE; //扫描模式失能只转换规则组的序列1这一个位置ADC_InitStructure.ADC_NbrOfChannel 1; //通道数为1仅在扫描模式下才需要指定大于1的数在非扫描模式下只能是1ADC_Init(ADC1, ADC_InitStructure); //将结构体变量交给ADC_Init配置ADC1/ADC使能/ADC_Cmd(ADC1, ENABLE); //使能ADC1ADC开始运行/ADC校准/ADC_ResetCalibration(ADC1); //固定流程内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) SET); }ADC多通道获取输入的代码 uint16_t AD_GetValue(uint8_t ADC_Channel) {ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_55Cycles5); //在每次转换前根据函数形参灵活更改规则组的通道1ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发AD转换一次while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); //等待EOC标志位即等待AD转换结束return ADC_GetConversionValue(ADC1); //读数据寄存器得到AD转换的结果 }
- 上一篇: 网站收录原创文章怎么自己做网址
- 下一篇: 网站手机端打不开商务网站建设与推广实训意义
相关文章
-
网站收录原创文章怎么自己做网址
网站收录原创文章怎么自己做网址
- 技术栈
- 2026年06月19日
-
网站收录下降的原因深圳网站设计技术
网站收录下降的原因深圳网站设计技术
- 技术栈
- 2026年06月19日
-
网站收录突然全部没有了成都网站建设成都网络公司
网站收录突然全部没有了成都网站建设成都网络公司
- 技术栈
- 2026年06月19日
-
网站手机端打不开商务网站建设与推广实训意义
网站手机端打不开商务网站建设与推广实训意义
- 技术栈
- 2026年06月19日
-
网站手机端建设the word 和 wordpress
网站手机端建设the word 和 wordpress
- 技术栈
- 2026年06月19日
-
网站手机端排名怎么做值得信赖的深圳app开发公司
网站手机端排名怎么做值得信赖的深圳app开发公司
- 技术栈
- 2026年06月19日
