1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
STM32 DMA方式讀取ADC值應用函數庫 溫度傳感器
[打印本頁]
作者:
bluestocking
時間:
2018-5-31 18:50
標題:
STM32 DMA方式讀取ADC值應用函數庫 溫度傳感器
/******************** (C) COPYRIGHT 2011 野火嵌入式開發工作室 ********************
* 文件名 :tempad.c
* 描述 :DMA方式讀取ADC值應用函數庫
* 實驗平臺:野火STM32開發板
* 硬件連接:無 (溫度傳感器在內部和ADCx_IN16輸入通道相連接)
*
* 庫版本 :ST3.5.0
*
* 作者 :wildfire team
**********************************************************************************/
#include"tempad.h"
//ADC1_BASE地址:0x4000 0000+0x2400 即ADC1的基地址,而她的規則數據寄存器的偏移地址是:0x4c
#define ADC1_DR_Address ((u32)0x4001244C)
__IO u16 ADC_ConvertedValue;
//__IO u16 ADC_ConvertedValueLocal;
/*
* 函數名:ADC1_GPIO_Config
* 描述 :使能ADC1和DMA1的時鐘
* 輸入 :無
* 輸出 :無
* 調用 :內部調用
*/
static void ADC1_GPIO_Config(void)
{
/* Enable DMA clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* Enable ADC1 and GPIOC clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
}
/* 函數名:ADC1_Mode_Config
* 描述 :配置ADC1的工作模式為MDA模式
* 輸入 : 無
* 輸出 :無
* 調用 :內部調用
*/
static void ADC1_Mode_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
/* DMA channel1 configuration */
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; // 外設基地址
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; // AD轉換值所存放的內存基地址 (就是給個地址)
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; // 外設作為數據傳輸的來源
DMA_InitStructure.DMA_BufferSize = 1; // 定義指定DMA通道 DMA緩存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外設地址寄存器不變
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; // 內存地址寄存器不變
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 數據寬度為16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; // HalfWord
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循環模式下
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //高優先級
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //沒有設置為內存到內存的傳輸
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
/* Enable DMA channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE); //ENABLE她
/* ADC1 configuration */
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //獨立工作模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //多通道
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //連續轉換
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //由軟件觸發啟動
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //Right
ADC_InitStructure.ADC_NbrOfChannel = 1; //僅一個通道轉換
ADC_Init(ADC1, &ADC_InitStructure);
/*配置ADC時鐘,為PCLK2的8分頻,即9Hz*/
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
/* ADC1 regular channel16 configuration */
//設置采樣通道IN16, 設置采樣時間
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);
//使能溫度傳感器和內部參考電壓
ADC_TempSensorVrefintCmd(ENABLE);
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibaration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
/*
* 函數名:Temp_ADC1_Init
* 描述 :無
* 輸入 :無
* 輸出 :無
* 調用 :外部調用
*/
void Temp_ADC1_Init(void)
{
ADC1_GPIO_Config();
ADC1_Mode_Config();
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1