STM32 Project Consulting

Pages

Getting Started with STM32F4 Discovery Board



ST Micro Electronics promotion boards popularly known as Discovery boards are available in variety of versions with each version enables you exploring a different member to ST’s Micro controller Family. STM32F4 Discovery board is one of those boards which let you explore the features and methods of STM32F4xx series of Controllers.





Features of STM32F4  Discovery Board

  • STM32F407VGT6 microcontroller featuring 1 MB of Flash memory, 192 KB of RAM in an LQFP100 package
  • On-board ST-LINK/V2 with selection mode switch to use the kit as a standalone ST-LINK/V2 (with SWD connector for programming and debugging)
  • Board power supply: through USB bus or from an external 5V supply voltage
  • External application power supply: 3V and 5V
  • LIS302DL, ST MEMS motion sensor, 3-axis digital output accelerometer
  • MP45DT02, ST MEMS audio sensor, omnidirectional digital microphone
  • Eight LEDs:
    – LD1 (red/green) for USB communication
    – LD2 (red) for 3.3V power on
    – Four user LEDs, LD3 (orange), LD4 (green), LD5 (red) and LD6 (blue)
    – 2 USB OTG LEDs LD7 (green) VBus and LD8 (red) over-current
  • Two pushbuttons (user and reset)
  • USB OTG with micro-AB connector
  • Extension header for LQFP100 I/Os for quick connection to prototyping board and easy
    probing


Understanding Development 

he board comes mounted with STM32F407VG Microcontroller chip on it, with a huge 100 Pin package. Along with Micro controller at the heart of the system, this board has some interesting peripheral to work with.
STM32F4xx Series of MCU are based on ARM Cortex M4 core, To work with cores like this, you need to have some third party libraries, that is the only way to utilize its full features. Simple reason behind this is that, these cores are feature rich and many different vendors uses these cores in their devices, so to achieve a common standard some Hardware Abstraction layers are needed. Like in this case we will be using CMSIS Library where CMSIS stands for Cortex Microcontroller Software Interface Standard.




he ARM® Cortex™ Microcontroller Software Interface Standard (CMSIS) is a vendor-independent hardware abstraction layer for the Cortex-M processor series. The CMSIS enables consistent and simple software interfaces to the processor and the peripherals, simplifying software re-use, reducing the learning curve for new microcontroller developers and reducing the time to market for new devices.

So, as it is clear CMSIS is standard HAL for all devices using ARM CORTEX as CPU core. CMSIS helps you utilize core features like DSP co-processor, Floating Point Unit etc in an easier way. So CMSIS is for CORE Features, Now lets discuss things outside the CPU core, Each vendor (ST in this case) uses CORTEX core and makes their own ARM based devices by adding some additional features/ peripherals around core. For example almost all vendors add peripherals like USART, ADC, I2C, SPI, CAN, Timers etc. These peripherals too need drivers or Hardware Abstraction Layer, I am not saying that it is impossible to write Drivers for specific peripheral inside MCU, but it consumes your development time. So in order to simplify the development process specific vendors (ST in our case) provide some peripheral driver library. ST Micro Electronics has provided a rich set of peripheral driver firmwares, so that you can quickly move onto applications without worrying about each bit of register level details.
So, from above discussion it is clear that we are going to use these two libraries…
  1. CMSIS (Cortex Microcontroller Software Interface Standard)
  2. STM32F4 Firmware Library / Standard Peripheral Drivers


Application Development

Now, having all third party (CMSIS) / vendor specific (ST Micro) software library support with us, Lets get right onto application development.

Downloads :
1- Download the STM32F4 Firmware Library From STMicroelectronis site .
2-  STM32F4 Discovery Board Reference Manual + Datasheet
3- For user : The STM32F4 User Manual

Required Software : 

1- IDE to developp application on STM32F4 like :
                                                                                     * IAR Embedded WorkBench
                                                                                      * Keil µVision
                                                                                      * Atollic TrueStudio
2- Debugger (That IDE like IAR Embedde WorkBench Debug Application on Board )
3- ST Link  Software (it included on Board )

Understanding STM32F4 Firmware Library :

I hope, you have downloaded the FW library from the Link given above, Extract it somewhere in your computer. You will find directory organization something like shown below…



Libraries folder contains CMSIS, STM32 USB Device Library, STM32 USB Host Library, STM32 USB OTG Driver, STM32F4xx _StdPeriph_Driver. Here CMSIS is the library dealing with core specific features and other libraries deal with STM32 family’s specific peripheral feature.
Project folder contains example projects for some of the peripherals of MCU. Each example project is configured for 4 different development platforms like Keil MDK, IAR EW etc. WE are going to use Keil MDK. These example project are greatest help for any newbie, so read some of these attentively, we are going to analyse the standard IO_Toggle example here in this post itself.
Utilities folder has some codes specific to STM32F4 Discovery board like LED’s, Button’s macro definitions. Most of it is very easy to understand just give it a try.

Lets Analyse our First application on STM32F4 Discovery Board :

Best way to make an initial understanding of the working of STM32F4xx is to mess around with the example projects provided by ST as a board support package. Go to the folder where you extracted the Firmware package. Now move inside Project->Peripheral_Examples->IO_Toggle. Open readme file and read about the purpose of this example project. readme file gives you a great deal of details about organization of any project. Now open up the main.c file, You should see the following C code in it.


#include "stm32f4_discovery.h"

GPIO_InitTypeDef  GPIO_InitStructure;

void Delay(__IO uint32_t nCount);
int main(void)
{

  /* GPIOD Periph clock enable */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

  /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  while (1)
  {
    /* PD12 to be toggled */
    GPIO_SetBits(GPIOD, GPIO_Pin_12);

    /* Insert delay */
    Delay(0x3FFFFF);

    /* PD13 to be toggled */
    GPIO_SetBits(GPIOD, GPIO_Pin_13);

    /* Insert delay */
    Delay(0x3FFFFF);

    /* PD14 to be toggled */
    GPIO_SetBits(GPIOD, GPIO_Pin_14);

    /* Insert delay */
    Delay(0x3FFFFF);

    /* PD15 to be toggled */
    GPIO_SetBits(GPIOD, GPIO_Pin_15);

    /* Insert delay */
    Delay(0x7FFFFF);

    GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

    /* Insert delay */
    Delay(0xFFFFFF);
  }
}

void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
  }
}
 
 
Above example program toggles each of 4 On board LEDs one by one and the interval between toggle sequence is determined by Delay() function. Let us try to understand how things go around in the above code.
Line 1 : Includes “stm32f4_discovery.h” file which defines the LED and Button connections for Discovery Board, this files has various STM32F4 Discovery board specific Macro definitions. You can find this file inside ‘Utilities\STM32F4-Discovery’.
Line 3:  GPIO_InitTypeDef GPIO_InitStructure; This is something interesting, ST firmware library uses lots of these kind of structures, in fact for every peripheral of microcontroller, you will find one such structure definition. The simple reason behind such structures is that each peripheral has a set of parameters, which programmer has to configure in order to achieve proper working of that peripheral. So instead of configuring each of the registers/parameter individually, Its better to make a structure of all parameters and whenever you need to configure that peripheral just declare an instance of that structure and assign proper values to each of the parameter as per your need.
Lets look what’s there inside GPIO_InitTypeDef…

 
 
typedef struct
{
  uint32_t GPIO_Pin;              /* Specifies the GPIO pins to be configured.
                                       This parameter can be any value of @ref GPIO_pins_define */

  GPIOMode_TypeDef GPIO_Mode;     /* Specifies the operating mode for the selected pins.
                                       This parameter can be a value of @ref GPIOMode_TypeDef */

  GPIOSpeed_TypeDef GPIO_Speed;   /* Specifies the speed for the selected pins.
                                       This parameter can be a value of @ref GPIOSpeed_TypeDef */

  GPIOOType_TypeDef GPIO_OType;   /* Specifies the operating output type for the selected pins.
                                       This parameter can be a value of @ref GPIOOType_TypeDef */

  GPIOPuPd_TypeDef GPIO_PuPd;     /* Specifies the operating Pull-up/Pull down for the selected pins.
                                       This parameter can be a value of @ref GPIOPuPd_TypeDef */
}GPIO_InitTypeDef;
 
 
 
As you can see, Structure for GPIO_InitTypeDef has properties like Pin number in a PORT, its MODE (Input/Output), Speed, Output Type (Open Drain etc.), PULL UP/DOWN configuration.
Line 13-17 : You initialize the GPIO properties as per your application requirements. Here we initialize Pin 12, 13, 14 and 15 of GPIOD as output so that we can toggle the LEDs attached to them.
Line 10: In STM32F4xx you need to initialize the clock to each of the peripheral before using that peripheral. That can be done using RCC (Reset and Clock Control). STM32F4xx has two kind of buses, AHB (Advance High Performance Bus) and APB (Advanced Peripheral Bus). Some of the peripherals are connected to AHB (Like GPIO) and some are connected to  APB (like I2C). As we are using GPIO here we have used RCC function as “RCC_AHB1PeriphClockCmd”.
Rest of the code is pretty much self explanatory, If you feel any difficulty understanding the amount of abstraction used here, please leave a comment below.

STM32F4 Discovery USART example

Upon request I’m posting this USART example code for the STM32F4 which initializes USART2 and constantly sends the character ‘h’.






#include <stm32f4xx.h>
#include <stm32f4xx_usart.h>

void init_usart(void){

 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;

 /* enable peripheral clock for USART2 */
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);


 /* GPIOA clock enable */
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

 /* GPIOA Configuration:  USART2 TX on PA2 */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

 /* Connect USART2 pins to AF2 */
 // TX = PA2
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);

 USART_InitStructure.USART_BaudRate = 9600;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
 USART_InitStructure.USART_StopBits = USART_StopBits_1;
 USART_InitStructure.USART_Parity = USART_Parity_No;
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
 USART_InitStructure.USART_Mode = USART_Mode_Tx;
 USART_Init(USART2, &USART_InitStructure);

 USART_Cmd(USART2, ENABLE); // enable USART2

}

void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
  }
}

int main(void){

 init_usart();

 uart_puts("Init complete!");

 while(1){
  USART_SendData(USART2, 'h'); // defined in stm32f4xx_usart.h
  Delay(0x3FFFFF);
 }

}
 
 
I hope that is helpful . 
 

UDP between STM32-F4 Discovery boards




[The Backwoods Engineer] tested out a new accessory kit for the STM32-F4 Discovery board. The image above shows two boards communicating with the UDP protocol. Notice the extra PCB into which each Discovery board has been plugged. This is a third-party add-on which adds Ethernet, RS-232, SD card slot, and a connector for LCD or Camera. We’ve had one of these F4 Discovery boards on hand for a while and haven’t figured out a good way to connect external hardware to the huge dual pin-headers. This doesn’t solve the problem — the base board also includes dual headers to break-out all the pins — but having Ethernet, serial, and SD certainly reduces the need to add all that much more. The other drawback to the hardware is that the sample firmware is targeted at the IAR Embedded Workbench which is neither free, nor in the realm of affordable for hobbyists.

The NIC used on the baseboard has auto-crossover capabilities so the boards were connected using a regular Cat6 patch cable. This example has the boards constantly sending UDP packets with the module on the right reporting status information to a terminal via the serial connection.


STM32F4 Connecter à un afficheur LCD 2x16





   Afficheur LCD 2x16 :

            



Les 16×2 usage général ou 16×1 caractères LCD sont très faciles à s’interfacer avec n’importe quel microcontrôleur, et ceux-ci ne sont pas vraiment très cher et abondamment disponibles dans le monde entier. Une fois que vous apprendre à interfacer, il sera le périphérique de sortie la plus simple et très fiable utilisée que par vous!
De plus, pour le projet de micro-contrôleur basé, non pas à chaque fois une débogueur peut être utilisé. Tous les affichages LCD utilisent le même, ou l’une quelconque de la CI sur la base de l’architecture introduite par Hitachi.
Ce composant est spécialement fabriqué pour être utilisé avec les microcontrôleurs, ce qui signifie qu’il ne peut être activée par des circuits CI standard. Il est utilisé pour afficher des messages différents sur un écran à cristaux liquides miniature. Le modèle décrit ici est pour son faible prix et de grandes capacités les plus fréquemment utilisés dans la pratique. Il est basé sur le microcontrôleur HD44780 (Hitachi) et peut afficher des messages sur deux lignes de 16 caractères chacune. Il permet d’afficher toutes les lettres de l’alphabet, les lettres grecques, des signes de ponctuation, des symboles mathématiques, etc Il est également possible d’afficher des symboles constitués par l’utilisateur. Autres fonctions utiles comprennent déplacement automatique des messages (gauche et droite), l’apparence du curseur, rétro-éclairage LED, etc

Configuration des broches(pin)



LCD Memoire

Affichage à cristaux liquides contient trois blocs de mémoire:
DDRAM Display Data RAM;
CGRAM Générateur de caractères RAM.
CGROM générateur de caractères ROM.

DDRAM Memoire


Mémoire DDRAM est utilisé pour stocker des caractères à afficher. La taille de cette mémoire est capable de stocker 80 caractères. Des emplacements de mémoire sont directement reliés à des caractères sur l’affichage.
Tout fonctionne très simplement: il suffit de configurer l’affichage pour incrémenter automatiquement les adresses (décalage à droite) et définir l’adresse de départ pour le message qui sera affiché (par exemple 00 hex).
Par la suite, tous les caractères envoyés par les lignes D0-D7 sera affiché dans le format de message que nous sommes habitués à de gauche à droite. Dans ce cas, l’affichage commence à partir du premier champ de la première ligne parce que l’adresse initiale est 00 hex. Si plus de 16 caractères sont envoyés, puis chacun d’entre eux sera mémorisé, mais seuls les seize premiers caractères seront visibles. Pour afficher le reste d’entre eux, la commande shift doit être utilisé. Pratiquement, tout se passe comme si l’écran LCD est une fenêtre qui se déplace de gauche à droite sur des emplacements de mémoire contenant des caractères différents. En réalité, c’est la façon dont l’effet de décaler le message sur l’écran a été créé.
Si le curseur est active, il apparaît à l’emplacement alors adressé. En d’autres termes, quand un caractère apparaît à la position du curseur, il se déplace automatiquement vers le prochain emplacement adressé.
Il s’agit d’une sorte de mémoire RAM afin que les données peuvent être écrites et lues de lui, mais son contenu est irrémédiablement perdu lorsque l’alimentation est coupée.

CGROM Memoire

CGROM mémoire contient une carte de caractère standard avec tous les caractères qui peuvent être affichés sur l’écran. Chaque caractère est affecté à un emplacement mémoire:

Les adresses de mémoire CGROM correspondent aux caractères de l’ASCII. Si le programme en cours d’exécution se heurte à «P caractère d’envoi au port ‘une commande alors la valeur binaire 0101 0000 apparaît sur ​​le port. Cette valeur est l’équivalent ASCII à l’P. caractère Il est ensuite écrit à un écran LCD, ce qui se traduit par l’affichage du symbole de l’emplacement de 0101 0000 CGROM. En d’autres termes, ‘P’ le caractère est affiché. Cela s’applique à toutes les lettres de l’alphabet (majuscules et petites), mais pas à des chiffres. Comme on le voit sur ​​la carte précédente, les adresses de tous les chiffres sont poussés en avant par 48 par rapport à leurs valeurs (chiffres adresse 0 est de 48, chiffre 1 adresse est 49, chiffre 2 adresse est 50, etc.) Par conséquent, afin d’afficher les chiffres correctement, il est nécessaire d’ajouter le nombre décimal 48 à chacun d’entre eux avant d’être envoyé à un écran LCD.
Quel est l’ASCII? Depuis leur création jusqu’à aujourd’hui, les ordinateurs peuvent reconnaître des chiffres, mais pas des lettres. Cela signifie que toutes les données de swaps ordinateur avec un périphérique a un format binaire, même si celle-ci est reconnue par l’homme comme des lettres (le clavier est un excellent exemple). En d’autres termes, chaque caractère correspond à une combinaison unique de zéros et de uns. ASCII est codage de caractères basé sur l’alphabet anglais. Code ASCII spécifie une correspondance entre les symboles de caractères standard et leurs équivalents numériques.

CGRAM Memoire

En dehors de caractères standard, l’écran LCD peut également afficher des symboles définis par l’utilisateur lui-même. Il peut être n’importe quel symbole dans la taille des pixels 5×8. Mémoire RAM appelée CGRAM dans la taille de 64 octets, il permet.
Registres de mémoire sont 8 bits de large, mais seulement 5 bits de poids faible sont utilisés. Une logique (1) dans chaque registre représente un point grisé, alors que 8 emplacements regroupés représenter un caractère. Il est mieux illustré dans la figure ci-dessous:

Symboles sont généralement définis au debut du programme par des zéros écriture simple et ceux de registres de mémoire CGRAM afin qu’ils forment des formes souhaitées. Pour les afficher, il suffit de spécifier son adresse. Faites attention à la première colonne la carte CGROM de caractères. Il ne contient pas les adresses de mémoire RAM, mais les symboles dont nous discutons ici. Dans cet exemple, on entend par «écran 0 ‘- affichage’ C ‘, signifie’ affichage 1 ‘-’ affichage ‘ž’ etc

Contrôle et commandes d’affichage



Maintenant, l’instruction peut être divisée principalement dans quatre types
1) Les instructions function set
2) adresser des instructions set
3) Les instructions de transfert de données avec la mémoire RAM interne
4) Autres
Détails des instructions

1) Lire les données de la RAM

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
1
D7
D6
D5
D4
D3
D2
D1
D0
Lire des données binaires 8 bits de DDRAM / CGRAM
La sélection de RAM est réglé par le jeu d’instructions adresse précédente. Si le jeu d’instruction d’adresse de RAM n’est pas exécutée avant l’instruction, les données qui sont lues premier est invalide, parce que la direction de l’AC n’est pas déterminée. Si la RAM de données est lu à plusieurs reprises sans instruction RAM set adresse avant opération de lecture, les données de la RAM correctes à partir de la seconde, mais les premières données serait inexact, car il n’y a pas de temps à transférer les données de la RAM. En cas de DDRAM opération de lecture, l’instruction déplace le curseur joue le même rôle que l’enseignement DDRAM ensemble d’adresses, il transfère également les données RAM à registres de données de sortie.
Après opération de lecture, le compteur d’adresses de données est automatiquement augmentée ou réduite par 1 selon le mode d’entrée. Après CGRAM opération de lecture, décalage d’affichage ne ​​peut pas être exécuté correctement.
* En cas d’opération d’écriture RAM, CA est augmenté ou diminué de 1 tel que celui de l’opération de lecture. En ce moment AC indique la position d’adresse suivant, mais les données antérieures peuvent seulement par l’instruction de lecture.

2) Écrire des données dans la RAM

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
0
D7
D6
D5
D4
D3
D2
D1
D0
Ecrire des données binaires à 8 bits DDRAM / CGRAM. La sélection des CGRAM ou DRAM est fixé par le jeu d’instructions adresse précédente; jeu d’adresses DDRAM, jeu d’adresse CGRAM. Jeu d’instructions RAM peut aussi déterminer la direction AC à la RAM.
Après opération d’écriture, l’adresse est automatiquement augmenté ou diminué de 1 selon le mode d’entrée.

3) Lire drapeau d’occupation et adresse

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
En faisant cette lecture de fonctionnement, il est possible de déterminer si l’écran LCD effectue une opération interne ou non. Si l’indicateur d’occupation (BF) est élevée, une opération interne qui se passe à l’intérieur de l’écran LCD à ce moment particulier. Pour effectuer une opération supplémentaire de la source de données (par exemple micro-contrôleur) doit attendre que le BF à l’état bas. Ici, la valeur du compteur d’adresse peut également être lu.

4) Adresse DDRAM Set

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
AC6
AC5
AC4
AC3
AC2
AC1
AC0
Définissez l’adresse DDRAM à la CA, cette instruction rend les données disponibles auprès de DDRAM MPU. En mode d’affichage 1-ligne, les gardes d’adresses DDRAM de “00H” à “4FH”. En mode d’affichage sur 2 lignes, l’adresse DDRAM dans les gammes de première ligne de “00H” à “27H”, et l’adresse DDRAM dans la 2ème ligne est de «40H» à «67H».

5) Régler l’adresse CGRAM

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
1
AC5
AC4
AC3
AC2
AC1
AC0
Définissez l’adresse CGRAM à la CA. Cette instruction rend les données disponibles à partir de CGRAM MPU.
6)      Function Set
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
1
DL
N
F
X
X
DL: Interface bit de données de contrôle de longueur
DL = ’1 ‘signifie que le mode 8 bits de transfert de données.
DL = ’0 ‘signifie que le mode 4 bits de transfert de données
Lorsque le mode 4 bits est activé, les données doivent être transférées en deux parties, 4bits premier supérieures, puis inférieures 4 bits.
N: nombre de bits ligne de l’écran de contrôle
N = ’1 ‘permet aux caractères à afficher dans 2-lignes
N = ’0 ‘permet de caractères à afficher dans la première ligne seulement
F: bit de commande d’affichage des polices
F = ’0 ‘utiliser le mode 5 x 8 points le format d’affichage
F = ’1 ‘utiliser le mode 5 × 11 points le format d’affichage

7) Maj Curseur ou écran

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
1
S/C
R/L
X
X
Sans l’écriture ou la lecture des données d’affichage, changer de position curseur gauche / droite ou l’affichage.
Cette instruction est faite pour corriger ou rechercher ou afficher des données. Pendant le mode d’affichage sur 2 lignes, curseur se déplace vers la 2ème ligne après le chiffre des 40 ans de la 1ère ligne.
Lorsque les données affichées est passée à plusieurs reprises, chaque ligne se déplace individuellement.
Lorsque le poste d’affichage est effectuée, le contenu du compteur d’adresse ne sont pas modifiés.

8)  On / Off Controle

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
1
D
C
B
Cette instruction commande d’affichage, le curseur et clignotement du curseur.
D: Affichage activé / désactivé bit de commande
D = ’1 ‘signifie l’affichage complet est activé
D = ’0 ‘signifie l’affichage est complètement fermé. Mais les données d’affichage reste en DDRAM.
C: le curseur Marche / Arrêt bit de commande
C = ’1 ‘spires sur le curseur
C = ’0 ‘désactive le curseur. Mais I / D registre conserve les données
B: clignotement du curseur Marche / Arrêt bit de commande
B = ’1 ‘permet de clignotement du curseur périodiquement.
B = ’0 ‘arrête le curseur clignote et le curseur semble stable si le curseur est activé.

9) Réglage du mode d’entrée(Entry set)

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
1
I/D
SH
Cette instruction définit la direction de déplacement du curseur et l’affichage.
Lorsque les E / D = ’1 ‘curseur se déplace vers la droite et adresse DDRAM est augmenté de 1.
Lorsque E / D = ’0 ‘curseur se déplace vers la gauche et adresse DDRAM est diminué de 1.
CGRAM fonctionne de la même manière dans ce contexte.

10) Retour Accueil

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
1
X
Cette instruction définit l’adresse à l’encontre de ’00h ‘, et renvoie le curseur sur la première colonne de la première ligne. Et si l’affichage est décalé précédemment, cette instruction se déplace aussi. Le contenu DDRAM ne changent pas dans cette instruction.

11) Effacer Tous

RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
0
1
Effacer toutes les données d’affichage en écrivant “20H” (code ASCII du caractère «espace») à toutes les adresses DDRAM, ET consigne adresse DDRAM compteur (AC) pour “00H”. Il renvoie le curseur à la première colonne de la première ligne et établit le mode d’entrée pour incrémenter le mode (I / D = ’1 ‘).
Interface 8-bits et 4 bits de LCD
Maintenant, la question est de savoir comment afficher des données dans l’écran LCD ou donner l’ordre à celui-ci. Il ya deux modes de transfert de données sont pris en charge par les écrans LCD. Le premier est le mode 4 bits, un autre est en mode 8 bits. Pour transférer des données en mode 8 bits, commencez par mettre vos données dans le bus 8 bits, puis mettre la commande dans le bus de commande, puis les impulsions du signal de validation.
Pour envoyer des données en mode 4 bits, d’abord mis 4bit supérieures dans le bit de données 4 bus connecté à 4MSB broches écran LCD, puis mettez signaux de commande dans le bus de commande, puis pulser la broche E une fois. Prochaine mise bas le bit 4 dans le bus de données et d’impulsion de l’axe E de nouveau. Voici un organigramme décrivant simplement.

LCD Connection

Selon le nombre de lignes sont utilisées pour la connexion d’un écran LCD pour le microcontrôleur, il ya des modes LCD 8-bits et 4 bits. Le mode approprié est sélectionné au début de l’opération dans le processus appelé «initialisation». Le mode 8-bit LCD utilise sorties D0-D7 pour transférer des données comme il est expliqué à la page précédente.
L’objectif principal du mode 4-bit LCD est de sauver précieux broches E / S du microcontrôleur. Seuls les 4 bits supérieurs (D4-D7) sont utilisés pour la communication, tandis que d’autres peuvent être laissées libres. Chaque élément de données est envoyé à l’écran en deux étapes-quatre bits supérieurs sont transmis en premier (normalement à travers les lignes D4-D7), puis quatre bits de poids faible. Initialisation de l’écran LCD permet de relier et interpréter les bits reçus correctement.


Les données sont rarement lues à partir de l’écran LCD (il est principalement transférée du microcontrôleur à l’écran) et il est souvent possible d’économiser un supplément de broche E / S par simple reliant la broche R / W à la terre. Une telle économie a son prix. Les messages seront normalement affiché, mais il ne sera pas possible de lire le drapeau occupé car il n’est pas possible de lire l’affichage soit. Heureusement, il existe une solution simple. Après l’envoi d’un caractère ou d’une commande, il est important de donner à l’écran LCD assez de temps pour faire son travail. Compte tenu du fait que l’exécution d’une commande peut durer environ 1.64mS, il suffira d’attendre environ 2 ms pour les LCD.

 STM32_LCD Code Example