128 lines
3.4 KiB
C++
128 lines
3.4 KiB
C++
#include <stm32f1xx_hal.h>
|
|
|
|
#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<uint32_t*>(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 <stdio.h>
|
|
}
|
|
|
|
int main(void) {
|
|
HAL_Init();
|
|
HAL_SYSTICK_Config(1);
|
|
initGPIO();
|
|
|
|
if (!log::init<uart_logger>()) {
|
|
// 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<char *>(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;
|
|
}
|