|
|
|
---|---|---|
Um den CH32V003 programmieren zu können sind dem Archiv (download hier) einige Sourcedateien beigefügt, die ein Kennenlernen deutlich erleichtern, diese werden hier beschrieben. Die wichtigste Quelldatei besteht hierbei lediglich aus einem Header: Starten sie Geany (wahlweise auf der Konsole auch CIDE) und laden sie dort das Programm blink.c im Ordner blink. Drücken sie die Taste F8 oder klicken wahlweise auf das Icon zum Compilieren eines Programms. Nach Beendigung des Compiler- Linkergangs betätigen sie die Taste F9 oder wahlweise ein Klicken auf das Icon zum Flashen. Die LED sollte nun blinken ! Viel Spaß beim Ausprobieren der anderen Beispielprogramme und beim Experimentieren mit CH32V003
Der Autor ist ein großer Freund davon, Hardwaredeklarationen und -definitionen in einem Main-Programm zu "verstecken", damit die Funktion eines Hauptprogramms klarer und strukturiert bleibt. Eine der wichtigsten Funktionen im Umgang mit Mikrocontrollern ist die Möglichkeit, frei programmierbare Anschlußpins, die als sogenannte GPIO (general purpose input output) bezeichnet werden, schalten zu können. Je komplexer ein Mikrocontroller ist, umso größer sind in aller Regel Funktionsaufrufe diesen zum Einen zu initialisieren und zum Anderen einen solchen Pin anzusprechen um ihn ein bzw. aus zu schalten. Aus diesem Grund existiert für den CH32V003 (und beim Autor für jeden anderen Mikrocontroller auch) eine Headerdatei, die einen GPIO einheitlich ansprechen kann und hier alle verfügbaren GPIO's nach dem gleichen Schema funktionieren. Für das Initialisieren eines GPIO's existieren Makros für die wichtigsten Betriebsarten:
PD4_output_init();als Ausgang initialisiert werden. PC3_input_init();initialisiert den Anschluss PC3 als einen Eingang mit angeschlossenem internen PullUp- oder PullDown-Widerstand. Beispielprogramm für die Benutzung von GPIO's #include "ch32fun.h" #include "ch32v003_gpio.h" #define led_init() PD4_output_init() #define led_set() PD4_set() #define led_clr() PD4_clr() #define key_init() PC4_input_init() #define key_pullup() PC4_set() #define is_key() (is_PC4()) int main(void) { SystemInit(); led_init(); key_pullup(); key_init(); while(1) { if (is_key()) { led_set(); } else { led_clr(); } } }In diesem Beispielprogramm wird angenommen, dass an PD4 eine Leuchtdiode gegen GND und ein Taster ebenfalls gegen GND geschaltet ist. Das Makro key_pullup() schaltet durch das Setzen des Portpins bei Funktion als Eingang einen internen PullUp-Widerstand gegen +Vdd. Hierdurch wird beim Lesen des Tastenpins an PC4 bei einem unbetätigten Taster eine logische 1 zurück geliefert und die LED leuchtet bei unbetätigtem Taster (bei betätigtem Taster wird eine 0 zurück geliefert und die LED ist aus). Wollte man, dass die LED bei betätigtem Taster leuchtet, müßte die Deklaration für is_key lauten (man beachte die Invertierung durch das "!"): #define is_key() (!is_PC4()) |