摘要
本文章基于国信长天M4开发板,讲述了ADC数据采集的应用,祝各位学生蓝桥杯比赛取得好成绩!
M4开发板 ADC部分原理图
由上图可以看出,开发板上有两个可调电阻R37, R38,分别连接到PB15,和PB12。查阅芯片的数据手册,可知:
PB12 --> ADC1_IN11
PB15 --> ADC2_IN15
ADC 使用步骤
下文将以赛方提供的示例代码HAL_06_LCD
为基础,为大家讲解ADC的使用步骤
① 将 PB12
,PB15
初始化为ADC输入模式
双击工程目录下的HAL_06_LCD.ioc
,使用STM32CubeMX软件打开工程配置。
点击PB15
和PB12
,分别将其设为ADC2_IN15
和ADC1_IN11
。并且点击左边的Analog
,将ADC1
的IN11
设为IN11 Single-ended
。
并且将ADC2
的IN15
也设为IN11 Single-ended
,然后点击右上角的GENERATE CODE
生成代码:
② ADC数据的读取
使用Keil打开刚刚生成的代码,将下列代码粘贴到main.c
的/* USER CODE BEGIN 0 */
和/* USER CODE END 0 */
之间。
uint16_t getADC1(void) // 获取PB12引脚的电压(对应R38电阻)
{
uint16_t adc = 0;
HAL_ADC_Start(&hadc1);
adc = HAL_ADC_GetValue(&hadc1);
return adc;
}
uint16_t getADC2(void) // 获取PB15引脚的电压(对应R37电阻)
{
uint16_t adc = 0;
HAL_ADC_Start(&hadc2);
adc = HAL_ADC_GetValue(&hadc2);
return adc;
}
上述代码同学们需要牢记
,竞赛时可没有资料可以参考。
③ 电压数据的显示
在main()
的while()
中插入如下代码:
char buf[64] = {0};
sprintf(buf , "ADC1(R38): %.2f V", (3.3 * getADC1())/4096);
LCD_DisplayStringLine(Line8, (uint8_t *)buf);
sprintf(buf , "ADC2(R37): %.2f V", (3.3 * getADC2())/4096);
LCD_DisplayStringLine(Line9, (uint8_t *)buf);
④ 运行效果图
总结
ADC使用步骤总结如下:
- 配置
PB12
、PB15
引脚及ADC相关参数 - 编写ADC数据读取函数
- 调用
getADC1()
,getADC2()
获取ADC值,并显示到屏幕上
相关知识:
sprintf()
函数的作用是将数据按照printf()函数的格式输出到给定的缓冲区,文中的代码是先将数据输出到缓冲区buf
,然后再把缓冲区的数据显示到LCD屏幕上
。参考资料:https://www.runoob.com/cprogramming/c-function-sprintf.html"%.2f"
的格式是控制小数的位数,表示保留两位小数,同理"%.3f"
保留三位小数。参考资料:https://blog.csdn.net/thanklife/article/details/20783421
如果此文章对你有帮助,欢迎点赞
关注
收藏
转发
.
学习过程中遇到问题可以在评论区留言