[求助] STM32F107VCT6学习中,重映射这卡住了...

霜天   2011-3-21 16:54 楼主
大侠们,求重映射的详解和范例啊,小弟拿个开发板学到这卡住了...

回复评论 (6)

回复 楼主 霜天 的帖子

GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE); //Uart3 pin重映射到PD8 PD9
这个例子说明你的串口引脚从默认的PB10 PB11 重映射到PD8 PD9那么你在板子上的连接就是PD8 PD9 而PB10 PB11可以做别的用处。

不知道楼主在哪里卡住了呢,你想重映射哪个引脚的哪个功能呢?
处处留心皆学问!
点赞  2011-3-21 17:24

回复 沙发 daicheng 的帖子

我看着板子上USART3接口用的是485通信,三个引脚分别是PD8,PD9,PD7.这样的情况我不懂,对于第三个引脚是不是也要设置的,那样的话程序还要加点什么?纯粹新手...请见谅!
点赞  2011-3-22 08:44
咱们就以串口3为例子吧:
GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE);  使能串口3映射
#define GPIO_PartialRemap_USART3   ((u32)0x00140010)   部分映射
#define GPIO_FullRemap_USART3      ((u32)0x00140030)    全部映射
看下面的图:
1.jpg
2.jpg
如果说的不好可以在讨论一下
处处留心皆学问!
点赞  2011-3-22 10:27

回复 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的方向控制要控制,这个是怎么配置的,请教牛人
点赞  2011-3-22 10:49

我的串口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一下没问题
点赞  2012-4-20 15:57

回复 6楼 yueni_zhao 的帖子

补充下,这个用的是PD和PD9
点赞  2012-4-20 15:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复