Après quelques mois d'inactivité, j'ai repris le développement TinyGo sur STM32WLE5.
(pour les modules LoraE5 et Nucleo-wl55jc1 et Nucleo-wl55jc2)

Ma carte de développement est une  Nucleo-wl55jc2 (version US, Low-frequency band. RF frequency range from 433 to 510 MHz).

Dans cet article, je tenterai d'expliquer comment utiliser la carte avec TinyGO

STLINKv3 pour l'UART1

Le STLinkv3 (qui fait partie de la carte Nucleo) fournit :

  • Une interface de programmation/debug (stlink-v3)
  • Un un port série virtuel.

Le manuel nous indique comment router le port série virtuelle du STLinkv3 Sur l'UART1 du STM32WLE5.

Cela nécessite de changer quelques ponts de soudure, car ce n'est pas la configuration par défaut:

On sort donc son fer à souder et sa loupe, pour supprimer les ponts existants et ponter SB6/SB10:

Et on teste avec un petit bout de code uart.go

package main

import (
        "machine"
        "time"
)

func main() {

        for i := 0; i < 10; i++ {
                println("Hello TinyGo")
                time.Sleep(time.Second * time.Duration(i))
        }
}

... Qu'il suffit de flasher avec la commande "tinygo flash"

$ cd ~/tinygo
$ tinygo flash -x -target=nucleo-wl55jc -programmer=stlink uart.go
...

... et vérifier avec un terminal série (picocom) ...

$ picocom /dev/ttyACM1 -b 115200
Terminal ready
Hello TinyGo
Hello TinyGo
Hello TinyGo
Hello TinyGo
Hello TinyGo
Hello TinyGo
....

C'est OK !

Vérifier ses clocks

Un mauvais réglage des horloges (clocks) principales et secondaires peut causer de gros problèmes difficiles a degbugger ( dysfonctionnements des timers, uarts ...)

Il être donc très utile de vérifier les signaux des horloges, avec la fonctionnalité de Clock Out disponible sur les STM32.

Voilà comment activer le "clock out" de la clock 'SYSCLK' (avec diviseur de 16)  sur la sortie PA8:

println("Enabling MCO on PA8 (SYSCLK/16)")
                                    machine.PA8.Configure(machine.PinConfig{Mode: machine.PinModeMCO})
machine.PA8.SetAltFunc(0x0)
                                    stm32.RCC.CFGR.ReplaceBits(stm32.RCC_CFGR_MCOSEL_SYSCLK, stm32.RCC_CFGR_MCOSEL_Msk, stm32.RCC_CFGR_MCOSEL_Pos)
                                    stm32.RCC.CFGR.ReplaceBits(stm32.RCC_CFGR_MCOPRE_Div16, stm32.RCC_CFGR_MCOPRE_Msk, stm32.RCC_CFGR_MCOPRE_Pos)

Il suffit de se reporter au manuel de référence pour changer l'origine de la clock et le diviseur:

L'analyse du signal sur la PIN  PA8 montre  un signal de 3Mhz:

En prenant en compte le diviseur (16), on peut calculer la fréquence originale du SYSCLK = 3Mhz x 16 = 48Mhz

... C'est bien ce qui était attendu pour mon montage.

Liens utiles

https://www.st.com/resource/en/user_manual/um2592-stm32wl-nucleo64-board-mb1389-stmicroelectronics.pdf