#include #include "logging.hpp" #include "spi.hpp" // STM32VL-Discovery green led - PC9 #define BTN_PORT GPIOA #define LED_PORT GPIOC #define LED1_PIN GPIO_PIN_8 #define LED2_PIN GPIO_PIN_9 #define BTN_PIN GPIO_PIN_0 #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE #define LoRa_RESET_Pin GPIO_PIN_3 #define LoRa_RESET_GPIO_Port GPIOA #define LoRa_CS_Pin GPIO_PIN_4 #define LoRa_CS_GPIO_Port GPIOA #include "rfm95.hpp" extern uint8_t LoRa_buff[RH_RF95_FIFO_SIZE]; extern SPI_HandleTypeDef hspi1; // This prevent name mangling for functions used in C/assembly files. extern "C" { void SysTick_Handler(void) { HAL_IncTick(); HAL_SYSTICK_IRQHandler(); } } void initGPIO() { __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_Config2; GPIO_Config2.Mode = GPIO_MODE_INPUT; GPIO_Config2.Pull = GPIO_PULLDOWN; GPIO_Config2.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_Config2.Pin = BTN_PIN; GPIO_InitTypeDef GPIO_Config; GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP; GPIO_Config.Pull = GPIO_NOPULL; GPIO_Config.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_Config.Pin = LED1_PIN | LED2_PIN; GPIO_InitTypeDef GPIO_ConfigSPI; GPIO_ConfigSPI.Mode = GPIO_MODE_OUTPUT_PP; // GPIO_ConfigSPI.Pull = GPIO_NOPULL; GPIO_ConfigSPI.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_ConfigSPI.Pin = LoRa_CS_Pin | LoRa_RESET_Pin; // bare metal init of led1: // volatile uint32_t* CRH = reinterpret_cast(0x40011000 + 0x04); //*CRH |= 0x3; //*CRH &= (~0xC); HAL_GPIO_Init(LED_PORT, &GPIO_Config); HAL_GPIO_Init(BTN_PORT, &GPIO_Config2); HAL_GPIO_Init(LoRa_CS_GPIO_Port, &GPIO_ConfigSPI); // HAL_GPIO_WritePin(LoRa_CS_GPIO_Port, LoRa_CS_Pin, GPIO_PIN_SET); // HAL_GPIO_WritePin(LoRa_RESET_GPIO_Port, LoRa_RESET_Pin, GPIO_PIN_SET); } extern "C" { #include } int main(void) { HAL_Init(); HAL_SYSTICK_Config(1); initGPIO(); if (!log::init()) { // toggle status led or something } log::set_loglevel(LogLevel::DEBUG); log::info("logging Initialized"); log::info("running PentaTrack v0.1.3"); if (!MX_SPI1_Init()) { // toggle status led or something } HAL_GPIO_WritePin(LoRa_CS_GPIO_Port, LoRa_CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LoRa_RESET_GPIO_Port, LoRa_RESET_Pin, GPIO_PIN_SET); HAL_Delay(10); log::debug("SPI1 Initialized."); log::debug("Initialization done."); char OP_Mode = 0x01; char buff = 0x7F & OP_Mode; char res = 0; HAL_GPIO_WritePin(LoRa_CS_GPIO_Port, LoRa_CS_Pin, GPIO_PIN_RESET); [[maybe_unused]] auto result = HAL_SPI_Transmit(&hspi1, (uint8_t *)&buff, 1, 100); HAL_SPI_Receive(&hspi1, (uint8_t *)&res, 1, 100); HAL_GPIO_WritePin(LoRa_CS_GPIO_Port, LoRa_CS_Pin, GPIO_PIN_SET); // RF95_Init(); int i = 0; while (1) { // RF95_setModeRx_Continuous(); HAL_GPIO_WritePin(LED_PORT, LED1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED_PORT, LED2_PIN, GPIO_PIN_RESET); // RF95_receive(LoRa_buff); HAL_Delay(500); HAL_GPIO_WritePin(LED_PORT, LED1_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(LED_PORT, LED2_PIN, GPIO_PIN_SET); HAL_Delay(500); // std::string_view msg{reinterpret_cast(LoRa_buff)}; // log::info("Received Message"); // log::debug("Received Message"); // log::debug(msg); // std::string_view foo{"Das ist ein test"}; // strcpy((char *)LoRa_buff, foo.data()); // RF95_send(LoRa_buff); } return 0; }