STM32的IO口复用为串口之后的IO设置问题

2019-07-20 01:05发布

//USART1_TX PA.9 PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9 与 GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度 50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化 PA9, PA10  


我看官方大大写的程序里(usart.c) 关于IO复用为串口1之后,IO口设置如上。
这里有个重要的疑问,PA9是TX做输出设置为推挽复用输出没错,但是PA10是RX,为什么也设置成推完复用输出????
RX设置成输出还能做接收数据的IO口用吗??
我自己在网上查了下,都说PA9设置成推挽输出,PA10设置成浮空输入,如下
    //USART1 Tx(PA.09)     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     GPIO_Init(GPIOA, &GPIO_InitStructure);    //USART1 Rx(PA.10)     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     GPIO_Init(GPIOA, &GPIO_InitStructure);
是不是官方大大写的程序有误呢??本人刚开始学,没去试验程序,请大佬们看看,感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
wxz1029wxz
1楼-- · 2019-07-20 18:46
我现在更蒙了,刚查了手册,IO口复用为串口的时候,GPIOx_MODER不应该都配置成GPIO_Mode_AF;//复用功能吗?
官方给的是多加了一个GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出,已经是复用功能了,为什么还设置推挽输出。
网上给的GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //是把PA10设置成了浮空输入 ,不应该设置成AF复用吗。
正点原子
2楼-- · 2019-07-20 18:48
 精彩回答 2  元偷偷看……
wxz1029wxz
3楼-- · 2019-07-20 23:46
正点原子 发表于 2018-8-15 01:27
因为这么设置也能用。 这么说你能力理解么?


//USART1_TX PA.9 PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9 与 GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度 50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化 PA9, PA10


如果这么设置的话,PA10能做RX用吗??就是能做输入用吗?因为我看PA9和PA10都设置成了推挽复用输出
xuyaqi
4楼-- · 2019-07-21 05:17
wxz1029wxz 发表于 2018-8-15 09:13
//USART1_TX PA.9 PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9 与 GPI ...

如果实践证明能用就不要纠结了,处理问题不止一种办法。
xuyaqi
5楼-- · 2019-07-21 10:11
 精彩回答 2  元偷偷看……
wxz1029wxz
6楼-- · 2019-07-21 15:21
xuyaqi 发表于 2018-8-15 10:49
如果要理解的话,就是在硬件结构里,做输入时是上拉,做输出时是推挽。

您这回答 跟我那问题不对应啊

一周热门 更多>