ENISO TP2 PROGRAMMATIONS STM32F4 2016-2017
CREEZ UN DOSSIER C:\nom\STM32\TP2
1-Installations des logiciels
1) [Link]
2) STlinkV2.1(DRIVER USB).zip
3) [Link]
4) [Link]
5) [Link]
6) Virtual comport [Link]
7) [Link]
Organisez les logiciels sur le bureau comme ceci :
2-Configuration du logiciel STM32CubeMX:
-Lancez STM32CubeMX, puis menu->Help-> Install New LIB PUIS From Local
Choisissez le fichier STM32Cube_FW_F4_V1.[Link] de puis le dossier des logiciels
Et attendez la fin de l’installation
3-Création d’un projet STM32CubeMX
Créez un nouveau projet en suivant les étapes suivantes
4-Configuration des périphériques
5-AFFECTATIONS DES NOMS POUR LES PINS CAPTEURS ET ACTIONNEURS
ICI LES RESULATS DE LA CONFIGURATION PRECEDENTE
6-Configuration des horloges : Processeur 168Mhz et USB 48Mhz
7-Configuration du projet
8-Génération du code sous keil
Ou avec l’icon
Lancez le projet
9-COMPILATION DU PROJET SOUS KEIL
10-Configuration de la bibliothèque STM32F4-Discovery
Copiez les dossiers : Components et STM32F4-Discovery depuis le fichier compressé vers le projet keil
Ajoutez au projet les fichiers .c et les chemins des fichiers .h
AJOUTEZ LES lignes
#include "stm32f4_discovery.h"
#include "stm32f4_discovery_accelerometer.h"
#include "usbd_cdc_if.h"
DANS main.c
11-CONFIGURATION DE LA COMMUNICATION SERIE CDC
Ajouter la déclaration (uint16_t usr_rx_data_len;) dans le fichier usbd_cdc_if.c à ligne 91
11.1-Modifiez la fonction CDC_Receive_FS à la ligne 251
11.2-Modifiez le fichier usbd_cdc.h à la ligne 54 par
#define CDC_DATA_HS_MAX_PACKET_SIZE 64 /* Endpoint IN & OUT Packet size */
11.3-Modifier la fonction main.c
en copiant entre USER CODE BEGIN 0 …. USER CODE END 0 le code en gras
/* USER CODE BEGIN 0 */
int16_t pDataXYZ[3];
extern uint8_t UserTxBufferFS[];
extern uint8_t UserRxBufferFS[];
extern uint8_t usr_rx_data_len;
uint16_t cp=0;
void HAL_SYSTICK_Callback(void)
{
if( (GPIOA->IDR&0x0001)==1)
{
sprintf((char*)UserTxBufferFS,"Bonjour... PA0=1 \n");
CDC_Transmit_FS(UserTxBufferFS, strlen((char*)UserTxBufferFS));
while(GPIOA->IDR&0x0001);
}
}
/* USER CODE END 0 */
11.4-Compilez et charger le programme dans la carte
Vérifiez le port série
11.5-Testez la communication avec le logiciel Termite 3.2
12- COMMANDE D’UN ROBOT à 2 roues motrices et 4 capteurs
Complétez le tableau de commande ci-dessous
CAPTEURS ACTIONNEURS
ENTREES SORTIES
Cg Cd Ca MARCHE MG MD MARCHE
PA3 PA2 PA1 PA0 GPIOA->IDR &0x000F PD14 PD13 PD12 GPIOD->ODR |0x?000
x x x 0 0 0 0 0x0000 OFFLINE
0 0 0 1 1 1 1 0x3000 AVANT
0 0 1 1 ARRET
0 1 0 1 GAUCHE
0 1 1 1 ARRET
1 0 0 1 DROITE
1 0 1 1 ARRET
1 1 0 1 ARRET
1 1 1 1 ARRET
GPIOA->IDR (registre d’entrée du PORTA
32 …… 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
…. x x x x
On écrit GPIOA->IDR&0x000F pour lire l’état des bit [PA3,PA2,PA1,PA0]
GPIOD->ODR (registre de sortie du PORTD)
32 …… 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
…. x x x x
Pour modifier les bits [PD15, PD14, PD13, PD12] sans toucher aux restes des bits
On doit tout d’abord initialiser (à zéro) les bits [PD15, PD14, PD13, PD12] en écrivant
GPIOD->ODR = GPIOD->ODR&0x0FFF GPIOD->ODR &= 0x0FFF, puis écrire la valeur souhaitée (exemple 3) en tapant
GPIOD->ODR=GPIOD->ODR|0x3FFF GPIOD->ODR |= 0x3FFF
Donc le couplage des 2 lignes suivantes
GPIOD->ODR &= 0x0FFF
GPIOD->ODR |= 0x3FFF
Permettent d’avoir [PD15, PD14, PD13, PD12]=3 sans modifier les bits PD11,…,PD0
32 …… 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
…. 0 1 1 1 x x x x x x x x x x x x
13-Complétez le code qui permet la commande du robot
14-CONFIGURATION ET UTILISATION DE L’ACCELEROMETRE
COMPTE RENDU
DATE : TP2 PROGRAMMATIONS STM32 Nom Prénom :