Ce projet montre comment utiliser le module d'affichage STONE, le STM32, le module relais. L'objectif du projet est de pouvoir contrôler des appareils électroménagers par le biais de l'écran STONE en tant qu'interface homme-machine.

STONE Écran LCD TFT de 8 pouces

Nom : QQ图片20210922150842.png
Affichages : 83
Taille : 115,7 Ko

Module relais -8 canaux

Nom : 图片1.png
Affichages : 90
Taille : 116,8 Ko

Carte de base du MCU STM32F411

Nom : 图片2.png
Affichages : 88
Taille : 486,3 Ko

Schéma de connexion

Nom : 图片3.png
Affichages : 82
Taille : 1,59 Mo

Conception de l'interface utilisateur graphique

Nom : 图片4.jpg
Affichages : 81
Taille : 139,5 Ko

Code source

Le STM32 utilise le port série 1 et la communication par écran tactile, l'utilisation du taux de baud est de 115200.

Code C : 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void MX_USART1_UART_Init(void)
{
 
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;//
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
 
}
 
The configuration of HAL library GPIO is as follows:
 
void MX_GPIO_Init(void)
{
 
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, A8_Pin|A7_Pin|A6_Pin|A5_Pin, GPIO_PIN_SET);
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, A4_Pin|A3_Pin|A2_Pin|A1_Pin, GPIO_PIN_SET);
 
  /*Configure GPIO pins : PAPin PAPin PAPin PAPin */
  GPIO_InitStruct.Pin = A8_Pin|A7_Pin|A6_Pin|A5_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
  /*Configure GPIO pins : PBPin PBPin PBPin PBPin */
  GPIO_InitStruct.Pin = A4_Pin|A3_Pin|A2_Pin|A1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
}

Rafraîchir tous les états d'affichage avant l'initialisation du MCU

Code C : 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
	data_send[4]=0x00;//
	data_send[5]=0x20;//
	data_send[6]=0xB9;//
	data_send[7]=0xD8;
	data_send[8]=0xB1;
	data_send[9]=0xD5;
	UART1_Send_Array(data_send,12);//
	data_send[5]=0x30;//
	UART1_Send_Array(data_send,12);//
	data_send[5]=0x40;//
	UART1_Send_Array(data_send,12);//
	data_send[5]=0x50;//
	UART1_Send_Array(data_send,12);//
	data_send[5]=0x60;//
	UART1_Send_Array(data_send,12);//
	data_send[5]=0x70;//
	UART1_Send_Array(data_send,12);//
	data_send[5]=0x80;//
	UART1_Send_Array(data_send,12);//

Recevoir les données envoyées par l'écran au MCU, et contrôler l'état des IO :

Code C : 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
28
29
if ((char *)buffer != NULL) 
		{
			if (strlen((char *)buffer) == 0) 
			{
				//buffer
			}
			else//
			{
 
				switch(buffer[5])
				{
					case 0x01 : HAL_GPIO_WritePin(A1_GPIO_Port,A1_Pin,GPIO_PIN_RESET);  break;//
					case 0x02 : HAL_GPIO_WritePin(A2_GPIO_Port,A2_Pin,GPIO_PIN_RESET);  break;//
					case 0x03 : HAL_GPIO_WritePin(A3_GPIO_Port,A3_Pin,GPIO_PIN_RESET);  break;//
					case 0x04 : HAL_GPIO_WritePin(A4_GPIO_Port,A4_Pin,GPIO_PIN_RESET);  break;//
					case 0x05 : HAL_GPIO_WritePin(A5_GPIO_Port,A5_Pin,GPIO_PIN_RESET);  break;//
					case 0x06 : HAL_GPIO_WritePin(A6_GPIO_Port,A6_Pin,GPIO_PIN_RESET);  break;//
					case 0x07 : HAL_GPIO_WritePin(A7_GPIO_Port,A7_Pin,GPIO_PIN_RESET);  break;//
					case 0x11 : HAL_GPIO_WritePin(A1_GPIO_Port,A1_Pin,GPIO_PIN_SET);    break;//
					case 0x12 : HAL_GPIO_WritePin(A2_GPIO_Port,A2_Pin,GPIO_PIN_SET); 		break;//
					case 0x13 : HAL_GPIO_WritePin(A3_GPIO_Port,A3_Pin,GPIO_PIN_SET);    break;//
					case 0x14 : HAL_GPIO_WritePin(A4_GPIO_Port,A4_Pin,GPIO_PIN_SET);    break;//
					case 0x15 : HAL_GPIO_WritePin(A5_GPIO_Port,A5_Pin,GPIO_PIN_SET);    break;//
					case 0x16 : HAL_GPIO_WritePin(A6_GPIO_Port,A6_Pin,GPIO_PIN_SET);    break;//
					case 0x17 : HAL_GPIO_WritePin(A7_GPIO_Port,A7_Pin,GPIO_PIN_SET);    break;//
				}
			}
			CLR();//
		}

Déterminer l'état de l'OI, et afficher l'écran de retour de l'état actuel de la sortie

Code C : 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
// Determine the value of IO and display the corresponding status value in the status box		if(!HAL_GPIO_ReadPin(A1_GPIO_Port,A1_Pin))//
		{//
			data_send[4]=0x00;//
			data_send[5]=0x20;//
			data_send[6]=0xB4;//
			data_send[7]=0xF2;
			data_send[8]=0xBF;
			data_send[9]=0xAA;
			UART1_Send_Array(data_send,12);//
		}
		else
		{//
			data_send[4]=0x00;//
			data_send[5]=0x20;//
			data_send[6]=0xB9;//
			data_send[7]=0xD8;
			data_send[8]=0xB1;
			data_send[9]=0xD5;
			UART1_Send_Array(data_send,12);//
		}

Démonstration vidéo