STM32
直播中

徐胤

7年用户 1096经验值
私信 关注
[问答]

STM32L152拔掉stlink后,uart1 dma接收中断就不进入了怎么解决?

STM32L152接stlink四线SWD接口(stlink内部将PA13,PA14上拉)程序运行正常。如果拔掉stlink(PA13,PA14没上拉),uart1可以dma发送,但是uart1dma接收中断就不进入了,程序其他功能正常。不接stlink,复位也同样的问题。但是接上stlink复位,程序又完全正确了。

回帖(1)

木頭瓶子

2024-5-8 17:37:56
这个问题可能是由于STM32L152的PA13和PA14引脚在拔掉ST-Link后没有上拉导致的。在STM32中,UART1的TX和RX引脚分别是PA9和PA10。然而,PA13和PA14是SWD接口的SWCLK和SWDIO引脚,它们在连接ST-Link时会被内部上拉。

当拔掉ST-Link后,PA13和PA14没有上拉,可能会导致UART1的DMA接收中断无法正常工作。为了解决这个问题,你可以尝试以下方法:

1. 在程序中手动上拉PA13和PA14引脚。你可以通过设置GPIO的输出类型为推挽输出,并设置引脚为高电平来实现上拉。

```c
GPIO_InitTypeDef GPIO_InitStructure;

// 配置PA13为推挽输出,高电平
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_13);

// 配置PA14为推挽输出,高电平
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_14);
```

2. 如果手动上拉引脚后问题仍然存在,尝试检查UART1的配置,确保DMA接收中断已经正确配置。检查UART1的中断使能位和DMA接收中断使能位是否已经设置。

3. 检查UART1的DMA接收中断服务函数,确保在中断触发时,DMA接收缓冲区的指针和大小已经正确设置。

4. 如果以上方法都不能解决问题,尝试使用其他UART通道(如UART2或UART3)进行测试,以排除硬件故障的可能性。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分