資源簡介
STM32的PWM程序,親測可用。內(nèi)有詳細(xì)注釋和說明文檔,很好的參考資料。

代碼片段和文件信息
#include?“adc.h“
#include?“delay.h“ ???
////////////////////////////////////////////////////////////////////////////////// ?
//ADC?代碼 ???
//修改日期:2012/9/7
//版本:V1.1
//All?rights?reserved ??
//********************************************************************************
//V1.1?20120907
//在Adc_Init函數(shù)增加了內(nèi)部溫度測量的初始化參數(shù)。 ??
//////////////////////////////////////////////////////////////////////////////////?
???
//初始化ADC
//這里我們僅以規(guī)則通道為例
//我們默認(rèn)僅開啟通道1 ???
void??Adc_Init(void)
{????
//先初始化IO口
? RCC->APB2ENR|=1<<2;????//使能PORTA口時鐘?
GPIOA->CRL&=0XFFFFFF0F;//PA1?anolog輸入
//通道10/11設(shè)置 ?
RCC->APB2ENR|=1<<9;????//ADC1時鐘使能 ??
RCC->APB2RSTR|=1<<9;???//ADC1復(fù)位
RCC->APB2RSTR&=~(1<<9);//復(fù)位結(jié)束 ????
RCC->CFGR&=~(3<<14);???//分頻因子清零
//SYSCLK/DIV2=12M?ADC時鐘設(shè)置為12MADC最大時鐘不能超過14M!
//否則將導(dǎo)致ADC準(zhǔn)確度下降!?
RCC->CFGR|=2<<14;?????? ?
ADC1->CR1&=0XF0FFFF;???//工作模式清零
ADC1->CR1|=0<<16;??????//獨立工作模式??
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)!!! 必須使用一個事件來觸發(fā)
ADC1->CR2&=~(1<<11);???//右對齊 ?
ADC1->CR2|=1<<23;??????//使能溫度傳感器
ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1&=0<<20;?????//1個轉(zhuǎn)換在規(guī)則序列中?也就是只轉(zhuǎn)換規(guī)則序列1? ???
//設(shè)置通道1的采樣時間
ADC1->SMPR2&=~(7<<3);??//通道1采樣時間清空 ??
? ADC1->SMPR2|=7<<3;?????//通道1??239.5周期提高采樣時間可以提高精確度 ?
? ADC1->SMPR1&=~(7<<18);??//清除通道16原來的設(shè)置 ?
ADC1->SMPR1|=7<<18;?????//通道16??239.5周期提高采樣時間可以提高精確度 ?
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é)束時由硬件清除??
} ??
//獲得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;???????//啟動規(guī)則轉(zhuǎn)換通道?
while(!(ADC1->SR&1<<1));//等待轉(zhuǎn)換結(jié)束 ? ???
return?ADC1->DR; //返回adc值
}
//獲取通道ch的轉(zhuǎn)換值,取times次然后平均?
//ch:通道編號
//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;
}?
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2726??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\ADC\adc.c
?????文件????????789??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\ADC\adc.h
?????文件????????554??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\BEEP\beep.c
?????文件????????482??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\BEEP\beep.h
?????文件???????1057??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\DAC\dac.c
?????文件????????478??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\DAC\dac.h
?????文件???????1741??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\EXTI\exti.c
?????文件????????447??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\EXTI\exti.h
?????文件???????1233??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\KEY\key.c
?????文件????????626??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\KEY\key.h
?????文件??????16156??2012-08-02?00:02??實驗20?PWM?DAC實驗\HARDWARE\LCD\FONT.H
?????文件??????48362??2017-11-25?21:09??實驗20?PWM?DAC實驗\HARDWARE\LCD\ILI93xx.c
?????文件???????8320??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\LCD\LCD.h
?????文件????????735??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\LED\led.c
?????文件????????486??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\LED\led.h
?????文件???????6768??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\OLED\oled.c
?????文件???????1408??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\OLED\oled.h
?????文件??????16174??2012-08-02?00:05??實驗20?PWM?DAC實驗\HARDWARE\OLED\oledfont.h
?????文件???????6265??2017-11-25?21:09??實驗20?PWM?DAC實驗\HARDWARE\RTC\rtc.c
?????文件????????999??2017-11-25?21:09??實驗20?PWM?DAC實驗\HARDWARE\RTC\rtc.h
?????文件???????4980??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\TIMER\timer.c
?????文件???????1016??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\TIMER\timer.h
?????文件???????3877??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\TPAD\tpad.c
?????文件????????719??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\TPAD\tpad.h
?????文件???????1998??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\WDG\wdg.c
?????文件????????652??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\WDG\wdg.h
?????文件???????1733??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\WKUP\wkup.c
?????文件????????556??2017-11-25?21:08??實驗20?PWM?DAC實驗\HARDWARE\WKUP\wkup.h
?????文件????????399??2011-05-09?18:17??實驗20?PWM?DAC實驗\keilkill.bat
?????文件??????81133??2013-04-07?11:51??實驗20?PWM?DAC實驗\OBJ\test.hex
............此處省略52個文件信息
- 上一篇:STM32的ADC程序,親測可用
- 下一篇:基于51單片機的電子秤設(shè)計
評論
共有 條評論