/** ****************************************************************************** * @file ADC/RegSimul_DualMode/main.c * @author MCD Application Team * @version V3.3.0 * @date 04/16/2010 * @brief Main program body ****************************************************************************** * @copy * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * *

© COPYRIGHT 2010 STMicroelectronics

*/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" #include "USART.h" unsigned char it_active=1; int stop; ////////////////////// ADC u32 ADCValue1; /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define ADC1_DR_Address ((uint32_t)0x4001244C) /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; __IO uint32_t ADC_DualConvertedValueTab[3000]; /* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void GPIO_Configuration(void); // Variablen zum Splitten der ADC-Werte #define lowMask ((uint32_t)0xFFFF) #define highMask ((uint32_t)0xFFFF0000) u32 ADClow1=0; u32 ADChigh1=0; u32 ADClow2=0; u32 ADChigh2=0; char blar = 0X50; // Protokollvariablen zur Busübertragung u32 Protokoll[4]; #define Bit0to6 ((uint32_t)0x7F) #define Bit7to11 ((uint32_t)0xF80) #define Bit0to1 ((uint32_t)0x3) #define Bit2to8 ((uint32_t)0x1FC) #define Bit9to11 ((uint32_t)0xE00) u32 StartBit = 0x80; int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ USART2Init(); // char highBits1; // char lowBits1; // char highBits2; // char lowBits2; //char test4[10]; /* System clocks configuration ---------------------------------------------*/ RCC_Configuration(); /* GPIO configuration ------------------------------------------------------*/ GPIO_Configuration(); /* DMA1 channel1 configuration ----------------------------------------------*/ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_DualConvertedValueTab; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 3000; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; 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 DMA1 Channel1 */ DMA_Cmd(DMA1_Channel1, ENABLE); /* ADC1 configuration ------------------------------------------------------*/ ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 2; ADC_Init(ADC1, &ADC_InitStructure); /* ADC1 regular channels configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_1Cycles5); /* Enable ADC1 DMA */ ADC_DMACmd(ADC1, ENABLE); /* ADC2 configuration ------------------------------------------------------*/ ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 2; ADC_Init(ADC2, &ADC_InitStructure); /* ADC2 regular channels configuration */ ADC_RegularChannelConfig(ADC2, ADC_Channel_12, 1, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_13, 2, ADC_SampleTime_1Cycles5); /* Enable ADC2 external trigger conversion */ ADC_ExternalTrigConvCmd(ADC2, ENABLE); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /* Enable Vrefint channel17 */ /* 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)); /* Enable ADC2 */ ADC_Cmd(ADC2, ENABLE); /* Enable ADC2 reset calibaration register */ ADC_ResetCalibration(ADC2); /* Check the end of ADC2 reset calibration register */ while(ADC_GetResetCalibrationStatus(ADC2)); /* Start ADC2 calibaration */ ADC_StartCalibration(ADC2); /* Check the end of ADC2 calibration */ while(ADC_GetCalibrationStatus(ADC2)); /* Start ADC1 Software Conversion */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); /* Test on DMA1 channel1 transfer complete flag */ while(!DMA_GetFlagStatus(DMA1_FLAG_TC1)); /* Clear DMA1 channel1 transfer complete flag */ DMA_ClearFlag(DMA1_FLAG_TC1); //int low=0XFFFF; //int high=0XFFFF0000; //int bitlowcomp = 0X00FF; //int bithighcomp = 0XFF00; int j=0; while (1) { ADCValue1 = ADC_DualConvertedValueTab[j]; ADChigh1 = (ADC_DualConvertedValueTab[j] & highMask)>> 16; ADClow1 = (ADC_DualConvertedValueTab[j] & lowMask); j++; ADChigh2 = (ADC_DualConvertedValueTab[j] & highMask)>> 16; ADClow2 = (ADC_DualConvertedValueTab[j] & lowMask); //ADChigh1 = 1; //ADChigh2 = 1; //ADClow1 = 1; //ADClow2 = 1; Protokoll[0] = StartBit + ((ADChigh1 & Bit9to11) >> 9); Protokoll[1] = (ADChigh1 & Bit2to8) >> 2; Protokoll[2] = ((ADChigh1 & Bit0to1)<<5) + ((ADClow1 & Bit7to11) >> 7); Protokoll[3] = (ADClow1 & Bit0to6); // Protokoll[0] = 0X80; // Protokoll[1] = 0X55; // Protokoll[2] = 0X55; // Protokoll[3] = 0X30; USART_SendData(USART2, Protokoll[0]); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, Protokoll[1]); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, Protokoll[2]); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, Protokoll[3]); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); Protokoll[0] = 0; Protokoll[1] = 0; Protokoll[2] = 0; Protokoll[3] = 0; if(j<2998){ j++; } else{ j=0; } /* j=0; while(j<16){ ADCValue1 = ADC_DualConvertedValueTab[j]; ADClow= ADCValue1 & low; ADChigh= ADCValue1 & high; ADChigh= ADChigh>>16; if((j%2)==0 || j==0){ lowBits1 = ADClow & bitlowcomp; highBits1 = (ADClow & bithighcomp) >> 8; lowBits2 = ADChigh & bitlowcomp; highBits2 = (ADChigh & bithighcomp) >> 8; //neu USART2_Write_String(highBits1); // USART2_Write_String(lowBits); } // USART2_Write_String("K"); j++; } */ } } /** * @brief Configures the different system clocks. * @param None * @retval None */ void RCC_Configuration(void) { /* ADCCLK = PCLK2/4 */ RCC_ADCCLKConfig(RCC_PCLK2_Div4); /* Enable peripheral clocks ------------------------------------------------*/ /* Enable DMA1 clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* Enable ADC1, ADC2 and GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | RCC_APB2Periph_GPIOC, ENABLE); } /** * @brief Configures the different GPIO ports. * @param None * @retval None */ void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; /* (ADC Channel10, Channel11, Channel12 and Channel13) as analog input ----------------------------------------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure); } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /** * @} */ /** * @} */ /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/