資源簡(jiǎn)介
這個(gè)實(shí)驗(yàn)在上個(gè)實(shí)驗(yàn)的基礎(chǔ)上把原來(lái)由采集函數(shù)觸發(fā)ADC改成把啟動(dòng)ADC的代碼放到了定時(shí)器了,這樣CCD的采集函數(shù)就放到了中斷里來(lái)完成了
代碼片段和文件信息
#include?“adc.h“
#include?“delay.h“ ???
#include?“CCD.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 ??
//////////////////////////////////////////////////////////////////////////////////?
???
//初始化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í)鐘不能超過(guò)14M!
//否則將導(dǎo)致ADC準(zhǔn)確度下降!?
RCC->CFGR|=2<<14;?????? ?
ADC1->CR1&=0XF0FFFF;???//工作模式清零
ADC1->CR1|=0<<16;??????//獨(dú)立工作模式??
ADC1->CR1&=~(1<<8);????//非掃描模式 ??
ADC1->CR2&=~(1<<1);????//單次轉(zhuǎn)換模式
ADC1->CR2&=~(7<<17); ???
ADC1->CR2|=7<<17; ???//軟件控制轉(zhuǎn)換??
ADC1->CR2|=1<<20;??????//使用用外部觸發(fā)(SWSTART)!!! 必須使用一個(gè)事件來(lái)觸發(fā)
ADC1->CR2&=~(1<<11);???//右對(duì)齊 ?
//設(shè)置轉(zhuǎn)換序列?設(shè)置CCD的通道
ADC1->SQR3&=0XFFFFFFE0;?????//規(guī)則序列1?通道ch
ADC1->SQR3|=CCD_Channel; ?//設(shè)置CCD的通道
//設(shè)置通道1的采樣時(shí)間
ADC1->SMPR2&=~(7<<3);??//通道1采樣時(shí)間清空 ??
? ADC1->SMPR2|=7<<3;?????//通道1??239.5周期提高采樣時(shí)間可以提高精確度 ?
ADC1->CR2|=1<<8;???????//使能ADC的DMA?
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í)由硬件清除??
}
//獲得ADC值
//ch:通道值?0~16
//返回值:轉(zhuǎn)換結(jié)果
u16?Get_Adc(u8?ch)???
{
//設(shè)置轉(zhuǎn)換序列 ?? ?
ADC1->SQR3&=0XFFFFFFE0;//規(guī)則序列1?通道ch
ADC1->SQR3|=ch; ?? ????
ADC1->CR2|=1<<22;???????//啟動(dòng)規(guī)則轉(zhuǎn)換通道?
while(!(ADC1->SR&1<<1));//等待轉(zhuǎn)換結(jié)束 ? ???
return?ADC1->DR; //返回adc值
}
//獲得ADC值
//ch:通道值?0~16
//返回值:轉(zhuǎn)換結(jié)果
void?Adc_auto(void)???
{? ????
ADC1->CR2|=1<<22;???????//啟動(dòng)規(guī)則轉(zhuǎn)換通道?
}
//獲取通道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í)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-11-29?20:09??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\
?????文件???????55048??2015-11-28?14:22??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\1000us.PNG
?????文件???????51781??2015-11-28?14:21??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\100us.PNG
?????文件???????51835??2015-11-28?14:20??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\10us.PNG
?????文件????????2796??2015-11-29?20:09??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\123.txt
?????目錄???????????0??2015-11-29?13:41??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\
?????目錄???????????0??2015-11-29?19:46??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\ADC\
?????文件????????2796??2015-11-29?19:46??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\ADC\adc.c
?????文件?????????807??2015-11-29?18:17??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\ADC\adc.h
?????目錄???????????0??2015-11-29?11:30??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\BEEP\
?????文件?????????753??2012-09-02?23:04??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\BEEP\beep.c
?????文件?????????681??2012-09-02?23:02??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\BEEP\beep.h
?????目錄???????????0??2015-11-29?22:30??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\CCD\
?????文件????????4442??2015-11-29?22:30??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\CCD\CCD.c
?????文件?????????733??2015-11-29?21:16??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\CCD\CCD.h
?????目錄???????????0??2015-11-29?21:49??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\DMA\
?????文件????????2872??2015-11-29?21:49??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\DMA\dma.c
?????文件?????????726??2015-05-10?12:42??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\DMA\dma.h
?????目錄???????????0??2015-11-29?11:30??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\EXTI\
?????文件????????1925??2013-11-20?11:02??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\EXTI\exti.c
?????文件?????????646??2012-09-03?16:59??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\EXTI\exti.h
?????目錄???????????0??2015-11-29?11:30??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\KEY\
?????文件????????1501??2012-09-03?11:24??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\KEY\key.c
?????文件?????????825??2012-09-03?11:24??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\KEY\key.h
?????目錄???????????0??2015-11-29?19:12??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\LCD\
?????文件???????16156??2012-08-02?00:02??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\LCD\FONT.H
?????文件???????82872??2015-11-29?19:12??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\LCD\ILI93xx.c
?????文件????????9628??2015-11-29?19:12??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\LCD\lcd.h
?????目錄???????????0??2015-11-29?11:30??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\LED\
?????文件?????????932??2015-11-23?20:51??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\LED\led.c
?????文件?????????685??2012-09-02?22:09??CCD定時(shí)器觸發(fā)ADC觸發(fā)DMA傳輸\HARDWARE\LED\led.h
............此處省略295個(gè)文件信息
評(píng)論
共有 條評(píng)論