Issue SOLVED 
(Solution based on @tomtor’s LMIC-Arduino fork.)
The  LMIC-Arduino OTAA and ABP examples (ttn-otaa.ino and ttn-abp.ino) are now working with BSFrance-stm32 core with all three BSFrance LoRaM3-D boards:
- LoRaM3-D L151
- LoRaM3-D F103
- LoRaM3-D F303
How to apply the fix:
In LMIC-Arduino src\hal\hal.cpp
Replace:
static uint8_t irqlevel = 0;
void hal_disableIRQs () {
    noInterrupts();
    irqlevel++;
}
void hal_enableIRQs () {
    if(--irqlevel == 0) {
        interrupts();
        // Instead of using proper interrupts (which are a bit tricky
        // and/or not available on all pins on AVR), just poll the pin
        // values. Since os_runloop disables and re-enables interrupts,
        // putting this here makes sure we check at least once every
        // loop.
        //
        // As an additional bonus, this prevents the can of worms that
        // we would otherwise get for running SPI transfers inside ISRs
        hal_io_check();
    }
}
With:
#ifdef ARDUINO_ARCH_STM32
    // Fix for STM32 HAL based cores.
    // ARDUINO_ARCH_STM32 appears to be defined for these Arduino cores:
    // - Arduino_Core_STM32 (aka stm32duino)
    // - STM32GENERIC
    // - BSFrance-stm32
    // This fix solves an issue with STM32 HAL based Arduino cores where 
    // a call to os_init() hangs the MCU. The fix prevents LMIC-Arduino from 
    // disabling and re-enabling interrupts.
    // While the exact cause is not known, it is assumed that disabling interrupts 
    // may conflict with interrupts required for the STM32 HAL core.
    // (Possible side-effects on LMIC timing have not been checked.)
    void hal_disableIRQs () {
    }
    void hal_enableIRQs () {
        hal_io_check();
    }
    
#else
    static uint8_t irqlevel = 0;
    void hal_disableIRQs () {
        noInterrupts();
        irqlevel++;
   }
   void hal_enableIRQs () {
       if(--irqlevel == 0) {
           interrupts();
           // Instead of using proper interrupts (which are a bit tricky
           // and/or not available on all pins on AVR), just poll the pin
           // values. Since os_runloop disables and re-enables interrupts,
           // putting this here makes sure we check at least once every
           // loop.
           //
           // As an additional bonus, this prevents the can of worms that
           // we would otherwise get for running SPI transfers inside ISRs
           hal_io_check();
       }
   }
    
#endif