Bonjour,

mon objectif est de faire fonctionner un afficheur (NHD-0420CW-Ax3) en I2C sur mon STM32. J'ai pour cela récupéré du code que j'essaye de faire fonctionner mais il y a une chose que je n'arrive pas à comprendre.

Dans mon fichier .h je déclare :

- le nombre de ligne, de colonne, l'adresse esclave, le string sur mon afficheur, les adresses DDRAM, le mode, mais SURTOUT les paquets qui seront transmis :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
/** @brief Number of display rows */
const   uint8_t     ROW_N = 4;
 
/** @brief Number of display columns */
const   uint8_t     COLUMN_N = 20;
 
/** @brief pin assigned to the Reset line (optional, can be always high) */
const   uint8_t     RES = 16;
 
/** @brief Display I2C Slave address, in 7-bit form: 0x3C if SA0=LOW, 0x3D if SA0=HIGH */
const   uint8_t     SLAVE2W = 0x3C;
 
/** @brief Strings to be displayed */
const   uint8_t     TEXT[4][21] =             {"1-Newhaven Display--",
                                               "2-------Test--------",
                                               "3-16/20-Characters--",
                                               "4!@#$%^&*()_+{}[]<>?"};
 
/** @brief DDRAM address for each line of the display */
uint8_t new_line[4] = {0x80, 0xA0, 0xC0, 0xE0};
 
/** @brief Display mode: 1/3 lines or 2/4 lines; default 2/4 (0x08) */
uint8_t rows = 0x08;
 
/** @brief Packet to be transmitted (max 20 bytes) */
uint16_t tx_packet[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
j'ai donc un tableau nommé tx_packet, de type uint16_t

Dans stdint.h on a =

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
typedef unsigned char uint8_t ;
 
typedef unsigned short uint16_t;
 
typedef unsigned long uint32_t;
J'ai choisi uint16_t pour mon tableau des paquets qui seront sous forme d'octets, et uint8_t pour les caractères sur mon afficheur :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
uint16_t tx_packet[]
 
const   uint8_t     TEXT[4][21]
Cela vous semble t'il correct ?

Dans mon fichier .c, j'utilise la fonction command comme ceci :

Et lors de la déclaration de cette fonction je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
void command(uint8_t commandByte)
{
   tx_packet[0] = 0x00; // Control Byte; C0_bit=0, D/C_bit=0 -> following Data Byte contains command
   tx_packet[1] = commandByte;
   send_packet(2);  // Transmits the two bytes
}
Voilà ma question, est-il possible de faire cela en C, je veux dire remplir le tableau comme ceci [0] [1] sa OK, mais le send_packet(2) envoie-t-il les deux paquets du dessus à ma fonction send_packet ? C'est ça que j'ai du mal à comprendre.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
void send_packet(uint8_t byteStored)
{
   uint8_t index = 0;  
 
   I2C_GenerateSTART(I2CM_MODULE, ENABLE);
   I2C_SendData(I2CM_MODULE, SLAVE2W);
}
Je tiens à préciser que j'ai récupéré ça en Arduino, c'est pour ça peut être que le fonctionnement ici ne fonctionne pas en C pur !

J'espère avoir était compréhensible, merci beaucoup pour votre aide !