資源簡介
STM32的內部溫度傳感器程序,親測能用,親測能用。內有詳細的講解文檔,很好的學習資料。

代碼片段和文件信息
#include?“adc.h“
#include?“delay.h“
////////////////////////////////////////////////////////////////////////////////// ?
//本程序只供學習使用,未經作者許可,不得用于其它任何用途
//Mini?STM32開發板
//ADC?驅動代碼 ???
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//修改日期:2010/6/7?
//版本:V1.0
//版權所有,盜版必究。
//Copyright(C)?正點原子?2009-2019
//All?rights?reserved
//////////////////////////////////////////////////////////////////////////////////? ??
?
???
//初始化ADC
//這里我們僅以規則通道為例
//我們默認將開啟通道0~3 ???
void??Adc_Init(void)
{????
//先初始化IO口
? RCC->APB2ENR|=1<<2;????//使能PORTA口時鐘?
GPIOA->CRL&=0XFFFF0000;//PA0?1?2?3?anolog輸入
//通道10/11設置 ?
RCC->APB2ENR|=1<<9;????//ADC1時鐘使能 ??
RCC->APB2RSTR|=1<<9;???//ADC1復位
RCC->APB2RSTR&=~(1<<9);//復位結束 ????
RCC->CFGR&=~(3<<14);???//分頻因子清零
//SYSCLK/DIV2=12M?ADC時鐘設置為12MADC最大時鐘不能超過14M!
//否則將導致ADC準確度下降!?
RCC->CFGR|=2<<14;?????? ?
ADC1->CR1&=0XF0FFFF;???//工作模式清零
ADC1->CR1|=0<<16;??????//獨立工作模式??
ADC1->CR1&=~(1<<8);????//非掃描模式
ADC1->CR2&=~(1<<1);????//單次轉換模式
ADC1->CR2&=~(7<<17); ???
ADC1->CR2|=7<<17; ???//軟件控制轉換??
ADC1->CR2|=1<<20;??????//使用用外部觸發(SWSTART)!!! 必須使用一個事件來觸發
ADC1->CR2&=~(1<<11);???//右對齊
ADC1->CR2|=1<<23;??????//使能溫度傳感器
ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1&=0<<20;?????//1個轉換在規則序列中?也就是只轉換規則序列1? ???
//設置通道0~3的采樣時間
ADC1->SMPR2&=0XFFFFF000;//通道0123采樣時間清空 ??
ADC1->SMPR2|=7<<9;??????//通道3??239.5周期提高采樣時間可以提高精確度 ?
ADC1->SMPR2|=7<<6;??????//通道2??239.5周期提高采樣時間可以提高精確度 ?
ADC1->SMPR2|=7<<3;??????//通道1??239.5周期提高采樣時間可以提高精確度 ?
ADC1->SMPR2|=7<<0;??????//通道0??239.5周期提高采樣時間可以提高精確度
?
ADC1->SMPR1&=~(7<<18);??//清除通道16原來的設置 ?
ADC1->SMPR1|=7<<18;?????//通道16??239.5周期提高采樣時間可以提高精確度 ?
ADC1->CR2|=1<<0; ????//開啟AD轉換器 ?
ADC1->CR2|=1<<3;????????//使能復位校準??
while(ADC1->CR2&1<<3);??//等待校準結束? ?
????//該位由軟件設置并由硬件清除。在校準寄存器被初始化后該位將被清除。? ?
ADC1->CR2|=1<<2;????????//開啟AD校準 ???
while(ADC1->CR2&1<<2);??//等待校準結束
//該位由軟件設置以開始校準,并在校準結束時由硬件清除??
} ??
//獲得ADC值
//ch:通道值?0~3
u16?Get_Adc(u8?ch)???
{
//設置轉換序列 ?? ?
ADC1->SQR3&=0XFFFFFFE0;//規則序列1?通道ch
ADC1->SQR3|=ch; ?? ????
ADC1->CR2|=1<<22;???????//啟動規則轉換通道?
while(!(ADC1->SR&1<<1));//等待轉換結束 ? ???
return?ADC1->DR; //返回adc值
}
//得到ADC采樣內部溫度傳感器的值
//取10次然后平均
u16?Get_Temp(void)
{
u16?temp_val=0;
u8?t;
for(t=0;t<10;t++)
{
temp_val+=Get_Adc(TEMP_CH);
delay_ms(5);
}
return?temp_val/10;
}
???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2912??2013-04-03?14:22??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\ADC\adc.c
?????文件????????814??2013-04-03?14:24??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\ADC\adc.h
?????文件???????1756??2011-01-12?20:50??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\EXTI\exti.c
?????文件????????628??2011-01-12?20:51??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\EXTI\exti.h
?????文件???????1767??2013-04-03?14:22??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\KEY\key.c
?????文件????????839??2011-01-12?20:46??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\KEY\key.h
?????文件??????16155??2010-06-21?11:18??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\LCD\FONT.H
?????文件??????39684??2012-10-25?23:18??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\LCD\ILI93xx.c
?????文件???????9150??2012-10-25?22:28??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\LCD\LCD.h
?????文件????????910??2013-04-03?14:22??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\LED\led.c
?????文件????????288??2010-05-27?17:30??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\LED\led.h
?????文件??????16156??2010-03-19?17:16??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\OLED\FONT.H
?????文件???????6856??2011-01-12?21:02??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\OLED\oled.c
?????文件???????1625??2011-01-12?21:02??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\OLED\oled.h
?????文件???????7932??2011-01-12?22:04??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\RTC\rtc.c
?????文件???????1383??2011-01-12?21:15??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\RTC\rtc.h
?????文件???????2005??2011-01-12?20:59??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\TIMER\timer.c
?????文件????????724??2011-01-12?20:59??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\TIMER\timer.h
?????文件???????2088??2011-01-12?20:56??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\WDG\wdg.c
?????文件????????756??2011-01-12?20:56??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\WDG\wdg.h
?????文件???????1894??2011-01-12?21:18??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\WKUP\wkup.c
?????文件????????728??2011-01-12?21:18??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\HARDWARE\WKUP\wkup.h
?????文件????????399??2011-04-23?10:24??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\keilkilll.bat
?????文件????????395??2012-07-19?22:20??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\README.TXT
?????文件???????2067??2013-04-03?12:14??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\SYSTEM\delay\delay.c
?????文件????????905??2013-04-03?12:14??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\SYSTEM\delay\delay.h
?????文件????????993??2010-08-18?16:08??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\SYSTEM\README.TXT
?????文件???????2225??2009-05-07?14:42??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\SYSTEM\sys\cortexm3_macro.h
?????文件???????6194??2009-05-07?14:42??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\SYSTEM\sys\stm32f10x_conf.h
?????文件???????4529??2012-12-18?12:35??ALIENTEK?MINISTM32?實驗14?內部溫度傳感器實驗\SYSTEM\sys\stm32f10x_it.h
............此處省略36個文件信息
- 上一篇:布爾矩陣與推薦系統帶學習代碼
- 下一篇:任務調度問題---算法導論
評論
共有 條評論