你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L051 GPIO的使用与LPUART之间的影响

[复制链接]
Manco 提问时间:2022-9-22 15:17 / 未解决
我在使用STM32L051型号芯片结合一个旋转式的8421编码器进行开发时,发现我对GPIO操作会引起LPUART1的结构体中很多参数的变化,最终导致LPUART1瘫痪而无法正常使用,其关键代码如下
  1. int Lora_ID_Scan(void)
  2. {
  3.         int LORA_ID = 0;
  4.        
  5.         LORA_ID_GPIO_Init();

  6.         HAL_GPIO_WritePin(LORA_COM1_GPIO_Port,LORA_COM1_Pin,GPIO_PIN_SET);

  7.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_1_Pin) << 0;
  8.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_2_Pin) << 1;
  9.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_4_Pin) << 2;
  10.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_8_Pin) << 3;

  11.         HAL_GPIO_WritePin(LORA_COM1_GPIO_Port,LORA_COM1_Pin,GPIO_PIN_RESET);
  12.         HAL_GPIO_WritePin(LORA_COM2_GPIO_Port,LORA_COM2_Pin,GPIO_PIN_SET);

  13.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_1_Pin) << 4;
  14.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_2_Pin) << 5;
  15.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_4_Pin) << 6;
  16.         LORA_ID |= HAL_GPIO_ReadPin(LORA_ID_GPIO_Port,LORA_ID_8_Pin) << 7;

  17.         LORA_ID_GPIO_DeInit();

  18.         return LORA_ID;
  19. }
复制代码
当程序运行到LORA_ID_GPIO_Init();时相关寄存器变化如下

当程序运行到   LORA_ID_GPIO_DeInit();   

以下为两个函数的具体实现
  1. void LORA_ID_GPIO_Init()
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStruct = {0};
  4.        
  5.         __HAL_RCC_GPIOA_CLK_ENABLE();
  6.         __HAL_RCC_GPIOB_CLK_ENABLE();
  7.        
  8.         /*Configure GPIO pin Output Level */
  9.         HAL_GPIO_WritePin(LORA_COM2_GPIO_Port, LORA_COM2_Pin, GPIO_PIN_RESET);
  10.         HAL_GPIO_WritePin(LORA_COM1_GPIO_Port, LORA_COM1_Pin, GPIO_PIN_RESET);
  11.        
  12.         /*Configure GPIO pin : PtPin */
  13.         GPIO_InitStruct.Pin = LORA_COM1_Pin;
  14.         GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  15.         GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  16.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  17.         HAL_GPIO_Init(LORA_COM1_GPIO_Port, &GPIO_InitStruct);

  18.         /*Configure GPIO pin : PtPin */
  19.         GPIO_InitStruct.Pin = LORA_COM2_Pin;
  20.         GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  21.         GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  22.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  23.         HAL_GPIO_Init(LORA_COM2_GPIO_Port, &GPIO_InitStruct);
  24.        
  25.         /*Configure GPIO pins : PBPin PBPin PBPin PBPin */
  26.         GPIO_InitStruct.Pin = LORA_ID_2_Pin|LORA_ID_8_Pin|LORA_ID_1_Pin|LORA_ID_4_Pin;
  27.         GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  28.         GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  29.         HAL_GPIO_Init(LORA_ID_GPIO_Port, &GPIO_InitStruct);
  30. }

  31. void LORA_ID_GPIO_DeInit()
  32. {
  33.         GPIO_InitTypeDef GPIO_InitStruct = {0};
  34.        
  35.         GPIO_InitStruct.Pin = LORA_COM1_Pin;
  36.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  37.         GPIO_InitStruct.Pull = GPIO_NOPULL;
  38.         HAL_GPIO_Init(LORA_COM1_GPIO_Port, &GPIO_InitStruct);
  39.        
  40.         GPIO_InitStruct.Pin = LORA_COM2_Pin;
  41.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  42.         GPIO_InitStruct.Pull = GPIO_NOPULL;
  43.         HAL_GPIO_Init(LORA_COM2_GPIO_Port, &GPIO_InitStruct);
  44.        
  45.         GPIO_InitStruct.Pin = LORA_ID_2_Pin|LORA_ID_8_Pin|LORA_ID_1_Pin|LORA_ID_4_Pin;
  46.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  47.         GPIO_InitStruct.Pull = GPIO_NOPULL;
  48.         HAL_GPIO_Init(LORA_ID_GPIO_Port, &GPIO_InitStruct);
  49. }
复制代码

当我把这个函数注释掉时,他的上层函数在调用这行代码时也会令LPUART1相关寄存器的数值紊乱
  1. char mybuff[16] = {0};
  2.         int ID = 0xff;
  3. //        int ID = Lora_ID_Scan();
  4.         sprintf(mybuff, "%d", ID);
复制代码
关键代码为sprintf这行,当调用sprintf后,整个寄存器的数值全部都发生了紊乱

收藏 评论0 发布时间:2022-9-22 15:17

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版