大侠们,求重映射的详解和范例啊,小弟拿个开发板学到这卡住了...
回复 楼主 霜天 的帖子
GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE); //Uart3 pin重映射到PD8 PD9
这个例子说明你的串口引脚从默认的PB10 PB11 重映射到PD8 PD9那么你在板子上的连接就是PD8 PD9 而PB10 PB11可以做别的用处。
不知道楼主在哪里卡住了呢,你想重映射哪个引脚的哪个功能呢?
回复 沙发 daicheng 的帖子
我看着板子上USART3接口用的是485通信,三个引脚分别是PD8,PD9,PD7.这样的情况我不懂,对于第三个引脚是不是也要设置的,那样的话程序还要加点什么?纯粹新手...请见谅!
咱们就以串口3为例子吧:
GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE); 使能串口3映射
#define GPIO_PartialRemap_USART3 ((u32)0x00140010) 部分映射
#define GPIO_FullRemap_USART3 ((u32)0x00140030) 全部映射
看下面的图:
如果说的不好可以在讨论一下
回复 4楼 daicheng 的帖子
说的很好的呀,这个刚研究出来了,而且貌似后面应该还有些配置设置。我是这么设置的,不知道对不对:
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;//tx
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
可这么设置也还是不能收发数据,同事说应该还有个485的方向控制要控制,这个是怎么配置的,请教牛人
我的串口3的配置
void USART3_Configuration(uint32_t UART_baud) //波特率,如115200
{
USART_InitTypeDef USART_InitStructure;
GPIO_PinRemapConfig(GPIO_FullRemap_USART3,ENABLE);
/* USARTx configured as follow:
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = UART_baud;//115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART3_COMInit(&USART_InitStructure);
}
void USART3_COMInit(USART_InitTypeDef* USART_InitStruct)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD| RCC_APB2Periph_AFIO, ENABLE); //使能串口所有GPIO模块时钟,并使能AFIO模块时钟
/* Enable UART clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //使能串口模块时钟
/* Configure USART Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //设置TX引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* Configure USART Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //设置RX引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* USART configuration */
USART_Init(USART3, USART_InitStruct); //初始化USART
/* Enable USART */
USART_Cmd(USART3, ENABLE); //使能串口模块
}
波特率119200以上就会出现乱码,牛人说可能是我的485线太长了,9600一下没问题
回复 6楼 yueni_zhao 的帖子
补充下,这个用的是PD和PD9