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 :
j'ai donc un tableau nommé tx_packet, de type uint16_t
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};
Dans stdint.h on a =
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
4
5 typedef unsigned char uint8_t ; typedef unsigned short uint16_t; typedef unsigned long uint32_t;
Cela vous semble t'il correct ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 uint16_t tx_packet[] const uint8_t TEXT[4][21]
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 command(0x01);
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 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 }
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 !
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); }
J'espère avoir était compréhensible, merci beaucoup pour votre aide !
Partager