[Programmation] Débuter avec une carte NUCLEO
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Débuter avec une carte NUCLEO



  1. #1
    dje8269

    Débuter avec une carte NUCLEO


    ------

    Bonjour à tous,

    Voila, je souhaite m'initier aux µC 32 bits. Pour cela mon choix s'est tourné sur les ARM CORTEX. J'ai donc acheter une carte NUCLE-F429ZI . Nucleo-144.

    Dans un tout premier temps j'ai essayé le logiciel Mbed permettant de faire un programme en ligne. Ensuite on clic sur compile on télécharge le .bin et on le met dans le dossier de la carte nucléo ( détecter comme une clé USB). Je vois bien un transfert donnée sur ma carte avec un clignotement rouge/vert de la led. Et hop ma led prévue se met à clignoter. Jusque la c'est nickel.

    Le HIC c'est que je ne souhaite pas utiliser une version en ligne, trop contraignante. je me suis donc tourné vers SW4AC6 pour l'IDE couplé avec STM32CubeMX pour la configuration. Et ici les problèmes commencent !
    Je n'arrive absolument pas à charger un clignotement de led.

    Dans cube, je rentre ma carte et je lui demande de me générer le code. je reste tout par défaut. Je rentre un nom de projet , j'indique que l'IDE est pour SW4STM32 et je génère le code.
    Le code s'ouvre directement dans AC4STM32 nickel !.

    Je fais un petit build histoire de vérifier qu'il n'y a pas d'erreur. nickel.

    Je me retrouve donc avec un programme vierge sans erreur apparemment.
    Je vais dans le dossier "Core" puis "Src" et j'ouvre le main.c qui ressemble a ça :

    Code:
    /* USER CODE BEGIN Header */
    /**
      ******************************************************************************
      * @file           : main.c
      * @brief          : Main program body
      ******************************************************************************
      * @attention
      *
      * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
      * All rights reserved.</center></h2>
      *
      * This software component is licensed by ST under BSD 3-Clause license,
      * the "License"; You may not use this file except in compliance with the
      * License. You may obtain a copy of the License at:
      *                        opensource.org/licenses/BSD-3-Clause
      *
      ******************************************************************************
      */
    /* USER CODE END Header */
    /* Includes ------------------------------------------------------------------*/
    #include "main.h"
    
    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    
    /* USER CODE END Includes */
    
    /* Private typedef -----------------------------------------------------------*/
    /* USER CODE BEGIN PTD */
    
    /* USER CODE END PTD */
    
    /* Private define ------------------------------------------------------------*/
    /* USER CODE BEGIN PD */
    /* USER CODE END PD */
    
    /* Private macro -------------------------------------------------------------*/
    /* USER CODE BEGIN PM */
    
    /* USER CODE END PM */
    
    /* Private variables ---------------------------------------------------------*/
    ETH_HandleTypeDef heth;
    
    UART_HandleTypeDef huart3;
    
    PCD_HandleTypeDef hpcd_USB_OTG_FS;
    
    /* USER CODE BEGIN PV */
    
    /* USER CODE END PV */
    
    /* Private function prototypes -----------------------------------------------*/
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_ETH_Init(void);
    static void MX_USART3_UART_Init(void);
    static void MX_USB_OTG_FS_PCD_Init(void);
    /* USER CODE BEGIN PFP */
    
    /* USER CODE END PFP */
    
    /* Private user code ---------------------------------------------------------*/
    /* USER CODE BEGIN 0 */
    
    /* USER CODE END 0 */
    
    /**
      * @brief  The application entry point.
      * @retval int
      */
    int main(void)
    {
      /* USER CODE BEGIN 1 */
    
      /* USER CODE END 1 */
    
      /* MCU Configuration--------------------------------------------------------*/
    
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_ETH_Init();
      MX_USART3_UART_Init();
      MX_USB_OTG_FS_PCD_Init();
      /* USER CODE BEGIN 2 */
    
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
      }
      /* USER CODE END 3 */
    }
    
    /**
      * @brief System Clock Configuration
      * @retval None
      */
    void SystemClock_Config(void)
    {
      RCC_OscInitTypeDef RCC_OscInitStruct = {0};
      RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    
      /** Configure the main internal regulator output voltage
      */
      __HAL_RCC_PWR_CLK_ENABLE();
      __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
      /** Initializes the RCC Oscillators according to the specified parameters
      * in the RCC_OscInitTypeDef structure.
      */
      RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
      RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
      RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
      RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
      RCC_OscInitStruct.PLL.PLLM = 4;
      RCC_OscInitStruct.PLL.PLLN = 168;
      RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
      RCC_OscInitStruct.PLL.PLLQ = 7;
      if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
      {
        Error_Handler();
      }
      /** Initializes the CPU, AHB and APB buses clocks
      */
      RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                  |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
      RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
      RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
      RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
      RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
    
      if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
      {
        Error_Handler();
      }
    }
    
    /**
      * @brief ETH Initialization Function
      * @param None
      * @retval None
      */
    static void MX_ETH_Init(void)
    {
    
      /* USER CODE BEGIN ETH_Init 0 */
    
      /* USER CODE END ETH_Init 0 */
    
      /* USER CODE BEGIN ETH_Init 1 */
    
      /* USER CODE END ETH_Init 1 */
      heth.Instance = ETH;
      heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;
      heth.Init.Speed = ETH_SPEED_100M;
      heth.Init.DuplexMode = ETH_MODE_FULLDUPLEX;
      heth.Init.PhyAddress = LAN8742A_PHY_ADDRESS;
      heth.Init.MACAddr[0] =   0x00;
      heth.Init.MACAddr[1] =   0x80;
      heth.Init.MACAddr[2] =   0xE1;
      heth.Init.MACAddr[3] =   0x00;
      heth.Init.MACAddr[4] =   0x00;
      heth.Init.MACAddr[5] =   0x00;
      heth.Init.RxMode = ETH_RXPOLLING_MODE;
      heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
      heth.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;
    
      /* USER CODE BEGIN MACADDRESS */
    
      /* USER CODE END MACADDRESS */
    
      if (HAL_ETH_Init(&heth) != HAL_OK)
      {
        Error_Handler();
      }
      /* USER CODE BEGIN ETH_Init 2 */
    
      /* USER CODE END ETH_Init 2 */
    
    }
    
    /**
      * @brief USART3 Initialization Function
      * @param None
      * @retval None
      */
    static void MX_USART3_UART_Init(void)
    {
    
      /* USER CODE BEGIN USART3_Init 0 */
    
      /* USER CODE END USART3_Init 0 */
    
      /* USER CODE BEGIN USART3_Init 1 */
    
      /* USER CODE END USART3_Init 1 */
      huart3.Instance = USART3;
      huart3.Init.BaudRate = 115200;
      huart3.Init.WordLength = UART_WORDLENGTH_8B;
      huart3.Init.StopBits = UART_STOPBITS_1;
      huart3.Init.Parity = UART_PARITY_NONE;
      huart3.Init.Mode = UART_MODE_TX_RX;
      huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
      huart3.Init.OverSampling = UART_OVERSAMPLING_16;
      if (HAL_UART_Init(&huart3) != HAL_OK)
      {
        Error_Handler();
      }
      /* USER CODE BEGIN USART3_Init 2 */
    
      /* USER CODE END USART3_Init 2 */
    
    }
    
    /**
      * @brief USB_OTG_FS Initialization Function
      * @param None
      * @retval None
      */
    static void MX_USB_OTG_FS_PCD_Init(void)
    {
    
      /* USER CODE BEGIN USB_OTG_FS_Init 0 */
    
      /* USER CODE END USB_OTG_FS_Init 0 */
    
      /* USER CODE BEGIN USB_OTG_FS_Init 1 */
    
      /* USER CODE END USB_OTG_FS_Init 1 */
      hpcd_USB_OTG_FS.Instance = USB_OTG_FS;
      hpcd_USB_OTG_FS.Init.dev_endpoints = 4;
      hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL;
      hpcd_USB_OTG_FS.Init.dma_enable = DISABLE;
      hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
      hpcd_USB_OTG_FS.Init.Sof_enable = ENABLE;
      hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE;
      hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE;
      hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE;
      hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE;
      if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK)
      {
        Error_Handler();
      }
      /* USER CODE BEGIN USB_OTG_FS_Init 2 */
    
      /* USER CODE END USB_OTG_FS_Init 2 */
    
    }
    
    /**
      * @brief GPIO Initialization Function
      * @param None
      * @retval None
      */
    static 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();
      __HAL_RCC_GPIOD_CLK_ENABLE();
      __HAL_RCC_GPIOG_CLK_ENABLE();
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(GPIOB, LD1_Pin|LD3_Pin|LD2_Pin, GPIO_PIN_RESET);
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(USB_PowerSwitchOn_GPIO_Port, USB_PowerSwitchOn_Pin, GPIO_PIN_RESET);
    
      /*Configure GPIO pin : USER_Btn_Pin */
      GPIO_InitStruct.Pin = USER_Btn_Pin;
      GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(USER_Btn_GPIO_Port, &GPIO_InitStruct);
    
      /*Configure GPIO pins : LD1_Pin LD3_Pin LD2_Pin */
      GPIO_InitStruct.Pin = LD1_Pin|LD3_Pin|LD2_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);
    
      /*Configure GPIO pin : USB_PowerSwitchOn_Pin */
      GPIO_InitStruct.Pin = USB_PowerSwitchOn_Pin;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
      HAL_GPIO_Init(USB_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct);
    
      /*Configure GPIO pin : USB_OverCurrent_Pin */
      GPIO_InitStruct.Pin = USB_OverCurrent_Pin;
      GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(USB_OverCurrent_GPIO_Port, &GPIO_InitStruct);
    
    }
    
    /* USER CODE BEGIN 4 */
    
    /* USER CODE END 4 */
    
    /**
      * @brief  This function is executed in case of error occurrence.
      * @retval None
      */
    void Error_Handler(void)
    {
      /* USER CODE BEGIN Error_Handler_Debug */
      /* User can add his own implementation to report the HAL error return state */
      __disable_irq();
      while (1)
      {
      }
      /* USER CODE END Error_Handler_Debug */
    }
    
    #ifdef  USE_FULL_ASSERT
    /**
      * @brief  Reports the name of the source file and the source line number
      *         where the assert_param error has occurred.
      * @param  file: pointer to the source file name
      * @param  line: assert_param error line source number
      * @retval None
      */
    void assert_failed(uint8_t *file, uint32_t line)
    {
      /* USER CODE BEGIN 6 */
      /* User can add his own implementation to report the file name and line number,
         ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
      /* USER CODE END 6 */
    }
    #endif /* USE_FULL_ASSERT */
    
    /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

    Je pense que jusque là j'ai configuré mes I/O, mon horloge et deux-trois bricoles.

    Je me permets donc de rajouter dans le main.C et dans la boucle "while" ces deux lignes :

    Code:
         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
    
    	  HAL_Delay(400); //delay 100ms
    Ceci dans le but de faire clignoter la led 1 qui est brancher sur la pin PB0 il me semble.

    Je "build all" , il se passe queqlues bricoles a l'écran , pas de mesage d'erreur mais rien ne se passe sur la carte.
    J'appui sur le marteur en mode "debug" pareil une petite fenetre s'ouvre quelques millisecodnes puis se ferme et rien ne se passe sur la carte
    La meme chose quand j'appui sur le marteau en mode "release".

    Impossible d'injecter le programme sur ma carte.

    forcement quelque chose doit m'echapper ou je dois mal faire , mais je ne sais pas où

    Si une bonne âme peut me guider dans cette douloureuse épreuve de débutant se serait fort agréable.

    Merci de ma'avoir lu

    -----
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  2. #2
    dje8269

    Re : Débuter avec une carte NUCLEO

    Bonjour à tous,

    Je dois vraiment être trop con.... 2 jours sans réussir à faire clignoter la led avec SW4STM32 et cubeMX sur une carte NUCLEO-L476RG ou NUCLEO-F429ZI!
    Je m"'attendais à ce que les 32 bits soient plus compliqués mais pas à ce point !

    Du coup j'ai des cartes a vendre ( en MP)!

    Et je déconseille fortement de ce lancer la dedans. des cartes soit disant simple à mettre en œuvre , je dois être trop bête, et je jette l’éponge.
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  3. #3
    umfred

    Re : Débuter avec une carte NUCLEO

    pourquoi tu n'utilises pas MbedStudio ? l'IDE de Mbed ? https://os.mbed.com/studio/

  4. #4
    bobflux

    Re : Débuter avec une carte NUCLEO

    Bizarre pour moi ça a marché tout seul.

    Même si c'est vrai que les IDE de micro sont systématiquement à chier, au moins STM32cube programme la carte en 0.2 secondes contrairement à certains...

    Si il arrive pas à programmer la carte, c'est sûrement un problème de config à la noix, ou driver pas ou mal installé, ou bien il est pas configuré pour utiliser le programmateur qui est sur ta carte. Essaie donc un projet exemple fourni pour ta carte, si ça marche pas, cherche dans la config.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [Outils/Fab/Comp] Communication Jack avec NUCLEO F411RE
    Par Fabguil dans le forum Électronique
    Réponses: 7
    Dernier message: 16/02/2020, 15h37
  2. [Programmation] Utilié d'une carte Nucléo
    Par invite7214ed44 dans le forum Électronique
    Réponses: 9
    Dernier message: 07/06/2018, 11h17
  3. [Autre] Débuter avec les µc ST
    Par sandrecarpe dans le forum Électronique
    Réponses: 2
    Dernier message: 08/11/2017, 17h58
  4. débuter avec AVR
    Par mmm999 dans le forum Électronique
    Réponses: 4
    Dernier message: 03/08/2012, 12h28
  5. comment débuter avec une carte à puce
    Par alainav1 dans le forum Électronique
    Réponses: 4
    Dernier message: 17/10/2006, 19h26
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...