資源簡介
ADC中斷方式讀取數(shù)據(jù),中斷下讀取數(shù)據(jù),可以對(duì)電壓進(jìn)行方便處理。

代碼片段和文件信息
#include?“adc.h“
#include?“delay.h“ ???
#include?“usart.h“ ???
////////////////////////////////////////////////////////////////////////////////// ?
//本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
//ALIENTEK戰(zhàn)艦STM32開發(fā)板
//ADC?代碼 ???
//正點(diǎn)原子@ALIENTEK
//技術(shù)論壇:www.openedv.com
//修改日期:2012/9/7
//版本:V1.0
//版權(quán)所有,盜版必究。
//Copyright(C)?廣州市星翼電子科技有限公司?2009-2019
//All?rights?reserved ??
//////////////////////////////////////////////////////////////////////////////////?
u16?adcval=0;
//ADC中斷服務(wù)函數(shù)
void?ADC1_2_IRQHandler(void)
{
adcval=ADC1->DR;
printf(“ADC:%d\r\n“adcval);
ADC1->SR&=~(1<<1); //清除中斷
}
???
//初始化ADC
//這里我們僅以規(guī)則通道為例
//我們默認(rèn)僅開啟通道1 ???
void??Adc_Init(void)
{????
//先初始化IO口
? RCC->APB2ENR|=1<<2;????//使能PORTA口時(shí)鐘?
GPIOA->CRL&=0XFFFFFF0F;//PA1?anolog輸入
//通道10/11設(shè)置 ?
RCC->APB2ENR|=1<<9;????//ADC1時(shí)鐘使能 ??
RCC->APB2RSTR|=1<<9;???//ADC1復(fù)位
RCC->APB2RSTR&=~(1<<9);//復(fù)位結(jié)束 ????
RCC->CFGR&=~(3<<14);???//分頻因子清零
//SYSCLK/DIV2=12M?ADC時(shí)鐘設(shè)置為12MADC最大時(shí)鐘不能超過14M!
//否則將導(dǎo)致ADC準(zhǔn)確度下降!?
RCC->CFGR|=2<<14;?????? ?
ADC1->CR1&=0XF0FFFF;???//工作模式清零
ADC1->CR1|=0<<16;??????//獨(dú)立工作模式??
ADC1->CR1&=~(1<<8);????//非掃描模式 ??
ADC1->CR1|=1<<5;???????//開啟轉(zhuǎn)換完成中斷?
ADC1->CR2&=~(1<<1);????//單次轉(zhuǎn)換模式
ADC1->CR2&=~(7<<17); ???
ADC1->CR2|=7<<17; ???//軟件控制轉(zhuǎn)換??
ADC1->CR2|=1<<20;??????//使用用外部觸發(fā)(SWSTART)!!! 必須使用一個(gè)事件來觸發(fā)
ADC1->CR2&=~(1<<11);???//右對(duì)齊 ?
ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1|=0<<20;?????//1個(gè)轉(zhuǎn)換在規(guī)則序列中?也就是只轉(zhuǎn)換規(guī)則序列1? ???
//設(shè)置通道1的采樣時(shí)間
ADC1->SMPR2&=~(7<<3);??//通道1采樣時(shí)間清空 ??
? ADC1->SMPR2|=7<<3;?????//通道1??239.5周期提高采樣時(shí)間可以提高精確度 ?
ADC1->CR2|=1<<0; ???//開啟AD轉(zhuǎn)換器 ?
ADC1->CR2|=1<<3;???????//使能復(fù)位校準(zhǔn)??
while(ADC1->CR2&1<<3);?//等待校準(zhǔn)結(jié)束? ?
????//該位由軟件設(shè)置并由硬件清除。在校準(zhǔn)寄存器被初始化后該位將被清除。? ?
ADC1->CR2|=1<<2;????????//開啟AD校準(zhǔn) ???
while(ADC1->CR2&1<<2);??//等待校準(zhǔn)結(jié)束
//該位由軟件設(shè)置以開始校準(zhǔn),并在校準(zhǔn)結(jié)束時(shí)由硬件清除??
MY_NVIC_Init(22ADC1_2_IRQChannel2);//組2
} ??
//獲得ADC值
//ch:通道值?0~16
//返回值:轉(zhuǎn)換結(jié)果
u16?Get_Adc(u8?ch)???
{
adcval=0XFFFF;
//設(shè)置轉(zhuǎn)換序列 ?? ?
ADC1->SQR3&=0XFFFFFFE0;//規(guī)則序列1?通道ch
ADC1->SQR3|=ch; ?? ????
ADC1->CR2|=1<<22;???????//啟動(dòng)規(guī)則轉(zhuǎn)換通道?
while(adcval==0XFFFF); //等待ADC轉(zhuǎn)換完成 ?? ? ???
return?adcval; //返回adc值
}
//獲取通道ch的轉(zhuǎn)換值,取times次然后平均?
//ch:通道編號(hào)
//times:獲取次數(shù)
//返回值:通道ch的times次轉(zhuǎn)換結(jié)果平均值
u16?Get_Adc_Average(u8?chu8?times)
{
u32?temp_val=0;
u8?t;
for(t=0;t {
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return?temp_val/times;
}?
?
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????2884??2013-07-25?11:32??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\ADC\adc.c
?????文件????????785??2012-09-07?21:39??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\ADC\adc.h
?????文件????????753??2012-09-02?23:04??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\BEEP\beep.c
?????文件????????681??2012-09-02?23:02??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\BEEP\beep.h
?????文件???????1940??2012-09-07?17:40??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\EXTI\exti.c
?????文件????????646??2012-09-03?16:59??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\EXTI\exti.h
?????文件???????1501??2012-09-03?11:24??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\KEY\key.c
?????文件????????825??2012-09-03?11:24??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\KEY\key.h
?????文件??????16156??2012-08-02?00:02??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\LCD\FONT.H
?????文件??????49089??2013-01-21?10:40??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\LCD\ILI93xx.c
?????文件???????8960??2013-01-20?17:21??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\LCD\LCD.h
?????文件????????934??2012-09-02?22:09??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\LED\led.c
?????文件????????685??2012-09-02?22:09??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\LED\led.h
?????文件???????6975??2012-09-05?11:09??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\OLED\oled.c
?????文件???????1615??2012-09-05?11:06??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\OLED\oled.h
?????文件??????16174??2012-08-02?00:05??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\OLED\oledfont.h
?????文件???????6501??2012-09-07?13:17??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\RTC\rtc.c
?????文件???????1203??2012-09-07?13:17??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\RTC\rtc.h
?????文件???????4453??2012-09-04?20:03??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\TIMER\timer.c
?????文件???????1066??2012-09-04?19:10??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\TIMER\timer.h
?????文件???????4229??2012-09-05?10:41??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\TPAD\tpad.c
?????文件????????918??2012-09-05?10:41??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\TPAD\tpad.h
?????文件???????2197??2012-09-04?12:33??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\WDG\wdg.c
?????文件????????851??2012-09-04?12:33??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\WDG\wdg.h
?????文件???????1932??2012-09-07?17:59??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\WKUP\wkup.c
?????文件????????755??2012-09-07?17:40??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\HARDWARE\WKUP\wkup.h
?????文件????????399??2011-05-09?18:17??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\keilkill.bat
?????文件??????75950??2013-07-25?11:32??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\OBJ\test.hex
?????文件????????586??2012-09-07?22:22??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\README.TXT
?????文件???????5044??2012-09-02?22:09??實(shí)驗(yàn)17?ADC實(shí)驗(yàn)(中斷方式)\SYSTEM\delay\delay.c
............此處省略49個(gè)文件信息
評(píng)論
共有 條評(píng)論