建设音乐网站功能定位,低代码建站平台,做百度手机网站优化,排行前十装修公司#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中#xff0c;原理图解析✨#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦#xff0c;欢迎大家前往订阅本专题#xff0c;获取更多详细信息哦#x1f38f;#x1f38f;#x1f38f; #x1fa94;本系列专栏 - 蓝… 【蓝桥杯嵌入式】专题正在持续更新中原理图解析✨各模块分析✨以及历年真题讲解✨都在这儿哦欢迎大家前往订阅本专题获取更多详细信息哦 本系列专栏 - 蓝桥杯嵌入式_勾栏听曲_0的博客 欢迎大家 点赞 评论 收藏⭐️ 个人主页 - 勾栏听曲_0的博客 希望本文能对你有所帮助如有不足请指正共同进步吧 君子之道暗然而日章小人之道明然而日亡。 目录
原理图解析 设置STM32CubeMX 手搓代码
实例运用 原理图解析 从图中可以看出模拟输出的引脚分别为PB15和PB12。 设置STM32CubeMX 打开STM32CubeMX后找到PB15和PB12并把他们设置为ADC输入模式。PB15的为ADC2_IN15PB12的为ADC1_IN11。 然后在左侧的Analog中设置ADC如我们设置刚刚配置给PB12的ADC1通道为IN11设置为slingle endedPB15的ADC2的通道IN15前打勾。这样ADC在STM32CubeMX的设置就完成了。 手搓代码 利用STM32CubeMX生成号代码后我们新建两个文件来单独写ADC的代码但是要注意的是新文件不能命名为adc.c和adc.h因为用STM32CubeMX会生成adc.c和adc.h的库文件为例使命名不冲突就想要命名为其他名字。 如下所示ADC的有效代码只有4行而且也没什么难点等一下我们直接以十一届省赛左例子来使用一下这里我们来讨论一下这四行代码中的最后一句这个算式为什么这样写呢。 我们通过HAL_ADC_GetValue();这个函数获取的是一个电压值而存储这个电压值是12位的空间也就是说这个函数理论上取出来的电压值在0~4095之间。3.3是这个电位器的实际最大电压为3.3。因此我们除以4096再乘3.3就知道这个电压值对应的真实电压数值是多少啦。
double getADC(ADC_HandleTypeDef *pin)
{uint adc;HAL_ADC_Start(pin);adc HAL_ADC_GetValue(pin);return adc*3.3/4096;
}
实例运用
题目 这里要求使用PB0来检测电位器R37的电压信号我们在STM32CubeMX上的PB0接口选择ADC_IN15就可以啦这里我们改一下题目将两个电位器都测一下 使用STM32微控制器ADC通道PB15和PB12分别测量竞赛板电位器R37与R38输出的模拟电压信号。并在LCD屏中显示出来。 代码实现
aadc.c中依旧是我们上面提到的获取ADC的函数
double getADC(ADC_HandleTypeDef *pin)
{uint adc;HAL_ADC_Start(pin);adc HAL_ADC_GetValue(pin);return adc*3.3/4096;
} 在lcd.c中调用getADC并显示getADC(hadc1)获取的是R38电位器的模拟电压信号getADC(hadc2)获取的是R37电位器的模拟电压信号。
void disp_proc()
{char text[30];sprintf(text, Para );LCD_DisplayStringLine(Line4, (uint8_t *)text);sprintf(text, V: %.2f,getADC(hadc1));LCD_DisplayStringLine(Line6, (uint8_t *)text);sprintf(text, V: %.2f,getADC(hadc2));LCD_DisplayStringLine(Line7, (uint8_t *)text);
}