這是一個經(jīng)過驗(yàn)證的ADC采集程序,低功耗單片機(jī),ADC是12位的
單片機(jī)源程序如下:
- #include "stm8l15x.h"
- #include <stdio.h>
- #include <string.h>
- unsigned int ADCData;
- /*******************************************************************************
- **函數(shù)名稱:void delay(unsigned int ms) Name: void delay(unsigned int ms)
- **功能描述:大概延時
- **入口參數(shù):unsigned int ms 輸入大概延時數(shù)值
- **輸出:無
- *******************************************************************************/
- void delay(unsigned int ms)
- {
- unsigned int x , y;
- for(x = ms; x > 0; x--) /* 通過一定周期循環(huán)進(jìn)行延時*/
- for(y = 1000 ; y > 0 ; y--);
- }
- /*******************************************************************************
- **函數(shù)名稱:void UART1_Init(unsigned int baudrate)
- **功能描述:初始化USART模塊
- **入口參數(shù):unsigned int baudrate -> 設(shè)置串口波特率
- **輸出:無
- *******************************************************************************/
- void UART1_Init(unsigned int baudrate)
- {
- CLK_PeripheralClockConfig(CLK_Peripheral_USART1 , ENABLE); //使能USART1時鐘
- USART_Init(USART1, //設(shè)置USART1
- baudrate, //流特率設(shè)置
- USART_WordLength_8b, //數(shù)據(jù)長度設(shè)為8位
- USART_StopBits_1, //1位停止位
- USART_Parity_No, //無校驗(yàn)
- (USART_Mode_Rx | USART_Mode_Tx)); //設(shè)置為發(fā)送接收雙模式
-
- 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); //判斷發(fā)送數(shù)據(jù)寄存器是否為空
- USART_SendData8(USART1 , (unsigned char)ch); //向發(fā)送寄存器寫入數(shù)據(jù)
- return ch;
- }
- /*******************************************************************************
- **函數(shù)名稱:void ADC_Init()
- **功能描述:初始化ADC
- **入口參數(shù):無
- **輸出:無
- *******************************************************************************/
- void ADCConver_Init()
- {
- CLK_PeripheralClockConfig(CLK_Peripheral_ADC1 , ENABLE); //使能ADC1時鐘
-
- GPIO_Init(GPIOA , GPIO_Pin_6 , GPIO_Mode_In_FL_No_IT); //設(shè)置PA->6 為懸空輸入,并中斷禁止
-
-
- ADC_Init(ADC1,
- ADC_ConversionMode_Single, //單次轉(zhuǎn)換模式
- ADC_Resolution_12Bit, //12位精度轉(zhuǎn)換械
- ADC_Prescaler_2 //時鐘設(shè)置為2分頻
- );
-
- ADC_ChannelCmd(ADC1,
- ADC_Channel_0, //設(shè)置為通道0進(jìn)行采樣
- ENABLE);
-
- ADC_Cmd(ADC1 , ENABLE); //使能ADC
- }
- /*******************************************************************************
- **函數(shù)名稱:void ADC_Data_Read(unsigned int *AD_Value)
- **功能描述:讀取ADC完成一次模數(shù)轉(zhuǎn)換結(jié)果
- **入口參數(shù):unsigned int *AD_Value
- *AD_Value ->讀取ADC采樣數(shù)據(jù)的指針
- **輸出:無
- *******************************************************************************/
- void ADC_Data_Read(unsigned int *AD_Value)
- {
- ADC_SoftwareStartConv(ADC1); //啟動ADC
- while(ADC_GetFlagStatus(ADC1 , ADC_FLAG_EOC) == 0); //等待轉(zhuǎn)換結(jié)束
- ADC_ClearFlag(ADC1 , ADC_FLAG_EOC); //清除中斷標(biāo)志
- *AD_Value = ADC_GetConversionValue(ADC1); //讀取ADC1,通道1的轉(zhuǎn)換結(jié)果
- }
- void main()
- {
- disableInterrupts() //關(guān)閉系統(tǒng)總中斷
-
- CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //內(nèi)部時鐘為1分頻 = 16Mhz
- ADCConver_Init();
- UART1_Init(9600); //初始化串口,并設(shè)置波特率為9600BPS
-
- enableInterrupts(); //使能系統(tǒng)總中斷
-
- while(1) //等待USART1接收字符中斷產(chǎn)生,中斷服務(wù)函數(shù)在 stm8l15x_it.c文件里的 函數(shù) INTERRUPT_HANDLER(USART1_RX_IRQHandler, 28)
- { //并且把接收到字符發(fā)送回去
- delay(1500);
- ADC_Data_Read(&ADCData); //軟件啟動ADC轉(zhuǎn)換并讀取轉(zhuǎn)換結(jié)果
- printf("\r\nADC通道1【12bit】采樣結(jié)果 = %d \r\n" , ADCData); //通過串口把轉(zhuǎn)換結(jié)果發(fā)送到PC機(jī)顯示
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
STM8L152ADC采樣.7z
(155.01 KB, 下載次數(shù): 33)
2019-9-13 16:33 上傳
點(diǎn)擊文件名下載附件
|