int main(void) { char temp; LED1_INIT(); LED2_INIT(); uart_config_default_stdio(); uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); sei(); LED1_ON(); LED2_ON(); printf("\n\n********RFM22 Communication Test********\n"); LED1_ON(); LED2_OFF(); rfm22b_init(); txtest_configure_radio(); //====================// //Communications Test temp = rfm22b_read(DTYPE); temp = rfm22b_read(DVERS); temp = rfm22b_read(INTEN1); temp = rfm22b_read(INTEN2); temp = rfm22b_read(OMFC1); temp = rfm22b_read(OMFC2); LED1_OFF(); LED2_ON(); printf("*****************************************\n\n"); txtest_send_current_packet(); // Send test packet '0123456789:;<=>?" // This example allows you to enter a 16-byte packet to send printf("Entering TX Mode...Give me a 16-byte packet\n\n"); LED1_OFF(); LED2_OFF(); txtest_fill_packet_from_uart(); while(1) { txtest_send_current_packet(); _delay_ms(1000); } return 0; }
/*! * Init board. */ void BoardInit(void) { SPI_InitTypeDef SPI_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; #ifdef STM32F10X_MD RCC_APB2PeriphClockCmd( 0 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE); #else #ifdef STM32L1XX_MD RCC_AHBPeriphClockCmd( 0 | RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB , ENABLE); #else #error "Unknown CPU type" #endif #endif DBGMCU_Config( 0 | DBGMCU_TIM2_STOP | DBGMCU_TIM3_STOP | DBGMCU_SLEEP | DBGMCU_STOP | DBGMCU_STANDBY , ENABLE); MAC_TIMER_CLOCK(); DELAY_TIMER_CLOCK(); LED1_OFF(); LED1_INIT(); LED2_OFF(); LED2_INIT(); TimerInit( MAC_TIMER, MAC_TIMER_PRESCALER, MAC_TIMER_IRQn ); TimerInit( DELAY_TIMER, DELAY_TIMER_PRESCALER, 0 ); RF_SDN_HIGH(); RF_SDN_INIT(); RF_NSS_HIGH(); RF_NSS_INIT(); RF_SCLK_INIT(); RF_MISO_INIT(); RF_MOSI_INIT(); RF_IRQ_INIT(); DELAY_uS(10 * DELAY_1MS_TIMER2); RF_SDN_LOW(); DELAY_uS(50 * DELAY_1MS_TIMER2); RF_SPI_CLOCK(); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(RF_SPI, &SPI_InitStructure); SPI_Cmd(RF_SPI, ENABLE); #ifdef STM32F10X_MD GPIO_EXTILineConfig(RF_IRQ_EXT_PORT, RF_IRQ_EXT_PIN); #else #ifdef STM32L1XX_MD SYSCFG_EXTILineConfig(RF_IRQ_EXT_PORT, RF_IRQ_EXT_PIN); #endif #endif EXTI_InitStructure.EXTI_Line = RF_IRQ_EXT_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); DISABLE_MAC_EXT_INTERRUPT(); CLEAR_MAC_EXT_INTERRUPT(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = RF_IRQ_EXT_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); #ifdef RTC_ENABLED RTC_INIT(); #endif #ifdef UART0_ENABLED Uart0Init(); #endif }
/*! * @brief main function */ int main(void) { int32_t currentTemperature = 0; uint32_t updateBoundariesCounter = 0; int32_t tempArray[UPDATE_BOUNDARIES_TIME * 2]; lowPowerAdcBoundaries_t boundaries; /* Init hardware */ BOARD_InitPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); /* Init using Led in Demo app */ LED1_INIT(); LED2_INIT(); /* Set to allow entering vlps mode */ SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeVlp); /* Calibrate param Temperature sensor */ ADC16_CalibrateParams(DEMO_ADC16_BASEADDR); /* Initialize Demo ADC */ if (!ADC16_InitHardwareTrigger(DEMO_ADC16_BASEADDR)) { PRINTF("Failed to do the ADC init\r\n"); return -1; } PRINTF("\n\r ADC LOW POWER DEMO\n"); PRINTF("\r The Low Power ADC project is designed to work with the Tower System or in a stand alone setting\n\n"); PRINTF("\r 1. Set your target board in a place where the temperature is constant.\n"); PRINTF("\r 2. Wait until two Led light turns on.\n"); PRINTF("\r 3. Increment or decrement the temperature to see the changes.\n"); PRINTF("\r Wait two led on...\n\r"); /* setup the HW trigger source */ LPTMR_InitTriggerSourceOfAdc(DEMO_LPTMR_BASE); ADC16_EnableDMA(DEMO_ADC16_BASEADDR, false); NVIC_EnableIRQ(DEMO_ADC16_IRQ_ID); /* Warm up microcontroller and allow to set first boundaries */ while (updateBoundariesCounter < (UPDATE_BOUNDARIES_TIME * 2)) { while (!conversionCompleted) { } currentTemperature = GetCurrentTempValue(); tempArray[updateBoundariesCounter] = currentTemperature; updateBoundariesCounter++; conversionCompleted = false; } /* Temp Sensor Calibration */ boundaries = TempSensorCalibration(updateBoundariesCounter, tempArray); updateBoundariesCounter = 0; /* Two LED is turned on indicating calibration is done */ LED1_ON(); LED2_ON(); /* Wait for user input before beginning demo */ PRINTF("\r Enter any character to begin...\n"); GETCHAR(); PRINTF("\r ---> OK! Main process is running...!\n"); while (1) { /* Prevents the use of wrong values */ while (!conversionCompleted) { } /* Get current Temperature Value */ currentTemperature = GetCurrentTempValue(); /* Store temperature values that are going to be use to calculate average temperature */ tempArray[updateBoundariesCounter] = currentTemperature; if (currentTemperature > boundaries.upperBoundary) { LED2_OFF(); LED1_ON(); } else if (currentTemperature < boundaries.lowerBoundary) { LED2_ON(); LED1_OFF(); } else { LED2_ON(); LED1_ON(); } /* Call update function */ if (updateBoundariesCounter >= (UPDATE_BOUNDARIES_TIME)) { boundaries = TempSensorCalibration(updateBoundariesCounter, tempArray); updateBoundariesCounter = 0; } else { updateBoundariesCounter++; } /* Clear conversionCompleted flag */ conversionCompleted = false; /* Enter to Very Low Power Stop Mode */ SMC_SetPowerModeVlps(SMC); } }