野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16146|回复: 13

32外设gpio口复用问题

[复制链接]
发表于 2014-7-23 08:46:37 | 显示全部楼层 |阅读模式
想问一下火友们,例如串口uart1,是不是使能串口时钟,打开串口,32就默认的把uart1的RX和TX锁定到默认的GPIO的pa9和pa10上?然后配置这两个io口就ok了?
回复

使用道具 举报

发表于 2014-7-23 09:08:17 | 显示全部楼层
是的,具体配置看看野火的那个例程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-23 09:10:43 | 显示全部楼层
相津童 发表于 2014-7-23 09:08
是的,具体配置看看野火的那个例程

如果这样的话就和51不同了,有的高级一点的51片子是先把io口锁定到串口,这样就和32有区别了,fire大哥在不,给说说,是不是这样
回复 支持 反对

使用道具 举报

发表于 2014-7-23 09:14:13 | 显示全部楼层
idqiye 发表于 2014-7-23 09:10
如果这样的话就和51不同了,有的高级一点的51片子是先把io口锁定到串口,这样就和32有区别了,fire大哥在 ...

你要的答案都在这代码里,
就是使能串口时钟,使能串口功能就可以了
  1. void USART1_Config(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.     USART_InitTypeDef USART_InitStructure;
  5.    
  6.     /* config USART1 clock */
  7.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
  8.    
  9.     /* USART1 GPIO config */
  10.     /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  11.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  12.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  13.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.   
  16.     /* Configure USART1 Rx (PA.10) as input floating */
  17.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  18.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  19.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  20.       
  21.     /* USART1 mode config */
  22.     USART_InitStructure.USART_BaudRate = 115200;
  23.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  24.     USART_InitStructure.USART_StopBits = USART_StopBits_1;
  25.     USART_InitStructure.USART_Parity = USART_Parity_No ;
  26.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  27.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  28.     USART_Init(USART1, &USART_InitStructure);
  29.     USART_Cmd(USART1, ENABLE);
  30. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-23 09:16:49 | 显示全部楼层
雍蕴美 发表于 2014-7-23 09:14
你要的答案都在这代码里,
就是使能串口时钟,使能串口功能就可以了

使能串口时钟,和使能串口命令后,就默认串口到默认的复用io口
如果,想再用到其它io
口就在中间加重映射语句?我理解对吧?
回复 支持 反对

使用道具 举报

发表于 2014-7-23 09:29:37 | 显示全部楼层
使能了功能时钟只会影响到相应的功能IO
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-23 09:31:56 | 显示全部楼层
刀_口 发表于 2014-7-23 09:29
使能了功能时钟只会影响到相应的功能IO

说的好模糊?
回复 支持 反对

使用道具 举报

发表于 2014-7-23 09:45:43 | 显示全部楼层
idqiye 发表于 2014-7-23 09:31
说的好模糊?

看多几个程序就清晰了,都是一样的套路
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-23 10:25:28 | 显示全部楼层
笪芳馥 发表于 2014-7-23 09:45
看多几个程序就清晰了,都是一样的套路

程序我知道,模式是定的,就是不理解,像外部中断,有明确的库函数把外部中断连接到指定的GPIO口,但是像串口这样的就没有明确的函数把串口连接到GPIO口,对么?
回复 支持 反对

使用道具 举报

发表于 2014-7-23 10:27:46 | 显示全部楼层
idqiye 发表于 2014-7-23 10:25
程序我知道,模式是定的,就是不理解,像外部中断,有明确的库函数把外部中断连接到指定的GPIO口,但是像 ...

中断这个灵活性更高,你把它想成每个中断线都用一个多路开关与IO口相连
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-23 10:33:38 | 显示全部楼层
刀_口 发表于 2014-7-23 10:27
中断这个灵活性更高,你把它想成每个中断线都用一个多路开关与IO口相连

中断这个可以理解,串口这个和对应gpio怎么连的,不清楚或者说不明确吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-23 10:35:13 | 显示全部楼层
idqiye 发表于 2014-7-23 10:33
中断这个可以理解,串口这个和对应gpio怎么连的,不清楚或者说不明确吧

也就是串口和对应的默认gpio口中间是不是也可以默认有一个开关,关键这个开关是谁控制的?例程里面体现不出来额
回复 支持 反对

使用道具 举报

发表于 2014-7-23 10:39:24 | 显示全部楼层
idqiye 发表于 2014-7-23 10:35
也就是串口和对应的默认gpio口中间是不是也可以默认有一个开关,关键这个开关是谁控制的?例程里面体现不 ...

由串口时钟控制
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-23 10:50:47 | 显示全部楼层
刀_口 发表于 2014-7-23 10:39
由串口时钟控制

好吧,有时间,我仔细看一下库函数内部是怎么写的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 04:25 , Processed in 0.031244 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表