diff --git a/IOPins.h b/IOPins.h index 06c4f91..f3ea4ad 100644 --- a/IOPins.h +++ b/IOPins.h @@ -48,7 +48,7 @@ #if defined(STM32F4_NUCLEO_MORPHO_HEADER) #include "pins/pins_f4_nucleo_morpho.h" #elif defined(STM32F4_NUCLEO_ARDUINO_HEADER) - #include "pins/pins_f4_nucleo_morpho.h" + #include "pins/pins_f4_nucleo_arduino.h" #else #error "Either STM32F4_NUCLEO_MORPHO_HEADER or STM32F4_NUCLEO_ARDUINO_HEADER need to be defined" #endif @@ -59,6 +59,9 @@ #elif defined(STM32F4_DVM) #include "pins/pins_f4_stm32dvm_v3.h" +#elif defined(DRCC_DVM_NQF) + #include "pins/pins_f4_drcc_nqf.h" + #else #error "A valid board type macro need to be defined." diff --git a/IOSTM.cpp b/IOSTM.cpp index 64cbc75..20636a0 100644 --- a/IOSTM.cpp +++ b/IOSTM.cpp @@ -364,7 +364,9 @@ void CIO::setCOSInt(bool on) void CIO::setDStarInt(bool on) { +#if defined(MODE_LEDS) GPIO_WriteBit(PORT_DSTAR, PIN_DSTAR, on ? Bit_SET : Bit_RESET); +#endif #if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) GPIO_WriteBit(PORT_MDSTAR, PIN_MDSTAR, on ? Bit_SET : Bit_RESET); #endif @@ -372,7 +374,9 @@ void CIO::setDStarInt(bool on) void CIO::setDMRInt(bool on) { +#if defined(MODE_LEDS) GPIO_WriteBit(PORT_DMR, PIN_DMR, on ? Bit_SET : Bit_RESET); +#endif #if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) GPIO_WriteBit(PORT_MDMR, PIN_MDMR, on ? Bit_SET : Bit_RESET); #endif @@ -380,7 +384,9 @@ void CIO::setDMRInt(bool on) void CIO::setYSFInt(bool on) { +#if defined(MODE_LEDS) GPIO_WriteBit(PORT_YSF, PIN_YSF, on ? Bit_SET : Bit_RESET); +#endif #if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) GPIO_WriteBit(PORT_MYSF, PIN_MYSF, on ? Bit_SET : Bit_RESET); #endif @@ -388,7 +394,9 @@ void CIO::setYSFInt(bool on) void CIO::setP25Int(bool on) { +#if defined(MODE_LEDS) GPIO_WriteBit(PORT_P25, PIN_P25, on ? Bit_SET : Bit_RESET); +#endif #if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) GPIO_WriteBit(PORT_MP25, PIN_MP25, on ? Bit_SET : Bit_RESET); #endif @@ -396,16 +404,20 @@ void CIO::setP25Int(bool on) void CIO::setNXDNInt(bool on) { +#if defined(MODE_LEDS) #if defined(USE_ALTERNATE_NXDN_LEDS) GPIO_WriteBit(PORT_YSF, PIN_YSF, on ? Bit_SET : Bit_RESET); GPIO_WriteBit(PORT_P25, PIN_P25, on ? Bit_SET : Bit_RESET); -#if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) - GPIO_WriteBit(PORT_MYSF, PIN_MYSF, on ? Bit_SET : Bit_RESET); - GPIO_WriteBit(PORT_MP25, PIN_MP25, on ? Bit_SET : Bit_RESET); -#endif #else GPIO_WriteBit(PORT_NXDN, PIN_NXDN, on ? Bit_SET : Bit_RESET); +#endif +#endif + #if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) +#if defined(USE_ALTERNATE_NXDN_LEDS) + GPIO_WriteBit(PORT_MYSF, PIN_MYSF, on ? Bit_SET : Bit_RESET); + GPIO_WriteBit(PORT_MP25, PIN_MP25, on ? Bit_SET : Bit_RESET); +#else GPIO_WriteBit(PORT_MNXDN, PIN_MNXDN, on ? Bit_SET : Bit_RESET); #endif #endif @@ -413,16 +425,20 @@ void CIO::setNXDNInt(bool on) void CIO::setPOCSAGInt(bool on) { -#if defined(USE_ALTERNATE_POCSAG_LEDS) +#if defined(MODE_LEDS) +#if defined(USE_ALTERNATE_FM_LEDS) GPIO_WriteBit(PORT_DSTAR, PIN_DSTAR, on ? Bit_SET : Bit_RESET); GPIO_WriteBit(PORT_DMR, PIN_DMR, on ? Bit_SET : Bit_RESET); -#if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) - GPIO_WriteBit(PORT_MDSTAR, PIN_MDSTAR, on ? Bit_SET : Bit_RESET); - GPIO_WriteBit(PORT_MDMR, PIN_MDMR, on ? Bit_SET : Bit_RESET); -#endif #else GPIO_WriteBit(PORT_POCSAG, PIN_POCSAG, on ? Bit_SET : Bit_RESET); +#endif +#endif + #if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) +#if defined(USE_ALTERNATE_FM_LEDS) + GPIO_WriteBit(PORT_MDSTAR, PIN_MDSTAR, on ? Bit_SET : Bit_RESET); + GPIO_WriteBit(PORT_MDMR, PIN_MDMR, on ? Bit_SET : Bit_RESET); +#else GPIO_WriteBit(PORT_MPOCSAG, PIN_MPOCSAG, on ? Bit_SET : Bit_RESET); #endif #endif diff --git a/Makefile b/Makefile index a7e92d2..c53aa9e 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,7 @@ F7_LIB_PATH=./STM32F7XX_Lib # MCU external clock frequency (Hz) CLK_MMDVM_PI=12000000 CLK_NUCLEO=8000000 +CLK_12MHZ=12000000 # Directory Structure BINDIR=bin @@ -93,6 +94,8 @@ ifndef $(OSC) OSC=$(CLK_MMDVM_PI) else ifeq ($(MAKECMDGOALS),pi-f722) OSC=$(CLK_MMDVM_PI) + else ifeq ($(MAKECMDGOALS),drcc_nqf) + OSC=$(CLK_12MHZ) else OSC=$(CLK_NUCLEO) endif @@ -134,6 +137,9 @@ DEFS_RPT_HAT=-DUSE_HAL_DRIVER -DSTM32F722xx -DSTM32F7XX -DSTM32F722_RPT_HAT -DHS DEFS_DVM=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F446xx -DSTM32F4_DVM -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE # MMDVM_RPT_Hat BG4TGO, BG5HHP board: DEFS_RPT_HAT_TGO=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F40_41xxx -DSTM32F4_RPT_HAT_TGO -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE +# DRCC_DVM BG7NQF board: +DEFS_DRCC_DVM=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F446xx -DDRCC_DVM -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE + # Build compiler flags CFLAGS_F4=-c $(MCFLAGS_F4) $(INCLUDES_F4) @@ -152,7 +158,7 @@ CXXFLAGS=-Os -fno-exceptions -ffunction-sections -fdata-sections -fno-builtin -f LDFLAGS=-Os --specs=nano.specs # Build Rules -.PHONY: all release dis pi pi-f722 f4m nucleo f767 dvm clean +.PHONY: all release dis pi pi-f722 f4m nucleo f767 dvm drcc_nqf clean # Default target: Nucleo-64 F446RE board all: nucleo @@ -217,6 +223,12 @@ dvm: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_DVM) dvm: LDFLAGS+=$(LDFLAGS_F4) dvm: release_f4 +drcc_nqf: GitVersion.h +drcc_nqf: CFLAGS+=$(CFLAGS_F4) $(DEFS_DRCC_DVM) -DDRCC_DVM_NQF +drcc_nqf: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_DRCC_DVM) -DDRCC_DVM_NQF +drcc_nqf: LDFLAGS+=$(LDFLAGS_F4) +drcc_nqf: release_f4 + release_f4: $(BINDIR) release_f4: $(OBJDIR_F4) release_f4: $(BINDIR)/$(BINHEX_F4) @@ -365,3 +377,7 @@ else echo "#define GITVERSION \"0000000\"" > $@ endif endif + +flash_f4: + @echo "flashing firmware..." + st-flash write bin/$(BINBIN_F4) 0x8000000 diff --git a/SerialPort.cpp b/SerialPort.cpp index 711ba6e..5d0e5bb 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -95,7 +95,9 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U; #define TCXO "NO TCXO" #endif -#if defined(STM32F4_RPT_HAT_TGO) +#if defined(DRCC_DVM_NQF) +#define HW_TYPE "MMDVM DRCC_DVM_NQF" +#elif defined(STM32F4_RPT_HAT_TGO) #define HW_TYPE "MMDVM RPT_HAT_TGO" #else #define HW_TYPE "MMDVM" diff --git a/SerialSTM.cpp b/SerialSTM.cpp index 8b4ae52..192f5bb 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -50,7 +50,7 @@ extern "C" { } /* ************* USART1 ***************** */ -#if defined(STM32F4_PI) || defined(STM32F4_F4M) || defined(STM32F722_F7M) || defined(STM32F722_PI) || defined(STM32F722_RPT_HAT) || defined(STM32F4_DVM) || (defined(STM32F4_NUCLEO) && defined(STM32F4_NUCLEO_ARDUINO_HEADER)) +#if defined(STM32F4_PI) || defined(STM32F4_F4M) || defined(STM32F722_F7M) || defined(STM32F722_PI) || defined(STM32F722_RPT_HAT) || defined(STM32F4_DVM) || (defined(STM32F4_NUCLEO) && defined(STM32F4_NUCLEO_ARDUINO_HEADER)) || defined(DRCC_DVM) volatile uint8_t TXSerialfifo1[TX_SERIAL_FIFO_SIZE]; volatile uint8_t RXSerialfifo1[RX_SERIAL_FIFO_SIZE]; @@ -241,7 +241,7 @@ void WriteUSART1(const uint8_t* data, uint16_t length) #endif /* ************* USART2 ***************** */ -#if defined(STM32F4_NUCLEO) || defined(STM32F4_RPT_HAT_TGO) +#if defined(STM32F4_NUCLEO) || defined(STM32F4_RPT_HAT_TGO) || defined(DRCC_DVM) volatile uint8_t TXSerialfifo2[TX_SERIAL_FIFO_SIZE]; volatile uint8_t RXSerialfifo2[RX_SERIAL_FIFO_SIZE]; @@ -845,11 +845,15 @@ void CSerialPort::beginInt(uint8_t n, int speed) InitUSART1(speed); #elif defined(STM32F4_NUCLEO) || defined(STM32F4_RPT_HAT_TGO) InitUSART2(speed); + #elif defined(DRCC_DVM) + InitUSART1(speed); #endif break; case 3U: #if defined(STM32F4_NUCLEO) && defined(STM32F4_NUCLEO_ARDUINO_HEADER) InitUSART1(speed); + #elif defined(DRCC_DVM) + InitUSART2(speed); #else InitUART5(speed); #endif @@ -869,10 +873,14 @@ int CSerialPort::availableInt(uint8_t n) return AvailUSART1(); #elif defined(STM32F4_NUCLEO) || defined(STM32F4_RPT_HAT_TGO) return AvailUSART2(); + #elif defined(DRCC_DVM) + return AvailUSART1(); #endif case 3U: #if defined(STM32F4_NUCLEO) && defined(STM32F4_NUCLEO_ARDUINO_HEADER) return AvailUSART1(); + #elif defined(DRCC_DVM) + return AvailUSART2(); #else return AvailUART5(); #endif @@ -891,10 +899,14 @@ int CSerialPort::availableForWriteInt(uint8_t n) return AvailForWriteUSART1(); #elif defined(STM32F4_NUCLEO) || defined(STM32F4_RPT_HAT_TGO) return AvailForWriteUSART2(); + #elif defined(DRCC_DVM) + return AvailForWriteUSART1(); #endif case 3U: #if defined(STM32F4_NUCLEO) && defined(STM32F4_NUCLEO_ARDUINO_HEADER) return AvailForWriteUSART1(); + #elif defined(DRCC_DVM) + AvailForWriteUSART2(); #else return AvailForWriteUART5(); #endif @@ -913,10 +925,14 @@ uint8_t CSerialPort::readInt(uint8_t n) return ReadUSART1(); #elif defined(STM32F4_NUCLEO) || defined(STM32F4_RPT_HAT_TGO) return ReadUSART2(); + #elif defined(DRCC_DVM) + return ReadUSART1(); #endif case 3U: #if defined(STM32F4_NUCLEO) && defined(STM32F4_NUCLEO_ARDUINO_HEADER) return ReadUSART1(); + #elif defined(DRCC_DVM) + return ReadUSART2(); #else return ReadUART5(); #endif @@ -941,6 +957,10 @@ void CSerialPort::writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool WriteUSART2(data, length); if (flush) TXSerialFlush2(); + #elif defined(DRCC_DVM) + WriteUSART1(data, length); + if (flush) + TXSerialFlush1(); #endif break; case 3U: @@ -948,6 +968,10 @@ void CSerialPort::writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool WriteUSART1(data, length); if (flush) TXSerialFlush1(); + #elif defined(DRCC_DVM) + WriteUSART2(data, length); + if (flush) + TXSerialFlush2(); #else WriteUART5(data, length); if (flush)