你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
型号:STM32F103RCT6
工具:CubeMX、Keil5、LL库
UART5:
TX:PC12
RX:PD2
现象:
调试 UART5, 使用中断接收,阻塞发送。发送数据正常,但是无法接收到数据,好像都没有进入中断处理函数。同样的方法配置UART4,发送和接收都正常。
重新建立一个工程,不配置串口。直接将PD2 和 PC12配置为推挽输出,然后在while(1)中做连续电平翻转。PC12脚输出方波,PD2输出异常。
举报
你尝试将UART5映射到其他GPIO上试试,
1、有可能这个PD2打坏了,内部上下拉有问题
2、有可能UART5 RX那部分,打坏了
3、也有可能以上两种情况都有
butterflyspring 发表于 2025-5-30 10:17 作为标准IO口的PD2,正常情况下应该能输出方波的。</p> <p>
板子上的PD2是直接引出来的,断电直接测了一下,对VDD的电阻1.8KΩ,对GND的电阻只有2.8Ω,其他的引脚对VDD和GDN都是MΩ级别的。
应该是引脚坏掉了。
种花家刘氓兔 发表于 2025-5-30 10:19 [md]你尝试将UART5映射到其他GPIO上试试, 1、有可能这个PD2打坏了,内部上下拉有问题
会的 单独坏掉IO 或者是出现IO正常AD功能用不了了,之前出现过问题
板载stlink无法连接到设备
《年中视频学习心得》+我在年中学习STM32心得
STM32H7R7 CubeMX无配置问题
個人中心的頭像怎麽換掉
如何调整CubeMX的默认引脚
F103和G474的180°移相區別
cudeide执行run是烧录还是只是执行呢
無綫藍牙低功耗板卡NUCLEO-WBA65RI
Keil编译为何慢?
stm32cubemax
建议将此引脚悬空,测量输出方波,避免外部电路影响。
如不能输出,那么简单测量一下该引脚悬空状态下对GND 和 VDD的阻抗,粗略判断一下是否有损坏。
有条件的化,再换一片对比一下。
/* 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 ++;
}
}
PD2只有0.1v左右,几乎没有。
你尝试将UART5映射到其他GPIO上试试,
1、有可能这个PD2打坏了,内部上下拉有问题
2、有可能UART5 RX那部分,打坏了
3、也有可能以上两种情况都有
板子上的PD2是直接引出来的,断电直接测了一下,对VDD的电阻1.8KΩ,对GND的电阻只有2.8Ω,其他的引脚对VDD和GDN都是MΩ级别的。
应该是引脚坏掉了。
测了一下,是引脚坏掉了
会的 单独坏掉IO 或者是出现IO正常AD功能用不了了,之前出现过问题