/** * @brief Initializes the OLED display. * @retval None */ void Blox_OLED_Init(void) { uint8_t garbage; OLED_RCC_Configuration(); OLED_GPIO_Configuration(); SysTick_Init(); Blox_VUSART_Init(OLED_USART_ID); OLED_Reset(); SysTick_Wait(2000); Blox_VUSART_TryReceive(2, &garbage); //receive any garbage data Blox_OLED_Send(OLED_AUTOBAUD); Blox_OLED_Receive(); }
/** * @brief Initializes the XBees sleep and reset pins, and then resets the XBee. * @retval None */ XBEE_STATUS Blox_XBee_Init(void) { uint8_t garbage; XBee_RCC_Configuration(); XBee_GPIO_Configuration(); Blox_System_Init(); SysTick_Init(); XBEE_SLEEP_GPIO->ODR &= ~(XBEE_SLEEP_PIN); XBEE_RESET_GPIO->ODR |= XBEE_RESET_PIN; SysTick_Wait(1); XBEE_RESET_GPIO->ODR &= ~(XBEE_RESET_PIN); SysTick_Wait(1); XBEE_RESET_GPIO->ODR |= XBEE_RESET_PIN; SysTick_Wait(300); Blox_VUSART_Init(XBEE_VUSART_ID); Blox_VUSART_TryReceive(XBEE_VUSART_ID, &garbage); //clear VUSART buffer before send/receive Blox_VUSART_Disable_RXNE_IRQ(XBEE_VUSART_ID); Blox_VUSART_Register_RXNE_IRQ(XBEE_VUSART_ID, &Blox_XBee_VUSART_RXNE_IRQ); Blox_VUSART_Enable_RXNE_IRQ(XBEE_VUSART_ID); return XBEE_OK; }
/** * @brief Configures the XBee and writes the configuration to non-volatile mem. * @retval XBEE_OK if successfull, XBEE_INIT_FAIL on failure. */ XBEE_STATUS Blox_XBee_Config(void) { char buffer[10]; uint8_t garbage; SysVar sys; XBee_RCC_Configuration(); XBee_GPIO_Configuration(); Blox_VUSART_Init(XBEE_VUSART_ID); SysTick_Init(); Blox_System_Init(); Blox_System_GetVars(&sys); XBEE_SLEEP_GPIO->ODR &= ~(XBEE_SLEEP_PIN); XBEE_RESET_GPIO->ODR |= XBEE_RESET_PIN; SysTick_Wait(1); XBEE_RESET_GPIO->ODR &= ~(XBEE_RESET_PIN); SysTick_Wait(1); XBEE_RESET_GPIO->ODR |= XBEE_RESET_PIN; SysTick_Wait(1100); Blox_VUSART_TryReceive(XBEE_VUSART_ID, &garbage); //clear VUSART buffer before send/receive Blox_VUSART_Send(XBEE_VUSART_ID, 'X'); // Junk character to before init SysTick_Wait(1100); Blox_VUSART_SendData(XBEE_VUSART_ID, "+++", 3) ; //Enter Command Mode if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(1100); sprintf(buffer, "ATMY%d\r", sys.id); Blox_VUSART_SendData(XBEE_VUSART_ID, (uint8_t *)buffer, strlen(buffer)) ; //Enter Command Mode if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); Blox_VUSART_SendData(XBEE_VUSART_ID, "ATDLFFFF\r", 9) ; //Set broadcast dest ID if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); Blox_VUSART_SendData(XBEE_VUSART_ID, "ATDH0\r", 6) ; //Set high of dest ID if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); Blox_VUSART_SendData(XBEE_VUSART_ID, "ATAP1\r", 6) ; //API Mode 1 (no escapes) if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); Blox_VUSART_SendData(XBEE_VUSART_ID, "ATRN1\r", 6) ; //API Mode 1 (no escapes) if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); Blox_VUSART_SendData(XBEE_VUSART_ID, "ATWR\r", 9) ; //Write to non-volatile memory if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); Blox_VUSART_SendData(XBEE_VUSART_ID, "ATCN\r", 5) ; //Exit command mode if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); return XBEE_OK; }