STM32-(ADC,DMA,重映射)

STM32的高級功能應用

  • 高級定時器功能框圖
    在這裏插入圖片描述
  • 時鐘源
    高級定時器有四個時鐘源可以選擇:
    1.內部時鐘CK_INT
    內部時鐘源CK_INT主要來源於芯片內部,爲72M,一般情況下我們都是使用內部時鐘。當從模式控制寄存器TIMx_SMCR的SMS位等於000時則使用內部時鐘。
    2.外部時鐘模式1:外部輸入引腳TIx(1,2,3,4)
    時鐘信號輸入引腳共有4個,分別是TI(1,2,3,4),及TIM_CH(1,2,3,4)具體使用那一路信號輸入引腳,由TIM_CCMRx的位CCxS[1:0]配置,其中CCMR1控制TI1/2,CCMR2控制TI3/4.
    3.外部時鐘模式2:外部觸發輸入ETR
    時鐘信號來自定時器的特定輸入通道TIMX_ETR,只有一個。
    4.內部觸發輸入(ITRx)
    內部觸發輸入是使用一個定時器作爲另一個定時器的預分頻器。硬件上高級控制定時器和通用定時器在內部連接在一起,可以實現定時器同步或級聯。主模式的定時器可以對從模式定時器執行復位,啓動,停止或提供時鐘。
  • 時基單元
    在這裏插入圖片描述
    高級控制寄存器的時基單元功能包括4個寄存器,分別是計數器寄存器(CNT),預分頻控制寄存器(PSC),自動重裝載寄存器(ARR)和重複計數器寄存器(RCR)。其中重複計數器RCR是高級定時器獨有,通用和基本定時器沒有。前面3個寄存器都是16位有效,TIMX_RCR寄存器是8位有效的。
    預分頻器:psc,有一個輸入時鐘CK_PSC和一個輸出時鐘CK_CNT。輸入時鐘CK_PSC就是上面時鐘源的輸出,輸出CK_CNT這用來驅動CNT計數。通過設置預分頻器PSC的值可以得到不同的CK_CNT,實際計算爲:fck_cnt=fck_psc/(PSC[15:0]+1);可以實現1到65535分頻。
    通俗的理解就是:計數一次的時間。
typedef struct{
	uint16_t TIM_Prescaler;				//預分頻器
	uint16_t TIM_CounterMode;		//計數器模式
	uint16_t TIM_Period;					//定時器週期
	uint16_t TIM_ClockDivision;		//時鐘分頻
	uint8_t TIM_RepetitionCounter;	//重複計算器
}	TIM_TimeBaseInitTypeDef;

例如:
TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_Prescaler = 35;>>>t=36/(72M)=1/(2M)
TIM_TimeBaseInitStruct.TIM_Period = 1999;>>>T=1/(2M)*2000=1ms,週期1ms
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_up;>>>向上計數
TIM_TimeBaseInitStruct.TIM_ClockDivision=0;//時鐘分頻係數爲0
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;//重複計數器
  • 1.ADC採集:獨立多通道採集
  • 2.DMA存儲:外設(ADC)到存儲器
void ADC_Mode_Config(void)
{
	DMA_InitTypeDef  DMA_InitStructure;
	ADC_InitTypeDef  ADC_InitStructure;
	
		//根據DMA1的通道1的請求映像選擇通道模式與通道號
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
	DMA_DeInit(DMA1_Channel1);//採用DMA1中的通道1;
	DMA_InitStructure.DMA_PeripheralBaseAddr>>>外設地址
	DMA_InitStructure.DMA_Memory0BaseAddr>>>存儲器地址,對應的寄存器是:DMA_CMAR;
	DMA_InitStructure.DMA_DIR>>>傳輸方向選擇,外設存儲器,存儲器到外設,對應的寄存器DMA_CCR的DIR[1:0]位的值。
	DMA_InitStructure.DMA_BufferSize>>>設定待傳輸數據的數目,對應寄存器是DMA_CNDTR寄存器的值。
	DMA_InitStructure.DMA_PeripheralInc>>>是否使能外設地址自動遞增功能,對應寄存器是DMA_CCR中的PINC位的值,一般外設都是隻有一個數據寄存器,所以不使能。
	DMA_InitStructure.MemoryInc>>> 是否使能存儲器地址自動遞增功能,對應寄存器是DMA_CCR的MINC位的值,一般是使能的。
	DMA_InitStructure.DMA_PeripheralDataSize>>>外設數據寬度,8位,16位,32位,對應寄存器是DMA_CCR中的PSIZE[1:0]位的值。
	DMA_InitStructure.MemoryDataSize>>>存儲器數據寬帶,可選8位,16位,32位對應的寄存器是DMA_CCR中的MSIZE[1:0]位的值。當外設和存儲器之間傳輸數據時,兩邊的數據寬度應該一致。
	DMA_InitStructure.DMA_Mode>>>選擇DMA傳輸模式是一次傳輸還是循環傳輸,對應的寄存器是DMA_CCR中的CIRC位的值,由於ADC採集是一個持續循環的狀態,所以選用循環模式。
	DMA_InitStructure.DMA_Priority>>>軟件設置通道的優先級,有4個可選優先級分別是非常高,高,中,低,對應寄存器是DMA_CCR中的PL[1:0]位的值。
	DMA_InitStructure.DMA_M2M>>>存儲器到存儲器模式,對應寄存器是DMA_CCR中的MEN2MEN位。
	ADC_DeInit(ADC1);
	ADC_InitStructure. ADC_Mode >>>ADC工作模式的選擇:獨立模式,雙模式對應寄存器是:ADC_CR1:DUALMOD位。
	ADC_InitStructure. ADC_ScanConvMode >>>是否選用掃描,單通道選擇DISABLE,多通道選擇ENABLE,對應寄存器是ADC_CR1:SCAN位
	ADC_InitStructure. ADC_ContinuousConvMode >>>配置是啓動自動連續轉換還是單次轉換。對應寄存器是ADC_CR2:CON位。
	ADC_InitStructure.  ADC_ExternalTrigConv >>>外部觸發選擇,一般選擇軟件觸發,也可以根據項目需求配置觸發來源。對應的寄存器是ADC_CR2中的17-20位,EXTTRIG EXTSEL[2:0];
		ADC_InitStructure.  ADC_DataAlign >>>數據對齊格式,左對齊還是右對齊,一般是右對齊,寄存器是ADC_CR2中的11位,ALIGN;
	ADC_InitStructure.  ADC_NbrofChannel = AD轉換通道的數目,看你需要幾個通道,對應寄存器是ADC_CR1中的AWDCH[4:0];
ADC_Init(ADC1,&ADC_InitStructure);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);

ADC_RegularChannelConfig(ADC1,ADC_Channel_12,1,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_10,3,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_13,4,ADC_SampleTime_239Cycles5);

ADC_DMACmd(ADC1,ENABLE);//使能ADC的DMA請求;
ADC_Cmd(ADC1,ENABLE);//開啓ADC,並開始轉換
ADC_ResetCalibration(ADC1);//初始化ADC校準寄存器
while(ADC_GetResetCalibrationStatus(ADC1));//等待校準初始化完成
ADC_StartCalibration(ADC1);//ADC開始校準
while(ADC_GetCalibrationStatus(ADC1));//等待校準完成
}

在這裏插入圖片描述

ADC觸發選擇:
在這裏插入圖片描述

ADC通道對應引腳:
在這裏插入圖片描述

  • 3.管腳映射

爲了優化64和100腳的封裝的外設數目,可以把一些複用功能重映射到其他腳上。設置複用重映射的配置寄存器是AFIO_MAPR實現引腳的重新映射。這時的複用功能不再存在原來的引腳上面了。
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章