| I. Reprendre là où nous nous sommes arrêtés Dans l'article précédent , "Zigbee Journey (I) : The Beginning", nous avons brièvement présenté Zigbee et son environnement de développement, OK, maintenant que les outils sont complets, une question se pose : comment utiliser le logiciel et le matériel pour écrire un programme qui peut s'exécuter ? Cet article est essentiellement destiné à répondre à la question ci-dessus : "clignotement de la lumière LED" comme exemple d'une petite expérience, comment configurer IAR pour le développement de programmes basés sur le CC2430, comment utiliser IAR pour écrire et déboguer le programme en ligne. Configuration de l'IAR IAR est une plateforme de développement embarquée puissante qui supporte de nombreux types de puces, et chaque projet dans IAR peut avoir sa propre configuration, y compris le type de périphérique, le tas/la pile, le linker, le débogueur, etc. (1) Nouvel espace de travail et nouveau projet Tout d'abord, créez un nouveau dossier ledtest, ouvrez IAR, sélectionnez le menu principal File -> New -> Workspace pour créer un nouvel espace de travail. Sélectionnez Project -> Create New Project -> Empty Project, cliquez sur OK, et enregistrez le fichier de projet dans le dossier ledtest, nommé : ledtest.ewp (comme ci-dessous). (2) Configuration des options générales Paramètre cible : Appareil : CC2430 ; Code Mode : Near ; Modèle de données : Large ; Convention d'appel : pile XDATA reetrant
Réglage du pointeur de données : Nombre de DPTR : 1
Paramètres de la pile et du tas : Taille de la pile XDATA : 0x1FF (3) Paramètres de l'éditeur de liens Fichier de commande de l'éditeur de liens : select lnk51ew_cc2430.xcl
(4) Paramètres du débogueur : Driver : Texas Instruments (cette expérience pour le débogage de la machine réelle, donc choisir TI ; si d'autres procédures pour utiliser l'émulateur IAR, optionnel Simulator) Device Fichier de description : CC2430.ddf
À ce stade, la configuration IAR pour cette expérience est essentiellement terminée, la suite à introduire sa mise en œuvre de codage. Troisièmement, la préparation du code de programme(1) Nouveau fichier de programme Choisissez Fichier->Nouveau->Fichier, créez un nouveau fichier main.c. (2) Introduire les fichiers d'en-tête Les programmes basés sur le CC2430 doivent inclure une référence à ioCC2430.h, qui définit l'adresse des différents types de registres de fonctions spéciales (SFR) du CC2430. #include //Introduire le fichier d'en-tête correspondant au CC2430 (contient la définition de chaque SFR) Ce fichier est intégré dans IAR (similaire à stdio.h), la souris sur cette ligne de code, clic droit, sélectionner OPen "ioCC2430.h", vous pouvez voir le contenu complet de ce fichier d'en-tête. (3) Définir les broches de la LED Vérifiez le schéma de circuit de la carte de développement, comme indiqué ci-dessous :
On sait que les led1~4 sont contrôlées par les pins P1_0~P4_0 respectivement, donc on peut définir led1, led2, led3, led4 comme les pins P1_0, P2_0, P3_0, P4_0 respectivement. #define led1 P1_0 //define LED1 comme contrôle du port P1_0 #define led2 P1_1
//define led2 comme P1_1 contrôle du port #define led3 P1_2 //define led3 comme P1_2 contrôle du port #define led4 P1_3 //définir led4 pour le contrôle du port P1_3 (4) Fonction principale Commençons maintenant à écrire la fonction principale. Tout d'abord, avant d'utiliser les ports P1.0~P1.4, vous devez configurer leur mode de fonctionnement et leur direction d'entrée/sortie, ce qui implique deux SFR : P1SEL, P1DIR. P1SEL = 0x00 ; //Set P1 comme un port E/S ordinaire P1DIR |= 0x0F ; & nbsp ; //Set P1.0 P1.1 P1.2 P1.3 comme sorties Astuces Zigbee Le CC2430 dispose de P0_0 ~ P0_7, P1_0~P1_7, P2_0~P2_7, soit un total de 21 ports d'E/S. Ils peuvent être utilisés comme E/S numériques à usage général ou pour connecter des E/S périphériques telles que ADC, timer/compteur ou USART. Il existe trois types de registres dans le SFR du CC2430 qui peuvent être utilisés pour configurer ces ports d'E/S : ①PxSEL (x est 0/1/2) : sélection de la fonction du port P0/P1/P2 PxSEL (x est 0/1/2) : sélection de la fonction du port P0/P1/P2 nbsp;0 : E/S numérique à usage général, 1 : E/S périphérique, la valeur par défaut est 0 ② PxDIR (x est 0/1/2) : Direction du port P0/P1/P2 & nbsp;0 : entrée, 1 : sortie, la valeur par défaut est 0 ③PxINP (x est 0/1) : Mode d'entrée du port P0/P1 nbsp;0 : montée, 1 : sortie, valeur par défaut 0 nbsp;0 : pull-up/down, 1 : tri-state, par défaut 0 La configuration est requise lors de l'utilisation du port IO, si elle est par défaut, alors prenez la valeur par défaut du système. Initialiser ensuite les 4 LEDs, en les mettant toutes à l'état éteint :
led1 = 1 ; led2 = 1 ; led3 = 1 ; led4 = 1. Enfin, écrivez le code de l'effet de clignotement des LEDs :
led1 = 0 ; //led1 clignote Delay(10) ; led1 = 1 ; Delay(10) ; led2
= 0 ; //led2 clignote Délai(10) ; led2 = 1 ; Délai(10) ; led3 = 0 ; //led3 clignote Délai(10) ; /
//clignotement de led3 Délai(10) ; led3 = 1 ; Délai(10) ; led4 = 0 ; //clignotement de led4 &
nbsp ; Délai(10) ; led4 = 1 ; Délai(10) ;
Ceci implique une sous-fonction Delay(unsigned char n) :
v oid Delay(unsigned char n) { unsigned char i ; unsigned int j ; for(i = 0 ; i < n ; i++)  
; for(j = 1 ; j ; j++) ; } (5) Aperçu du code Combinez l'ensemble du code ci-dessus comme indiqué ci-dessous : //Introduire les fichiers d'en-tête #include //introduire le fichier d'en-tête correspondant au CC2430 (y compris la définition de chaque SFR)
//Définir les broches de la LED #define led1 P1_0 //define LED1 pour le contrôle du port P1_0 #define led2 P1_1 //define LED2 pour le contrôle du port P1_1 #define led3 P1_2 //define LED3 pour le contrôle du port P1_2 #define led4 P1_3 //define LED4 pour le contrôle du port P1_3 //sous-routine Delay void Delay (unsigned char n) { unsigned char i. unsigned int j. for (i = 0; i < n ; i++) for (j = 1; j ; j++) ; }
void main (void ) { P1SEL = 0x00; //Set P1 comme port E/S normal P1DIR |= 0x0F; //Set P1.0 P1.1 P1.2 P1.3 comme sorties led1 = 1; //initialisation, les 4 leds sont éteintes led2 = 1; //initialisation, les 4 diodes sont éteintes led3 = 1; led4 = 1; //initialisation, les 4 diodes sont éteintes led2 = 1 ; led3 = 1 ; led4 = 1; //initialiser, les 4 lumières led éteintes while(1 ) //start cycle { led1 = 0; //led1 clignote Delay (10 ) ; //Delay (10 ) ; //Delay (10 ) ; //Delay (10 ) delay(10) ; led1 = 1; //led1 clignote Délai (10 ). led2 = 0; //led2 clignote Delay (10 ) ; led2 = 1 ; //led2 clignote led2 = 1; //led2 clignote Délai (10 ). led3 = 0; //led3 clignote Delay (10 ) ; led3 = 1 ; //led3 clignote led3 = 1; //led3 clignote Délai (10 ). led4 = 0; //led4 clignote Delay (10 ) ; led4 = 1 ; //led4 clignote led4 = 1; //led4 clignote Délai (10 ) ; //Délai (10 ) } }
OK, le code de cette petite expérience est écrit, ce n'est pas très simple ah, hehe~ ! Quatrièmement, compilation et débogage Sélectionnez Project -> Make, compilez le code, si c'est le cas, la sortie suivante apparaîtra :
c
Connectez le périphérique Zigbee dans l'ordre de la carte de développement Zigbee → Débogueur → Port USB du PC , puis sélectionnez Projet -> Déboguer, le programme sera téléchargé dans la carte de développement automatiquement. Sélectionnez ensuite Debug -> Go pour démarrer le programme, et vous verrez les 4 LED clignoter en séquence ! Bien qu'il s'agisse d'une petite expérience simple, mais lorsque j'y suis parvenu, je suis un peu excité ! V. Conclusion Dans cet article, "l'expérience de clignotement de la lumière LED" comme la base, respectivement, de la configuration de l'IAR, la préparation du code de programme, ainsi que la compilation et le processus de débogage introduit l'ensemble du processus de mise en œuvre. Le prochain article sera consacré à la compréhension du processus de base des procédures de développement basées sur l'introduction de plusieurs expériences de développement du CC2430 impliquant des minuteries, des communications série, la conversion AD, la mise en veille du système et le chien de garde , etc. |