CH32V307 : prise en main

par Vincent DEFERT, dernière mise à jour le 2025-05-24

Introduction

Votre parcours avec le CH32V003 vous a appris énormément de choses, que vous aurez l'occasion de réinvestir dans ce cours après une brève présentation. L'objectif est ici de vous apprendre à trouver vos marques avec un micro-contrôleur différent.

La carte

Je vous invite tout d'abord à étudier le schéma de notre carte de développement. Vous remarquerez qu'elle comporte :

  • Une EEPROM I2C FT24C32A

  • Une mémoire flash SPI W25Q32JV

  • 2 ports USB

  • Un port Ethernet 10 Mb/s

  • Un réceptacle pour une carte MicroSD

  • Une LED rouge (sur PA15) et une LED bleue (sur PB4)

  • Un bouton poussoir (sur PB3)

Notez qu'un condensateur de 100nF est monté en parallèle avec le bouton poussoir pour éliminer les rebonds. Ensuite, le poussoir est relié à PB3 par une résistance de 5.1kΩ dont le rôle est de limiter l'appel de courant dans le condensateur et d'éviter de relier directement PB3 à la masse si vous appuyez sur le bouton. Grâce à cette précaution, PB3 peut être utilisée sans problème en sortie si vous n'avez pas besoin du bouton. Notez également que pour pouvoir utiliser le bouton poussoir, vous devrez configurer PB3 en entrée avec résistance pull-up, afin que le condensateur puisse se charger. Si vous oubliez, PB3 verra toujours un niveau logique bas quel que soit l'état du bouton.

Vous remarquerez enfin que sur le pin header P4, vous devez désormais connecter 2 signaux à votre WCH-LinkE, SWDIO et SWCLK, alors que seul SWDIO était nécessaire avec le CH32V003. En effet, le CH32V307 étant plus puissant, il a aussi besoin de pouvoir mieux communiquer avec votre PC.

Bonus 1 : pour vous faciliter la vie, j'ai également réalisé un grand tableau (tableur et PDF) listant les différentes fonctions de chaque ligne de GPIO ainsi que le dispositif auquel elle est relié (EEPROM, WCH-LinkE, etc), le cas échéant.

Bonus 2 : pendant que j'y étais, j'ai aussi fait un schéma (tableur et PDF) indiquant la fonction de chacune des broches des pin headers de la carte de développement. Le terme anglais est pinout et sert aussi à désigner la description du brochage des composants. Ce document vous facilitera le câblage en vous évitant de devoir retourner sans cesse la carte et d'utiliser une loupe pour déchiffrer la sérigraphie.

Blinky

Très classiquement, nous allons commencer par faire clignoter les 2 LED de notre carte. Je vous laisse créer un nouveau projet et vérifier la configuration de l'horloge dans system_ch32v30x.c. Ensuite, je vous propose le code suivant pour faire clignoter les LED :

#include <ch32v30x.h>
#include <debug.h>

int main() {
	SystemCoreClockUpdate();
	Delay_Init();

	GPIO_InitTypeDef gpioInit = { 0 };
	gpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
	gpioInit.GPIO_Speed = GPIO_Speed_50MHz;

	// Configuration de la ligne de GPIO de la LED rouge.
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

	gpioInit.GPIO_Pin = GPIO_Pin_15;

	GPIO_Init(GPIOA, &gpioInit);
	GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);

	// Configuration de la ligne de GPIO de la LED bleue.
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

	gpioInit.GPIO_Pin = GPIO_Pin_4;

	GPIO_Init(GPIOB, &gpioInit);
	GPIO_WriteBit(GPIOB, GPIO_Pin_4, Bit_RESET);

	while (1) {
		Delay_Ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, !GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_15));
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, !GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_4));
	}
}

Je souhaite attirer votre attention sur le fait que ce code, aux noms des ports de GPIO près, est identique à ce que vous auriez écrit pour le CH32V003. Lorsque WCH a conçu ses micro-contrôleurs, il a veillé à garder au maximum la même organisation interne au sein d'une même famille. C'est ainsi que si vous comparez le fichier ch32v00x_rcc.h pour le CH32V003 avec le fichier ch32v30x_rcc.h pour le CH32V307, vous remarquerez que les mêmes périphériques sont connectés aux mêmes bus internes, par exemple APB2 pour les différents ports de GPIO, TIM1 et ADC1, ou APB1 pour TIM2, WWDG et I2C1. Cela rend possible la réutilisation directe de code d'un micro-contrôleur à l'autre à l'intérieur d'une même famille, ici la famille CH32V.

Exercices

Pour vous familiariser avec le CH32V307, je vous invite à transposer ce que nous avons fait aux cours CH32V003 : I2C et EEPROM et CH32V003 : Protocole SPI et mémoire flash à la FT24C32A et la W25Q32JV qui équipent notre nouvelle carte de développement.

Vous pouvez également transposer ce que nous avons fait dans le cours CH32V003 : mesure de durées en utilisant le bouton poussoir de la carte.


Copyright (c) 2025 Vincent DEFERT - Tous droits réservés