版权声明:喝水不忘挖井人,转载请注明出处,[email protected]。 https://blog.csdn.net/qq_18842031/article/details/77280969
本篇博文最后修改时间:2017年08月14日 22:00。
一、简介
本文以STM8S103F3P6编程为例,介绍STM8S103F3P6采集AD采样
二、实验平台
电脑平台:Windows7 64位旗舰
编译软件:IAR
硬件平台:STM8S103F3P6
三、版权声明
博主:_懵懂
声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。
原文地址:http://blog.csdn.NET/qq_18842031
懵懂之MCU交流群:136384801
单片机软件/硬件交流:127034610
四、实验前提
1、在进行本文步骤前,请先安装IAR EWSTM8-EV-1311版本;准备好STM8S103F3P6硬件平台。
五、基础知识
暂无
六、源码地址
暂无
七、关联文章
链接:
八、实验内容
1.系统时钟初始化为内部16M
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //时钟 初始化时钟为1分频 16M
2.初始化ADC1 通道2为AD采集脚 10位AD
void Init_ADC(void)
{
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT); //引脚初始化 初始化ADC通道引脚
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, //单次转换
ADC1_CHANNEL_3, //通道
ADC1_PRESSEL_FCPU_D2, //预定标器选择 分频器 fMASTER 可以被分频 2 到 18
ADC1_EXTTRIG_TIM, //从内部的TIM1 TRGO事件转换
DISABLE, //是否使能该触发方式
ADC1_ALIGN_RIGHT, //对齐方式(可以左右对齐)
ADC1_SCHMITTTRIG_CHANNEL3, //指定触发通道
ENABLE); //是否使能指定触发通道
ADC1_Cmd(ENABLE); //使能ADC
}
3.获取AD值
uint16_t Get_Ad(void)
{
ADC1_StartConversion(); //启动AD转换
while(RESET == ADC1_GetFlagStatus(ADC1_FLAG_EOC)); //等待转换完成
ADC1_ClearFlag(ADC1_FLAG_EOC); //清除标志
uint16_t value = ADC1_GetConversionValue(); //读取AD值
return value;
}
4.编写主函数
void main(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //内部时钟16M
Init_UART1();
Init_Timer4();
Init_ADC();
enableInterrupts();
while(1)
{
uint16_t value = Get_Ad();
Txd_buf[Txd_len++] = value / 10000 % 10 +'0';
Txd_buf[Txd_len++] = value / 1000 % 10 +'0';
Txd_buf[Txd_len++] = value / 100 % 10 +'0';
Txd_buf[Txd_len++] = value / 10 % 10 +'0';
Txd_buf[Txd_len++] = value % 10 +'0';
Txd_buf[Txd_len++] = '\n';
UART1_Send(Txd_buf,Txd_len);
}
}