本文主要是介绍STM8L151C8学习笔记4:ADC驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
STM8L151C8学习笔记4:ADC驱动
文章目录
- STM8L151C8学习笔记4:ADC驱动
- 硬件电路
- 编写程序
- 1.ADC初始化函数
- 2.ADC读取转换值函数
- 功能实现
- 总结
启用ADC采集功能,通过PB1口采集模拟电压。
ADC驱动配置大致分为以下步骤:
- 开启ADC1/2对应时钟
- 配置ADC初始化参数
- 使能ADC通道
- 等待ADC转换
- 读取ADC转换的数值
硬件电路
原理图如下:
数据手册上PB1对应的ADC通道:
编写程序
1.ADC初始化函数
/*ADC Init - PB1*/
void Adc_Init(void)
{
// /* Enable ADC1 clock */
// CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);/* Initialise and configure ADC1 */ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);/* Enable ADC1 */ADC_Cmd(ADC1, ENABLE);/* Enable ADC1 Channel 17 */ADC_ChannelCmd(ADC1, ADC_Channel_17, ENABLE);/* Start ADC1 Conversion using Software trigger*/ADC_SoftwareStartConv(ADC1);
}
2.ADC读取转换值函数
uint16_t Adc_GetValue(void)
{/* Start ADC1 Conversion using Software trigger*/ADC_SoftwareStartConv(ADC1);while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);return ADC_GetConversionValue(ADC1);
}
功能实现
这里我使用OLED屏来显示采集到的ADC值,并通过相应的关系来换算出电压值。
/*** @brief System display.* @param None* @retval None*/
void System_Display(void)
{uint8_t Buff[40];uint16_t Adc_Data;uint16_t Adc_Value;/*Adc Data*/Adc_Data = Adc_GetValue();sprintf((char *)Buff,"Dat: %-4d", Adc_Data);OLED_ShowString(0,1,Buff,12);/*Adc Value*/Adc_Value = 3300 * Adc_Data / 4096;sprintf((char *)Buff,"Val: %-4d mV", Adc_Value);OLED_ShowString(0,2,Buff,12);
#if OLED_MODE == 0 //SPI /*更新值*/OLED_Refresh_Gram();
#endif
}
总结
ADC采集部分跟其他单片机开发一样的流程,不是很难。
这篇关于STM8L151C8学习笔记4:ADC驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!