最近在调试esp8266模块,把原来在stm32f103上使用的程序移植到兼容stm32f429。在串口初始化程序中发现了一些不同,有以下疑惑:在stm32f103模板程序中关于串口GPIO模式设置的一段历程如下,
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
//USART1_RX GPIOA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;// 浮点输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA10
而在stm32f429的串口初始化中,对于GPIO模式设置的历程如下,
GPIO_Initure.Pin=GPIO_PIN_9; //PA9
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //推挽输出模式
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速
GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为串口1
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化GPIOA9
GPIO_Initure.Pin=GPIO_PIN_10; //PA10
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化GPIOA10
这里的异同点是在stm32f103例程中PA10设置为浮点输入模式,而在stm32f429中设置为推挽输出模式。
疑惑在于:PA10 作为USART1_RX设置为推挽输出模式为什么也可以?相反设置为浮点输入模式反而不能正常工作?GPIO输出模式怎么可以触发串口接收中断?
希望遇到过同样问题的前辈能够给予解惑,也希望没有解决这类疑惑的人可以和我一起讨论。 |