STM32L1xx HAL_GPIO_Init Problème

Rishabh Kumar

STM32L1xx HAL_GPIO_Init Problème


Je développe une application pour un projet universitaire sur ma carte STM32L1DISCO avec le MCU STM32L152RC.

J’ai configuré les broches et généré le code d’initialisation via STM32CubeMX. J’utilise Atollic TrueSTUDIO comme IDE.

Le problème est que le code init généré ne peut pas s’exécuter sur mon MCU. Après avoir passé beaucoup de temps sur le débogage, j’ai trouvé que le problème dans le code est cette seule ligne utilisant la bibliothèque HAL gpio:

HAL_GPIO_Init (IDD_CNT_EN_GPIO_Port, & GPIO_InitStruct);

Même si le code précédent est correct,

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */

 __HAL_RCC_GPIOC_CLK_ENABLE();

  __HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(IDD_CNT_EN_GPIO_Port, IDD_CNT_EN_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : IDD_CNT_EN_Pin */

GPIO_InitStruct.Pin = IDD_CNT_EN_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

Après avoir parcouru le code ligne par ligne pendant le débogage, j’ai constaté que la fonction HAL GPIO Init ne s’exécute pas et donne à la place l’erreur d’exécution: « La cible ne répond pas, réessaye … ».

Lorsque je commente la ligne HAL GPIO Init, le programme s’exécute sans problème.

STM32CubeMX inclut la bibliothèque HAL dans le code. En plus il y a,

inclure « stm32l1xx_hal.h »

Donc, je ne sais pas ce qui cause le problème que je vois. J’apprécierais vraiment votre aide à ce sujet car je ne sais pas quoi essayer ensuite.

Je vous remercie.

Michel Keijzers

Vous devriez entrer dans le code de la fonction init et vérifier plus profondément ce qui peut ne pas être correct. Ce que j’ai également eu une fois, mais qui n’était pas directement lié aux broches GPIO, était que dans STM32CubeMx, dans Sys, le débogage n’était pas défini sur Serial Wire. Cela a provoqué une perte soudaine de débogage / connexion lors de l’initialisation.

Rishabh Kumar

Salut Michel, merci pour le commentaire. J’ai essayé votre suggestion et j’ai trouvé que le coupable était cet ensemble de code dans la fonction HAL_GPIO_Init: / * Configurer le mode de direction IO (entrée, sortie, alternative ou analogique) * / temp = GPIOx-> MODER; CLEAR_BIT (temp, GPIO_MODER_MODER0 << (position * 2)); SET_BIT (temp, (GPIO_Init-> Mode & GPIO_MODE) << (position * 2)); GPIOx-> MODER = temp; Une idée sur la raison pour laquelle ces lignes de code peuvent être problématiques pour le MCU?

Michel Keijzers

Non, désolé, je n’ai pas tellement plongé … êtes-vous sûr d’avoir utilisé le bon type de carte / CPU dans CubeMx? Vous pouvez également essayer une autre broche GPIO (il y a peut-être un conflit quelque part).

Jan Dorniak

Quelle broche est cette IDD_CNT_EN_GPIO? PA13 ou PA14 par hasard? On dirait que vous reconfigurez l’une des broches SWD. Même une erreur matérielle ne provoquerait pas ce comportement.

Réponses


 berendi

IDD_CNT_ENest connecté aux circuits de mesure de puissance embarqués. S’il n’est pas utilisé correctement, il interrompra temporairement l’ alimentation du V DD , réinitialisant le MCU.

Regardez les schémas dans le manuel d’utilisation

entrez la description de l'image ici

Le réglage IDD_CNT_ENsur sortie basse démarre la minuterie externe U3. Après un retard de 150 ms, Q13de U3passe au niveau haut, FET 1 U20est mis hors tension, et la résistance shunt 1kW R22est maintenant connecté en série avec V DD pour améliorer la précision de la mesure de puissance. Le MCU doit se mettre en mode LOWPOWER, STOP ou STANDBY, où la consommation est bien inférieure à 1 mA, dans les 150 ms suivant le réglage IDD_CNT_ENsur bas, et le remettre à haut en moins de 150 ms après l’arrivée du signal de réveil sur PA0.

Rishabh Kumar

Merci berendi, Jan et Michel. Vous avez tous touché le problème sur le clou: c’était le conflit de broches IDD_CNT_EN avec le fait d’être défini comme GPIO. L’utilisation d’une autre broche pour GPIO fonctionne parfaitement. Problème résolu. Merci encore!

 

HAL_GPIO_Init, Problème, STM32L1xx

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *