F030串口1不通,串口2通

本文讲述了串口1功能复用导致的printf问题,通过查阅GPIO_AFR表并定位代码错误,发现GPIO_AF1_USART1需改为GPIO_AF0_USART1。解决办法在于修改GPIO配置以正确复用USART1的引脚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象:

串口2可以正常printf到窗口,串口1printf没有反应

原因:

由于串口1的功能复用和串口2的功能复用不相同,查表可得
Table 12. Alternate functions selected through GPIOA_AFR registers for port A串口2复用的AF1串口1复用的AF0
而代码中均复制了AF1的复用,导致了串口1无法正常使用:

		
		/*
			USART1
			PB6
			PB7
		*/
		__HAL_RCC_GPIOB_CLK_ENABLE();				//使能GPIOA时钟
		__HAL_RCC_USART1_CLK_ENABLE();				//使能USART1时钟

		GPIO_Initure.Pin = GPIO_PIN_6|GPIO_PIN_7;
		GPIO_Initure.Mode = GPIO_MODE_AF_PP;
		GPIO_Initure.Pull = GPIO_NOPULL;
		GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;
		GPIO_Initure.Alternate = GPIO_AF1_USART1;  //此处有误,需改为GPIO_AF0_USART1
		HAL_GPIO_Init(GPIOB, &GPIO_Initure);


		/*
			USART2
			PA2
			pA3
		*/
		__HAL_RCC_GPIOA_CLK_ENABLE();				//使能GPIOA时钟
		__HAL_RCC_USART2_CLK_ENABLE();				//使能USART2时钟

		GPIO_Initure.Pin = GPIO_PIN_2|GPIO_PIN_3;
		GPIO_Initure.Mode = GPIO_MODE_AF_PP;
		GPIO_Initure.Pull = GPIO_PULLUP;
		GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;
		GPIO_Initure.Alternate = GPIO_AF1_USART2;
		HAL_GPIO_Init(GPIOA, &GPIO_Initure);

解决办法:

串口1的复用由GPIO_AF1_USART1改为GPIO_AF0_USART1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值