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

STM32会存在单个IO口坏掉的情况吗?

[复制链接]
Ha~ha~ 提问时间:2025-5-30 09:59 / 已解决

型号:STM32F103RCT6

工具:CubeMX、Keil5、LL库

UART5:

TX:PC12

RX:PD2

现象:

调试 UART5, 使用中断接收,阻塞发送。发送数据正常,但是无法接收到数据,好像都没有进入中断处理函数。同样的方法配置UART4,发送和接收都正常。

重新建立一个工程,不配置串口。直接将PD2 和 PC12配置为推挽输出,然后在while(1)中做连续电平翻转。PC12脚输出方波,PD2输出异常。

收藏 评论6 发布时间:2025-5-30 09:59

举报

6个回答
butterflyspring 回答时间:2025-5-30 10:17:47
作为标准IO口的PD2,正常情况下应该能输出方波的。


建议将此引脚悬空,测量输出方波,避免外部电路影响。

如不能输出,那么简单测量一下该引脚悬空状态下对GND 和 VDD的阻抗,粗略判断一下是否有损坏。

有条件的化,再换一片对比一下。
Ha~ha~ 回答时间:2025-5-30 10:01:59
这里是配置UART5的代码
/* UART5 init function */
void MX_UART5_Init(void)
{
  /* USER CODE BEGIN UART5_Init 0 */
  /* USER CODE END UART5_Init 0 */

  LL_USART_InitTypeDef USART_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* Peripheral clock enable */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_UART5);

  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
  /**UART5 GPIO Configuration
  PC12   ------> UART5_TX
  PD2   ------> UART5_RX
  */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_12;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = LL_GPIO_PIN_2;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING;
  LL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /* UART5 interrupt Init */
  NVIC_SetPriority(UART5_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
  NVIC_EnableIRQ(UART5_IRQn);

  /* USER CODE BEGIN UART5_Init 1 */

  /* USER CODE END UART5_Init 1 */
  USART_InitStruct.BaudRate = 115200;
  USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
  USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
  USART_InitStruct.Parity = LL_USART_PARITY_NONE;
  USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
  USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
  LL_USART_Init(UART5, &USART_InitStruct);
  LL_USART_ConfigAsyncMode(UART5);
  LL_USART_Enable(UART5);
  /* USER CODE BEGIN UART5_Init 2 */
        LL_USART_EnableIT_RXNE(UART5);
        LL_USART_EnableIT_IDLE(UART5);
  /* USER CODE END UART5_Init 2 */
}

void UART5_SendDatas(uint8_t *data, uint8_t len)
{
        uint16_t i = 0;
        for(i = 0; i < len; i++)
        {
                while(LL_USART_IsActiveFlag_TC(UART5)!= 1);
                LL_USART_TransmitData8(UART5, data[i]);
        }
}


uint16_t UART5_RxIndex = 0;
uint16_t UART5_RxLen = 0;
uint8_t  UART5_RxBuf[UART5_RxMax] = {0};
void MY_UART5_IRQHandler(void)
{
        uint8_t temp = 0;
        if(LL_USART_IsActiveFlag_IDLE(UART5))
        {
                LL_USART_ClearFlag_IDLE(UART5);
                UART5_RxLen = UART5_RxIndex;
                UART5_RxIndex = 0;
        }

        if(LL_USART_IsActiveFlag_RXNE(UART5))
        {
                LL_USART_ClearFlag_RXNE(UART5);
                temp = LL_USART_ReceiveData8(UART5);
    UART5_RxBuf[UART5_RxIndex] = temp;
                UART5_RxIndex ++;
        }
}

Ha~ha~ 回答时间:2025-5-30 10:09:54
PC12输出电压范围是0到3.3v
PD2只有0.1v左右,几乎没有。




62c37e13110197aaf99957c63c9db089_compress.jpg
种花家刘氓兔 回答时间:2025-5-30 10:19:20

你尝试将UART5映射到其他GPIO上试试,

1、有可能这个PD2打坏了,内部上下拉有问题

2、有可能UART5 RX那部分,打坏了

3、也有可能以上两种情况都有

Ha~ha~ 回答时间:2025-5-30 10:53:42

butterflyspring 发表于 2025-5-30 10:17
作为标准IO口的PD2,正常情况下应该能输出方波的。</p>
<p>

板子上的PD2是直接引出来的,断电直接测了一下,对VDD的电阻1.8KΩ,对GND的电阻只有2.8Ω,其他的引脚对VDD和GDN都是MΩ级别的。

应该是引脚坏掉了。

Ha~ha~ 回答时间:2025-5-30 10:56:11
种花家刘氓兔 发表于 2025-5-30 10:19
[md]你尝试将UART5映射到其他GPIO上试试,

1、有可能这个PD2打坏了,内部上下拉有问题

测了一下,是引脚坏掉了

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版