void SPIRIT_INIT(void) { NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000); // Use STM32L1xx_flash.icf RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC, ENABLE ); SdkEvalIdentification(); SdkStartSysTick(); SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); SdkEvalLedInit(LED1); SdkEvalLedInit(LED2); SdkEvalM2SGpioInit(M2S_GPIO_SDN,M2S_MODE_GPIO_OUT); SpiritSpiInit(); USART1_Init(); SpiritEnterShutdown(); SpiritExitShutdown(); SpiritManagementIdentificationRFBoard(); SdkEvalM2SGpioInit(M2S_GPIO_0, M2S_MODE_EXTI_IN); SdkEvalM2SGpioInterruptCmd(M2S_GPIO_0,0x0F,0x0F,ENABLE); SpiritGpioInit(&xGpioIRQ); SpiritRadioInit(&xRadioInit); SpiritPktBasicInit(&xBasicInit); SpiritPktBasicAddressesInit(&xAddressInit); SpiritIrqDeInit(&xIrqStatus); SpiritIrq(RX_DATA_DISC, S_ENABLE); SpiritIrq(RX_DATA_READY, S_ENABLE); // testy dla odbioru komend !!!!! SpiritIrq(TX_DATA_SENT, S_ENABLE); SpiritIrq(TX_FIFO_ERROR, S_ENABLE); // Declare Length of Payload SpiritPktBasicSetPayloadLength(PAYLOAD_LENGTH); SpiritQiSetSqiThreshold(SQI_TH_0); SpiritQiSqiCheck(S_ENABLE); SpiritIrqClearStatus(); // SET_INFINITE_RX_TIMEOUT(); SpiritTimerSetRxTimeoutMs(RX_TIMEOUT); //SpiritTimerSetRxTimeoutStopCondition(TIMEOUT_ALWAYS_STOPPED); SpiritTimerSetRxTimeoutStopCondition(SQI_ABOVE_THRESHOLD); SpiritIrqClearStatus(); //USART_Conf(); //*** For test purposes only: create unsigned, 16-bit counter vectcTxBuff[0] = 0; // Clear Counter to overwrite initial values vectcTxBuff[1] = 0; SdkDelayMs(2000); //wait till the tested board FW active // IWDG_Init(); // let the dogs out, }
/** * @brief Main program. * @param None * @retval None */ void 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 */ /* Identify the board to distinguish the SDK motherboard from the SDK dongle */ SdkEvalIdentification(); /* Declare and read the DFU flag on E2Prom */ uint8_t cDfuFlag = SdkDfuReadDfuFlag(); /* Initialize the Key push-button */ SdkEvalPushButtonInit(BUTTON_SCM_PS, BUTTON_MODE_GPIO); /* Check if the Key push-button on is pressed */ if (!(SdkEvalPushButtonGetState(BUTTON_SCM_PS) == RESET || cDfuFlag)) { /* Test if user code is programmed starting from address 0x8003000 */ if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) { /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ __set_MSP(*((__IO uint32_t*) ApplicationAddress)); Jump_To_Application(); } } /*!< Otherwise enters DFU mode to allow user to program his application */ /* Reset the DFU flag on E2Prom */ SdkDfuResetDfuFlag(); /* Enter DFU mode */ DeviceState = STATE_dfuERROR; DeviceStatus[0] = STATUS_ERRFIRMWARE; DeviceStatus[4] = DeviceState; /* DFU initialization */ SdkEvalDFUInit(); /* LED2 initialization */ SdkEvalLedInit(LED2); /* Main loop */ while (1) { /* LED2 toggling */ SdkEvalLedToggle(LED2); /* pause */ for(volatile uint32_t i = 0 ; i<0x3FFFFF ; i++); } }
/** * @brief System main function. * @param None * @retval None */ void main (void) { //*** DiZiC SPIRIT1 Demo NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000); // Use STM32L1xx_flash.icf RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE ); SdkEvalIdentification(); SdkStartSysTick(); SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); SdkEvalLedInit(LED1); SdkEvalLedInit(LED2); SdkEvalM2SGpioInit(M2S_GPIO_SDN,M2S_MODE_GPIO_OUT); SpiritSpiInit(); WUKPIN1_Init(); /*********************/ /* Allow access to RTC Domain */ // PWR_RTCAccessCmd(ENABLE); /* Clear WakeUp flag */ // PWR_ClearFlag(PWR_FLAG_WU); /* Check if the StandBy flag is set */ // if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET) // { /* Clear StandBy flag */ // PWR_ClearFlag(PWR_FLAG_SB); /* Wait for RTC APB registers synchronisation */ // RTC_WaitForSynchro(); /* No need to configure the RTC as the RTC config(clock source, enable, prescaler,...) are kept after wake-up from STANDBY */ // } /* RTC Configuration */ /* Reset RTC Domain */ // RCC_RTCResetCmd(ENABLE); // RCC_RTCResetCmd(DISABLE); /* Enable the LSE OSC */ // RCC_LSICmd(ENABLE); /* Wait till LSE is ready */ // while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) // {} /* Select the RTC Clock Source */ // RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); /* Enable the RTC Clock */ // RCC_RTCCLKCmd(ENABLE); /* Wait for RTC APB registers synchronisation */ // RTC_WaitForSynchro(); /* RTC domain*/ // RTC_WakeUpCmd(DISABLE); // RTC_ITConfig(RTC_IT_WUT , ENABLE); // RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div4); // RTC_SetWakeUpCounter(0xFF00); // PWR_WakeUpPinCmd(PWR_WakeUpPin_1 , DISABLE); #ifdef USE_VCOM /* VC config */ // SdkEvalVCInit(); // while(bDeviceState != CONFIGURED); #endif /* Spirit ON */ SpiritEnterShutdown(); SpiritExitShutdown(); SpiritManagementIdentificationRFBoard(); SdkEvalM2SGpioInit(M2S_GPIO_0,M2S_MODE_EXTI_IN); /* Spirit IRQ config */ SpiritGpioInit(&xGpioIRQ); SdkEvalM2SGpioInterruptCmd(M2S_GPIO_0,0x0F,0x0F,ENABLE); //*** SdkEvalLedOn(LED1); /* Spirit Radio config */ SpiritRadioInit(&xRadioInit); /* Spirit Packet config */ SpiritPktBasicInit(&xBasicInit); SpiritPktBasicAddressesInit(&xAddressInit); /* Spirit IRQs enable */ SpiritIrqDeInit(&xIrqStatus); SpiritIrq(RX_DATA_DISC,S_ENABLE); SpiritIrq(RX_DATA_READY,S_ENABLE); SpiritIrq(TX_DATA_SENT , S_ENABLE); /* payload length config */ SpiritPktBasicSetPayloadLength(512); /* enable SQI check */ SpiritQiSetSqiThreshold(SQI_TH_0); SpiritQiSqiCheck(S_ENABLE); /* RX timeout config */ SpiritTimerSetRxTimeoutMs(200.0); SpiritTimerSetRxTimeoutStopCondition(SQI_ABOVE_THRESHOLD); /* IRQ registers blanking */ SpiritIrqClearStatus(); /* RX command */ SpiritCmdStrobeRx(); // PWR_PVDCmd(DISABLE); // RCC_MSIRangeConfig(RCC_MSIRange_0); // RCC_AdjustMSICalibrationValue(0x00); // RCC_MSICmd(DISABLE); // RCC_HSICmd(DISABLE); // PWR_EnterSTOPMode(PWR_Regulator_LowPower , PWR_STOPEntry_WFI); // PWR_UltraLowPowerCmd(ENABLE); // PWR_FastWakeUpCmd(ENABLE); //////////////////////////////////////////////////////////////////////////////// // ErrorStatus HSE_Status; // RCC_HSEConfig(RCC_HSE_ON); // HSE_Status = RCC_WaitForHSEStartUp(); // FLASH_SetLatency(FLASH_Latency_1); // FLASH_PrefetchBufferCmd(ENABLE); // RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // RCC_HCLKConfig(RCC_SYSCLK_Div1); // RCC_PLLConfig(RCC_PLLSource_HSE, RCC_PLLMul_12, RCC_PLLDiv_3); // RCC_PCLK1Config(RCC_HCLK_Div1); // RCC_PCLK2Config(RCC_HCLK_Div1); ///////////////////////////////////////////////////////////////////////////////// /* infinite loop */ while (1){ printf("123"); SpiritCmdStrobeRx(); if(PressButtom) { PressButtom = FALSE; NOPdelay(2000); // fit the TX FIFO SpiritCmdStrobeFlushTxFifo(); SpiritSpiWriteLinearFifo(500, vectcTxBuff2); // send the TX command SpiritCmdStrobeTx(); // wait for TX done SdkEvalLedToggle(LED_GREEN); while(!xTxDoneFlag); SdkEvalLedToggle(LED_GREEN); xTxDoneFlag = RESET; // fit the TX FIFO SpiritCmdStrobeFlushTxFifo(); SpiritSpiWriteLinearFifo(500, vectcTxBuff2); // send the TX command SpiritCmdStrobeTx(); // wait for TX done SdkEvalLedToggle(LED_GREEN); while(!xTxDoneFlag); SdkEvalLedToggle(LED_GREEN); xTxDoneFlag = RESET; // fit the TX FIFO SpiritCmdStrobeFlushTxFifo(); SpiritSpiWriteLinearFifo(500, vectcTxBuff2); // send the TX command SpiritCmdStrobeTx(); // wait for TX done SdkEvalLedToggle(LED_GREEN); while(!xTxDoneFlag); SdkEvalLedToggle(LED_GREEN); xTxDoneFlag = RESET; } } }
int main(void) { //int ret; NVIC_SetVectorTable(NVIC_VectTab_FLASH,VECTOR_TABLE_BASE_ADDRESS); /* Identify the BlueNRG platform */ SdkEvalIdentification(); RCC_Configuration(); /* Basic button init function for handling application jumping */ Configure_Button(); #if 0 /* TBR */ PWR_PVDCmd(DISABLE); /* Disable FLASH during Sleep */ FLASH_SLEEPPowerDownCmd(ENABLE); /* Enable Ultra low power mode */ PWR_UltraLowPowerCmd(ENABLE); PWR_FastWakeUpCmd(DISABLE); #endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); Clock_Init(); HCI_Init(); /* Init SPI interface */ SdkEvalSpiInit(SPI_MODE_EXTI); /* Reset BlueNRG SPI interface */ BlueNRG_RST(); /* Init leds */ SdkEvalLedInit(LED1); SdkEvalLedInit(LED2); { tHalUint8 bdaddr[] = {0x12, 0x34, 0x00, 0xE1, 0x80, 0x02}; aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, bdaddr); } aci_gatt_init(); { uint16_t service_handle, dev_name_char_handle, appearance_char_handle; aci_gap_init(1, &service_handle, &dev_name_char_handle, &appearance_char_handle); } #if 0/* TBR */ aci_gap_set_auth_requirement(MITM_PROTECTION_REQUIRED, OOB_AUTH_DATA_ABSENT, NULL, 7, 16, USE_FIXED_PIN_FOR_PAIRING, 123456, BONDING); #endif //PRINTF("BLE Stack Initialized.\n"); #ifdef ST_OTA_BTL /* Add OTA bootloader service */ Add_Btl_Service(); #endif /* -2 dBm output power */ aci_hal_set_tx_power_level(1,4); while(1) { #ifdef ST_OTA_BTL static tClockTime startTime = 0; if (Clock_Time() - startTime >led_blinking_rate) { /* LED D1 is toggling on OTA_Service Manager */ SdkEvalLedToggle(LED1); startTime = Clock_Time(); } #endif /* end ST_OTA_BTL */ HCI_Process(); if(set_connectable){ setConnectable(); set_connectable = 0; } /* Use button to switch to the basic Reset Manager */ if (GPIO_ReadInputDataBit(ButtonPort,ButtonPin) == RESET) { /* Add delay to avoid conlict with DFU activation */ Clock_Wait(2000); /* Check if an application has been loaded previously through OTA service manager */ if (*((uint32_t*) NEW_APP_MEM_INFO)!= 0) /* Service Manager will jump to the Application previously loaded at address APPLICATION_JUMP_ADDRESS */ Switch_To_OTA_Service_Manager_Application(APPLICATION_JUMP_ADDRESS); } } }