|
@@ -19,7 +19,7 @@
|
|
/* Private define ------------------------------------------------------------*/
|
|
/* Private define ------------------------------------------------------------*/
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
-uint16_t Buffer[BUFFER_SIZE] = {0, 0};
|
|
|
|
|
|
+uint16_t Buffer[BUFFER_SIZE] = {0, 0, 0};
|
|
uint16_t Voltage = 0;
|
|
uint16_t Voltage = 0;
|
|
uint16_t Current = 0;
|
|
uint16_t Current = 0;
|
|
uint16_t RefVolt = 0;
|
|
uint16_t RefVolt = 0;
|
|
@@ -41,24 +41,12 @@ void Init_ADC(void)
|
|
{
|
|
{
|
|
/* ADC configuration */
|
|
/* ADC configuration */
|
|
ADC_Config();
|
|
ADC_Config();
|
|
|
|
+
|
|
/* DMA configuration */
|
|
/* DMA configuration */
|
|
DMA_Config();
|
|
DMA_Config();
|
|
|
|
+
|
|
/* TIM2 configuration */
|
|
/* TIM2 configuration */
|
|
TIM2_Config();
|
|
TIM2_Config();
|
|
-
|
|
|
|
- /* Enable ADC1 DMA requests*/
|
|
|
|
- ADC_DMACmd(ADC1, ENABLE);
|
|
|
|
-
|
|
|
|
- /* Start ADC1 Conversion using TIM1 TRGO*/
|
|
|
|
- ADC_ExternalTrigConfig(ADC1, ADC_ExtEventSelection_Trigger3,
|
|
|
|
- ADC_ExtTRGSensitivity_Rising);
|
|
|
|
-
|
|
|
|
- /* Master Mode selection: Update event */
|
|
|
|
- TIM2_SelectOutputTrigger(TIM2_TRGOSource_Update);
|
|
|
|
-
|
|
|
|
- /* Enable TIM2 */
|
|
|
|
- TIM2_Cmd(ENABLE);
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -68,28 +56,35 @@ void Init_ADC(void)
|
|
*/
|
|
*/
|
|
static void ADC_Config(void)
|
|
static void ADC_Config(void)
|
|
{
|
|
{
|
|
- /* Enable ADC1 clock */
|
|
|
|
- CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
|
|
|
|
-
|
|
|
|
- /* Initialize and configure ADC1 */
|
|
|
|
- ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_1);
|
|
|
|
- ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
|
|
|
|
- ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);
|
|
|
|
-
|
|
|
|
- /* Enable ADC1 */
|
|
|
|
- ADC_Cmd(ADC1, ENABLE);
|
|
|
|
-
|
|
|
|
- /* Enable ADC1 Voltage meter channel */
|
|
|
|
- ADC_ChannelCmd(ADC1, VOLTAGE_CHANNEL, ENABLE);
|
|
|
|
- ADC_SchmittTriggerConfig(ADC1, VOLTAGE_CHANNEL, DISABLE);
|
|
|
|
- /* Enable ADC1 Current meter channel */
|
|
|
|
- ADC_ChannelCmd(ADC1, CURRENT_CHANNEL, ENABLE);
|
|
|
|
- ADC_SchmittTriggerConfig(ADC1, CURRENT_CHANNEL, DISABLE);
|
|
|
|
-
|
|
|
|
- /* ADC Voltage Reference */
|
|
|
|
- ADC_VrefintCmd(ENABLE);
|
|
|
|
- /* Enable ADC1 Vrefint Channel */
|
|
|
|
- ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);
|
|
|
|
|
|
+ /* Enable ADC1 clock */
|
|
|
|
+ CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
|
|
|
|
+
|
|
|
|
+ /* Initialize and configure ADC1 */
|
|
|
|
+ ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_1);
|
|
|
|
+ ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
|
|
|
|
+ ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);
|
|
|
|
+
|
|
|
|
+ /* Enable ADC1 */
|
|
|
|
+ ADC_Cmd(ADC1, ENABLE);
|
|
|
|
+
|
|
|
|
+ /* Enable ADC1 Voltage meter channel */
|
|
|
|
+ ADC_ChannelCmd(ADC1, VOLTAGE_CHANNEL, ENABLE);
|
|
|
|
+ ADC_SchmittTriggerConfig(ADC1, VOLTAGE_CHANNEL, DISABLE);
|
|
|
|
+
|
|
|
|
+ /* Enable ADC1 Current meter channel */
|
|
|
|
+ ADC_ChannelCmd(ADC1, CURRENT_CHANNEL, ENABLE);
|
|
|
|
+ ADC_SchmittTriggerConfig(ADC1, CURRENT_CHANNEL, DISABLE);
|
|
|
|
+
|
|
|
|
+ /* ADC Voltage Reference */
|
|
|
|
+ ADC_VrefintCmd(ENABLE);
|
|
|
|
+ /* Enable ADC1 Vrefint Channel */
|
|
|
|
+ ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);
|
|
|
|
+
|
|
|
|
+ /* Enable ADC1 DMA requests*/
|
|
|
|
+ ADC_DMACmd(ADC1, ENABLE);
|
|
|
|
+
|
|
|
|
+ /* Start ADC1 Conversion using TIM1 TRGO*/
|
|
|
|
+ ADC_ExternalTrigConfig(ADC1, ADC_ExtEventSelection_Trigger3, ADC_ExtTRGSensitivity_Rising);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -99,13 +94,13 @@ static void ADC_Config(void)
|
|
*/
|
|
*/
|
|
static void DMA_Config(void)
|
|
static void DMA_Config(void)
|
|
{
|
|
{
|
|
- /* Enable DMA1 clock */
|
|
|
|
- CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);
|
|
|
|
|
|
+ /* Enable DMA1 clock */
|
|
|
|
+ CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);
|
|
|
|
|
|
- /* Connect ADC to DMA channel 0 */
|
|
|
|
- SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
|
|
|
|
|
|
+ /* Connect ADC to DMA channel 0 */
|
|
|
|
+ SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
|
|
|
|
|
|
- DMA_Init(DMA1_Channel0, BUFFER_ADDRESS,
|
|
|
|
|
|
+ DMA_Init(DMA1_Channel0, BUFFER_ADDRESS,
|
|
ADC1_DR_ADDRESS,
|
|
ADC1_DR_ADDRESS,
|
|
BUFFER_SIZE,
|
|
BUFFER_SIZE,
|
|
DMA_DIR_PeripheralToMemory,
|
|
DMA_DIR_PeripheralToMemory,
|
|
@@ -114,14 +109,14 @@ static void DMA_Config(void)
|
|
DMA_Priority_High,
|
|
DMA_Priority_High,
|
|
DMA_MemoryDataSize_HalfWord);
|
|
DMA_MemoryDataSize_HalfWord);
|
|
|
|
|
|
- /* DMA Channel0 enable */
|
|
|
|
- DMA_Cmd(DMA1_Channel0, ENABLE);
|
|
|
|
|
|
+ /* DMA Channel0 enable */
|
|
|
|
+ DMA_Cmd(DMA1_Channel0, ENABLE);
|
|
|
|
|
|
- /* Enable DMA1 channel0 Transfer complete interrupt */
|
|
|
|
- DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);
|
|
|
|
|
|
+ /* Enable DMA1 channel0 Transfer complete interrupt */
|
|
|
|
+ DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);
|
|
|
|
|
|
- /* DMA enable */
|
|
|
|
- DMA_GlobalCmd(ENABLE);
|
|
|
|
|
|
+ /* DMA enable */
|
|
|
|
+ DMA_GlobalCmd(ENABLE);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -134,17 +129,20 @@ static void TIM2_Config(void)
|
|
/* Enable TIM2 clock */
|
|
/* Enable TIM2 clock */
|
|
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
|
|
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
|
|
|
|
|
|
- //Âîëøåáíîå ÷èñëî 1250 ïîëó÷èëîñü òàê:
|
|
|
|
- // ×àñòîòà ÌÊ (16 ÌHz) / Ïðåääåëèòåëü òàéìåðà (128) * Íóæíîå âðåìÿ â ñåêóíäàõ (0.01)
|
|
|
|
- TIM2->ARRH = 1250>>8; //Çàïèñûâàåì ñíà÷àëà ñòàðøèé áàéò
|
|
|
|
- TIM2->ARRL = (uint8_t)(1250); //Ïîòîì ìëàäøèé
|
|
|
|
- TIM2->CR1 |= TIM_CR1_URS; //Íàñòðàèâàåì èñòî÷íèê ñîáûòèÿ update
|
|
|
|
-// TIM2->CR2 |= (2<<4); //Íàñòðàèâàåì íà ïîäà÷ó ñèãíàëà äëÿ ÀÖÏ ïðè ïåðåïîëíåíèè òàéìåðà == TIM2_TRGOSource_Update
|
|
|
|
- TIM2->PSCR = 7; //Ïðåääåëèòåëü = 2^7 = 128
|
|
|
|
- TIM2->EGR |= TIM_EGR_UG; //Ãåíåðèì ñîáûòèå update, ÷òîáû îáíîâèëñÿ ïðåääåëèòåëü
|
|
|
|
- TIM2->CR1 |= TIM_CR1_CEN; //Çàïóñêàåì
|
|
|
|
|
|
+ /* Initializes the TIM2 Time Base Unit */
|
|
|
|
+ TIM2_TimeBaseInit(TIM2_Prescaler_128, TIM2_CounterMode_Up, TIM_PERIOD);
|
|
|
|
+
|
|
|
|
+ /* Selects the TIM2 Update Request Interrupt source */
|
|
|
|
+ TIM2_UpdateRequestConfig(TIM2_UpdateSource_Regular);
|
|
|
|
+
|
|
|
|
+ /* Master Mode selection: Update event */
|
|
|
|
+ TIM2_SelectOutputTrigger(TIM2_TRGOSource_Update);
|
|
|
|
+
|
|
|
|
+ /* Enable TIM2 */
|
|
|
|
+ TIM2_Cmd(ENABLE);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @}
|
|
* @}
|
|
*/
|
|
*/
|