标题:
STM8L152AD采样程序 12位
[打印本页]
作者:
LIGANG00856
时间:
2019-9-13 14:09
标题:
STM8L152AD采样程序 12位
这是一个经过验证的ADC采集程序,低功耗单片机,ADC是12位的
单片机源程序如下:
#include "stm8l15x.h"
#include <stdio.h>
#include <string.h>
unsigned int ADCData;
/*******************************************************************************
**函数名称:void delay(unsigned int ms) Name: void delay(unsigned int ms)
**功能描述:大概延时
**入口参数:unsigned int ms 输入大概延时数值
**输出:无
*******************************************************************************/
void delay(unsigned int ms)
{
unsigned int x , y;
for(x = ms; x > 0; x--) /* 通过一定周期循环进行延时*/
for(y = 1000 ; y > 0 ; y--);
}
/*******************************************************************************
**函数名称:void UART1_Init(unsigned int baudrate)
**功能描述:初始化USART模块
**入口参数:unsigned int baudrate -> 设置串口波特率
**输出:无
*******************************************************************************/
void UART1_Init(unsigned int baudrate)
{
CLK_PeripheralClockConfig(CLK_Peripheral_USART1 , ENABLE); //使能USART1时钟
USART_Init(USART1, //设置USART1
baudrate, //流特率设置
USART_WordLength_8b, //数据长度设为8位
USART_StopBits_1, //1位停止位
USART_Parity_No, //无校验
(USART_Mode_Rx | USART_Mode_Tx)); //设置为发送接收双模式
USART_ITConfig(USART1, USART_IT_RXNE , ENABLE);
USART_Cmd(USART1 , ENABLE);
}
int fputc(int ch, FILE *f)
{
while(USART_GetFlagStatus(USART1 , USART_FLAG_TXE) == 0); //判断发送数据寄存器是否为空
USART_SendData8(USART1 , (unsigned char)ch); //向发送寄存器写入数据
return ch;
}
/*******************************************************************************
**函数名称:void ADC_Init()
**功能描述:初始化ADC
**入口参数:无
**输出:无
*******************************************************************************/
void ADCConver_Init()
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1 , ENABLE); //使能ADC1时钟
GPIO_Init(GPIOA , GPIO_Pin_6 , GPIO_Mode_In_FL_No_IT); //设置PA->6 为悬空输入,并中断禁止
ADC_Init(ADC1,
ADC_ConversionMode_Single, //单次转换模式
ADC_Resolution_12Bit, //12位精度转换械
ADC_Prescaler_2 //时钟设置为2分频
);
ADC_ChannelCmd(ADC1,
ADC_Channel_0, //设置为通道0进行采样
ENABLE);
ADC_Cmd(ADC1 , ENABLE); //使能ADC
}
/*******************************************************************************
**函数名称:void ADC_Data_Read(unsigned int *AD_Value)
**功能描述:读取ADC完成一次模数转换结果
**入口参数:unsigned int *AD_Value
*AD_Value ->读取ADC采样数据的指针
**输出:无
*******************************************************************************/
void ADC_Data_Read(unsigned int *AD_Value)
{
ADC_SoftwareStartConv(ADC1); //启动ADC
while(ADC_GetFlagStatus(ADC1 , ADC_FLAG_EOC) == 0); //等待转换结束
ADC_ClearFlag(ADC1 , ADC_FLAG_EOC); //清除中断标志
*AD_Value = ADC_GetConversionValue(ADC1); //读取ADC1,通道1的转换结果
}
void main()
{
disableInterrupts() //关闭系统总中断
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //内部时钟为1分频 = 16Mhz
ADCConver_Init();
UART1_Init(9600); //初始化串口,并设置波特率为9600BPS
enableInterrupts(); //使能系统总中断
while(1) //等待USART1接收字符中断产生,中断服务函数在 stm8l15x_it.c文件里的 函数 INTERRUPT_HANDLER(USART1_RX_IRQHandler, 28)
{ //并且把接收到字符发送回去
delay(1500);
ADC_Data_Read(&ADCData); //软件启动ADC转换并读取转换结果
printf("\r\nADC通道1【12bit】采样结果 = %d \r\n" , ADCData); //通过串口把转换结果发送到PC机显示
}
}
复制代码
所有资料51hei提供下载:
STM8L152ADC采样.7z
(155.01 KB, 下载次数: 33)
2019-9-13 16:33 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1