/*******************************************************************************
* 函數名 : DMA_configuration 說明 : DMA通道1初始化配置,用于ADC結果傳輸保存
*******************************************************************************/
void DMA_Configuration(void)
{
// DMA_ISR = 0x00000000;
/*DMA中斷狀態寄存器,可通過設置IFCR對應位清除
|||||||+---GIF1 =0:通道1沒產生TE、HT或TC事件全局中斷標志
|||||||+---TCIF1=0:通道1沒產生傳輸完成中斷標志
|||||||+---HTIF1=0:通道1沒產生半傳輸中斷標志
|||||||+---TEIF1=0:通道1沒產生傳輸錯誤中斷標志
||||||+----通道2中斷標志組
||||++-----通道3中斷標志組
||||++-----通道4中斷標志組
|||+-------通道5中斷標志組
||+--------通道6中斷標志組
||+--------通道7中斷標志組
+----------保留*/
// DMA_IFCR= 0x00000000;
/*DMA中斷標志清除寄存器,可由軟件設置或清除
|||||||+---CGIF1 =1:清除通道1的TE、HT或TC事件全局中斷標志
|||||||+---CTCIF1=1:清除通道1的傳輸完成中斷標志
|||||||+---CHTIF1=1:清除通道1的半傳輸中斷標志
|||||||+---CTEIF1=1:清除通道1的傳輸錯誤中斷標志
||||||+----清除通道2中斷標志組
||||++-----清除通道3中斷標志組
||||++-----清除通道4中斷標志組
|||+-------清除通道5中斷標志組
||+--------清除通道6中斷標志組
||+--------清除通道7中斷標志組
+----------保留*/
DMA_CCR1= 0x00003A80;/*0011 1010 1000 0000
|||| |||| |||| |||| |||+--EN = 0:通道關閉,1:通道開啟
|||| |||| |||| |||| ||+---TCIE=0:不允許傳輸完成中斷
|||| |||| |||| |||| |+----HTIE=0:禁止半傳輸中斷
|||| |||| |||| |||| +-----TEIE=0:禁止傳輸錯誤中斷
|||| |||| |||| |||+-------DIR =0:數據傳輸方向(從外設讀)
|||| |||| |||| ||+--------CIRC=0:不執行循環操作
|||| |||| |||| |+---------PINC=0:不執行外設地址增量模式
|||| |||| |||| +----------MINC=1:執行存儲器地址增量模式
|||| |||| ||++------------PSIZE=10:32位外設數據寬度
|||| |||| ++--------------MSIZE=10:32位存儲器數據寬度
|||| ||++-----------------PL=11:最高通道優先級
|||| |+-------------------MEM2MEM=0:非存儲器到存儲器模式
++++-------+--------------------保留*/
DMA_CNDTR1=40;//0x00001000; //DMA通道1傳輸數量寄存器(4096*2 Bytes)
DMA_CPAR1 = (uint32_t)ADC1_DR_ADDR; //DMA通道1的外設數據寄存器基地址
DMA_CMAR1 =(uint32_t)&(Scan_Buffer[0]);//DMA通道1的源或目標的存儲器地址
// DMA_CCR1 |= 0x00000001; // EN = 1:DMA通道1開啟
}
/*******************************************************************************
* 函數名 : ADC_configuration 說明 : ADC初始化,采樣完成后自動DMA到緩沖區
*******************************************************************************/
void ADC_Configuration(void)
{
ADC2_CR1 =0x00000000;
ADC1_CR1 =0x00060000;/*
||||||++---AWDCH[4:0]:模擬看門狗通道選擇位
||||||+----=000:不允許EOC、AWD、JEOC中斷
|||||+-----Nib8_SCAN=1:使用掃描模式
||||++-----保持復位值
|||+-------DUALMOD=6:規則同步模式
||+--------規則通道和注入通道禁用模擬看門狗
++---------保留*/
ADC2_CR2 =0x001E0000;
ADC1_CR2 =0x00100100;/*
|||||||+---ADON=0:關閉ADC轉換/校準,=1:開啟ADC并啟動轉換
|||||||+---CONT=0:1:連續轉換模式
|||||||+---CAL=0,=1:A/D校開始準,校準后該位將被硬件清除
|||||||+---RSTCAL=0,=1:初始化校準寄存器,校準后該位將被硬件清除
||||||+----保留
|||||+-----ALIGN=0 & DMA=1:數據右對齊和使用DMA模式
||||+------注入通道設置,這里未使用,設置為默認值
|||+-------=0000:規則通道使用定時器1的CC1事件啟動轉換,=1110:SWSTART
||+--------=1:使用外部觸發信號啟動轉換
++---------保留*/
ADC2_SQR1=0x00000000;
ADC1_SQR1=0x00000000;/*ADC規則序列寄存器 1
|||||||+---SQ13[4:0]規則序列中的第13個轉換通道編號(0-17)。
||||||+----SQ14[4:0]規則序列中的第14個轉換通道編號(0-17)。
||||+------SQ15[4:0]規則序列中的第15個轉換通道編號(0-17)。
|||+-------SQ16[4:0]規則序列中的第16個轉換通道編號(0-17)。
||+--------L[3:0]:規則轉換序列通道長度:00001個轉換)...1111(16個轉換)
++---------保留*/
ADC2_SQR3 =0x00000001; //----------------------
ADC1_SQR3 =0x00000000;/*ADC規則序列寄存器 3
||||||++---SQ1=00000:轉換序列中的第1個轉換通道的編號(0)
+++++++----SQ2-6=00000:轉換序列中第2-6個轉換通道編號(5Bits*5)
+----------保留*/
ADC2_SMPR2=0x00000001;
ADC1_SMPR2=0x00000001;/*ADC采樣時間寄存器 1
|||||||+---SMP01=000(3Bits):使通道00的采樣時間 1.5T
||||||+----SMP02=000(3Bits):使通道01的采樣時間 1.5T
|+++++++---SMP11-17=000(3Bits*7):通道11-17的采樣時間 1.5T
++---------保留*/
ADC1_CR2 |=0x00000001;
ADC2_CR2 |=0x00000001; //ADON=1:開啟ADC1、ADC2
ADC1_CR2 |=0x00000008;
while(ADC1_CR2 & 0x00000008);//初始化ADC1校準寄存器
ADC2_CR2 |=0x00000008;
while(ADC2_CR2 & 0x00000008);//初始化ADC2校準寄存器
ADC1_CR2 |=0x00000004;
while(ADC1_CR2 & 0x00000004);//ADC1校準
ADC2_CR2 |=0x00000004;
while(ADC2_CR2 & 0x00000004);//ADC2校準
}
/*******************************************************************************
* 函數名 : Timer_configuration 說明 : 系統定時器初始化配置
*******************************************************************************/
void Timer_Configuration(void)
{
//---------------TIM1用于定時觸發ADC采樣-------------------
// Set_Base(Item_Index[2]);
TIM1_PSC = 4;
TIM1_ARR = 7199;
TIM1_CCR1=(7199+1)/2;
TIM1_CR1 = 0x0094;/*0000 0000 1001 0100
|||| |||| |||| |||+---CEN=0,禁止計數器
|||| |||| |||| ||+----UDIS=0,允許UEV更新
|||| |||| |||| |+-----URS=1:只有計數器溢出產生中斷或DMA請求
|||| |||| |||| +------OPM=0:在發生更新事件時,計數器不停止
|||| |||| |||+--------DIR=1,計數器向下計數
|||| |||| |++---------CMS=00,選擇邊沿對齊模式
|||| |||| +-----------ARPE=1,TIM1_ARR寄存器被裝入緩沖器
|||| ||++-------------CKD=00,CK_INT分頻比為1
++++-++---------------保留*/
TIM1_RCR = 0x0000;/*0000 0000 0000 0001
|||| |||| ++++ ++++---在邊沿對齊模式下,PWM周期的數目+1
++++-++++-------------保留*/
TIM1_CCER =0x0001;/*0000 0000 0000 0001
|||| |||| |||| |||+---CC1E=1,OC1信號輸出到對應的輸出引腳
|||| |||| |||| ||+----CC1P=0,OC1高電平有效
|||| |||| |||| |+-----CC1NE=0,OC1N禁止輸出
|||| |||| |||| +------CC1NP=0,OC1N高電平有效
++++-++++-++++--------CC2、CC3、CC4配置為復位值*/
TIM1_CCMR1=0x0078;/*0000 0000 0111 1100
|||| |||| |||| ||++---CC1S=00,CC1通道被配置為輸出
|||| |||| |||| |+-----OC1FE=1,允輸出比較1 快速使能?
|||| |||| |||| +------OC1PE=1,輸出比較1預裝載使能
|||| |||| |+++--------0C1M=111,PWM模式2
|||| |||| +-----------OC1CE=0,OC1REF 不受ETRF輸入的影響
++++-++++-------------CC2通道配置為復位值*/
TIM1_BDTR =0x8000;/*1000 0000 0000 0000
|+++-++++-++++-++++---其它位保持不變
+---------------------MOE=0,主輸出使能*/
TIM1_DIER =0x4200;/*0100 0011 0000 0000 DMA和中斷使能寄存器
| || +----CC1IE=0:不允許捕獲/比較1中斷
| |+-------------UDE=1:允許更新的DMA請求
| +--------------CC1DE=1:允許捕獲/比較1的DMA請求
+--------------------TDE=1:允許觸發DMA請求*/
TIM1_CR1 |=0x0001;//CEN=1,使能TIMER1計數器
} |