uint16_t adc_lightsensor(void) { digitalWrite(ADC_LIGHTSENSOR_ENABLE, HIGH); ADC_SoftwareStartConv(ADC2); while(ADC_GetSoftwareStartConvStatus(ADC2)); return ADC_GetConversionValue(ADC2); digitalWrite(ADC_LIGHTSENSOR_ENABLE, LOW); }
uint16_t adc_battery(void) { digitalWrite(ADC_BATTERY_ENABLE, HIGH); ADC_SoftwareStartConv(ADC1); while(ADC_GetSoftwareStartConvStatus(ADC1)); return ADC_GetConversionValue(ADC1); digitalWrite(ADC_BATTERY_ENABLE, LOW); }
/* Described at the top of this file. */ void BluetoothModemTask( void *pvParameters ) { char cChar; /* Just to avoid compiler warnings. */ ( void ) pvParameters; /* Initialise COM0, which is USART1 according to the STM32 libraries. */ lCOMPortInit( comBTM, mainBAUD_RATE ); /* Reset BTM */ #if 0 GPIO_ResetBits(BTM_Reset_Port, BTM_Reset_Pin); vTaskDelay( ( TickType_t ) 10 / portTICK_PERIOD_MS ); GPIO_SetBits(BTM_Reset_Port, BTM_Reset_Pin); #endif // do { } while (1); // const char *atEscape = "^^^"; const char *atEscapeChar = "^"; const char *atEOL = "\r"; const char *atTest = "AT\r"; // after-reset condition: give the BT module some time to init itself. vTaskDelay( ( TickType_t ) 1000 / portTICK_PERIOD_MS ); do { #if 1 // Before the escape sequence there must be silence for 1s vTaskDelay( ( TickType_t ) 1200 / portTICK_PERIOD_MS ); lSerialPutString( comBTM, atEscapeChar, strlen(atEscapeChar) ); vTaskDelay( ( TickType_t ) 120 / portTICK_PERIOD_MS ); lSerialPutString( comBTM, atEscapeChar, strlen(atEscapeChar) ); vTaskDelay( ( TickType_t ) 120 / portTICK_PERIOD_MS ); lSerialPutString( comBTM, atEscapeChar, strlen(atEscapeChar) ); // After the escape sequence there must be silence for 1s vTaskDelay( ( TickType_t ) 1200 / portTICK_PERIOD_MS ); #endif LEDs_Set(LED0, LED_INTENS_0, LED_INTENS_100, LED_INTENS_0); // Send end of line lSerialPutString( comBTM, atEOL, strlen(atEOL) ); // wait a little bit vTaskDelay( ( TickType_t ) 100 / portTICK_PERIOD_MS ); // empty input buffer usartDrainInput(comBTM); /* this drains possible 'ERROR 05' status */ // vTaskDelay( ( TickType_t ) 10 / portTICK_PERIOD_MS ); // Send plain AT lSerialPutString( comBTM, atTest, strlen(atTest) ); // vTaskDelay( ( TickType_t ) 20 / portTICK_PERIOD_MS ); // expect "OK\r\n" } while (btmExpectOK()); LEDs_Set(LED0, LED_INTENS_0, LED_INTENS_0, LED_INTENS_100); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 /*| GPIO_Pin_1*/; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init( GPIOA, &GPIO_InitStruct ); do { } while (1); // disable local echo const char *atDisableEcho = "ATE0\r"; lSerialPutString( comBTM, atDisableEcho, strlen(atDisableEcho) ); if (btmExpectOK()) { // failed assert_failed(__FILE__, __LINE__); } const char *atSetDeviceName = "AT*agln=\"PIP-Watch\",0\r\n"; lSerialPutString( comBTM, atSetDeviceName, strlen(atSetDeviceName) ); if (btmExpectOK()) { // failed assert_failed(__FILE__, __LINE__); } const char *atSetPin = "AT*agfp=\"1234\",0\r"; lSerialPutString( comBTM, atSetPin, strlen(atSetPin) ); if (btmExpectOK()) { // failed assert_failed(__FILE__, __LINE__); } const char *atToDataMode = "AT*addm\r"; lSerialPutString( comBTM, atToDataMode, strlen(atToDataMode) ); if (btmExpectOK()) { // failed assert_failed(__FILE__, __LINE__); } /* Try sending out a string all in one go, as a very basic test of the lSerialPutString() function. */ // lSerialPutString( comBTM, pcLongishString, strlen( pcLongishString ) ); int k = 0; char *buf = NULL; for( ;; ) { /* Block to wait for a character to be received on COM0. */ xSerialGetChar( comBTM, &cChar, portMAX_DELAY ); /* Write the received character back to COM0. */ xSerialPutChar( comBTM, cChar, 0 ); if (!buf) { buf = pvPortMalloc(sizeof(char) * 32); #if 0 /* start ADC conversion by software */ // ADC_ClearFlag(ADC1, ADC_FLAG_EOC); ADC_ClearFlag(ADC1, ADC_FLAG_STRT); ADC_Cmd(ADC1, ENABLE); #if 0 ADC_SoftwareStartConvCmd(ADC1, ENABLE); /* wait till the conversion starts */ while (ADC_GetSoftwareStartConvStatus(ADC1) != RESET) { } #endif /* wait till the conversion ends */ while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) != SET) { } #endif k = 0; // k = itostr(buf, 32, RTC_GetCounter()); // k = itostr(buf, 32, ADC_GetConversionValue(ADC1)); // k = itostr(buf, 32, vbat_measured); // k = itostr(buf, 32, vbat_percent); // ADC_ClearFlag(ADC1, ADC_FLAG_EOC); } buf[k++] = cChar; if (cChar == '\r' || k >= 30) { buf[k] = '\0'; for (int i = 0; i < k-4; ++i) { if (buf[i] == '*') { /* set time: *<hours><minutes> */ int hours = (buf[i+1]-'0')*10 + (buf[i+2]-'0'); int minutes = (buf[i+3]-'0')*10 + (buf[i+4]-'0'); hours %= 24; minutes %= 60; current_rtime.sec = 0; current_rtime.hour = hours; current_rtime.min = minutes; break; } } if (xQueueSend(toDisplayStrQueue, &buf, 0) == pdTRUE) { // ok; will alloc new buffer buf = NULL; } else { // fail; ignore, keep buffer } // motor demo GPIO_SetBits(GPIOB, 1 << 13); vTaskDelay( ( TickType_t ) 300 / portTICK_PERIOD_MS ); GPIO_ResetBits(GPIOB, 1 << 13); k = 0; xSerialPutChar( comBTM, '\n', 0 ); } } }
void init( void ) { SystemInit(); // Set Systick to 1ms interval, common to all SAM3 variants if (SysTick_Config(SystemCoreClock / 1000)) { // Capture error while (true); } /* Configure the SysTick Handler Priority: Preemption priority and subpriority */ NVIC_SetPriority(SysTick_IRQn, 15); // Disable watchdog //WDT_Disable(WDT); // Initialize C library __libc_init_array(); // default 13pin led will off. pinMode(13,OUTPUT); digitalWrite(13, LOW); /* // Enable parallel access on PIo output data registers PIOA->PIO_OWER = 0xFFFFFFFF; PIOB->PIO_OWER = 0xFFFFFFFF; PIOC->PIO_OWER = 0xFFFFFFFF; PIOD->PIO_OWER = 0xFFFFFFFF; // Initialize Serial port U(S)Art pins PIO_Configure( g_APinDescription[PINS_UART].pport, g_APinDescription[PINS_UART].ulpintype, g_APinDescription[PINS_UART].ulpin, g_APinDescription[PINS_UART].ulpinconfiguration); digitalWrite(0, HIGH); // Enable pullup for rx0 PIO_Configure( g_APinDescription[PINS_USART0].pport, g_APinDescription[PINS_USART0].ulpintype, g_APinDescription[PINS_USART0].ulpin, g_APinDescription[PINS_USART0].ulpinconfiguration); PIO_Configure( g_APinDescription[PINS_USART1].pport, g_APinDescription[PINS_USART1].ulpintype, g_APinDescription[PINS_USART1].ulpin, g_APinDescription[PINS_USART1].ulpinconfiguration); PIO_Configure( g_APinDescription[PINS_USART3].pport, g_APinDescription[PINS_USART3].ulpintype, g_APinDescription[PINS_USART3].ulpin, g_APinDescription[PINS_USART3].ulpinconfiguration); // Initialize USB pins PIO_Configure( g_APinDescription[PINS_USB].pport, g_APinDescription[PINS_USB].ulpintype, g_APinDescription[PINS_USB].ulpin, g_APinDescription[PINS_USB].ulpinconfiguration); // Initialize CAN pins PIO_Configure( g_APinDescription[PINS_CAN0].pport, g_APinDescription[PINS_CAN0].ulpintype, g_APinDescription[PINS_CAN0].ulpin, g_APinDescription[PINS_CAN0].ulpinconfiguration); PIO_Configure( g_APinDescription[PINS_CAN1].pport, g_APinDescription[PINS_CAN1].ulpintype, g_APinDescription[PINS_CAN1].ulPin, g_APinDescription[PINS_CAN1].ulPinConfiguration); */ //disable JTAG-DP,release pin 29(PB3),30(PB4),23(PA15) RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); ////remap Timer4 //GPIO_PinRemapConfig(GPIO_Remap_TIM4,ENABLE); ////remap USART3 //GPIO_PinRemapConfig(GPIO_FullRemap_USART3,ENABLE); ////remap USART2 //GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE); ////remap CAN1,to PD0,PD1 //GPIO_PinRemapConfig(GPIO_Remap2_CAN1,ENABLE); // Initialize Analog Controller ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; //RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE); // Enable ADC1 clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_DeInit(); ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_6Cycles; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; /* ADC1 regular channel 12 configuration ************************************/ ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //ADC_InitStructure.ADC_ExternalTrigConv = ; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_Init(ADC1, &ADC_InitStructure); // Enable ADC1 ADC_Cmd(ADC1, ENABLE); // Enable ADC1 reset calibration register //ADC_ResetCalibration(ADC1); // Check the end of ADC1 reset calibration register while(ADC_GetSoftwareStartConvStatus(ADC1)); // Start ADC1 calibration //ADC_StartCalibration(ADC1); // Check the end of ADC1 calibration //while(ADC_GetCalibrationStatus(ADC1)); // Initialize analogOutput module analogOutputInit(); /* Configure the NVIC Preemption Priority Bits */ /* 4 bits for pre-emption priority(0-15 PreemptionPriority) and 0 bits for subpriority(0 SubPriority) */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); }
int chip_adc_ready(chip_adc_port_t port) { /* Check the end of ADC1 calibration */ return !ADC_GetSoftwareStartConvStatus(port); }
void Sensors_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; // following codes are call in previous functions //#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) // /* ADCCLK = PCLK2/2 */ // RCC_ADCCLKConfig(RCC_PCLK2_Div2); //#else // /* ADCCLK = PCLK2/4 */ // RCC_ADCCLKConfig(RCC_PCLK2_Div4); //#endif /* Enable peripheral clocks ------------------------------------------------*/ /* Enable DMA1 clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* Enable ADC1 and GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB, ENABLE); /* Configure PB0, PB1 (ADC Channel8, Channel9) as analog input -------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOB, &GPIO_InitStructure); /* DMA1 channel1 configuration ----------------------------------------------*/ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 6; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_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 DMA1 channel1 */ DMA_Cmd(DMA1_Channel1, 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; ADC_InitStructure.ADC_NbrOfChannel = 2; ADC_Init(ADC1, &ADC_InitStructure); /* ADC1 regular channelx configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 2, ADC_SampleTime_239Cycles5); /* Enable ADC1 DMA */ ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /* Enable ADC1 reset calibration register */ ADC_ResetCalibration(ADC1); /* Check the end of ADC1 reset calibration register */ while(ADC_GetResetCalibrationStatus(ADC1)); /* Start ADC1 calibration */ ADC_StartCalibration(ADC1); /* Check the end of ADC1 calibration */ while(ADC_GetCalibrationStatus(ADC1)); /* Start ADC1 Software Conversion */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(ADC_GetSoftwareStartConvStatus(ADC1)); OW_CurrState = OneWire_Delay; OW_NextState = OneWire_Idle; OW_Delay = 3; }