打印

stm32f103vet6的USART3重映射

[复制链接]
5847|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cpl_1|  楼主 | 2013-3-9 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下,我想把USART3重新映射到PC11,PC10引脚上,用下面的语句配置不成功,有什么问题呢?谢谢!

       RCC->APB2ENR|=1<<0;   //使能AFIO 时钟 ,以操作AFIO_MAPR寄存器
        RCC->APB2ENR|=1<<4;   //使能PORTC口时钟   

        AFIO->MAPR|=0x00000010; //开启uart3重映射

        GPIOC->CRH&=0XFFFF00FF; //重映射后的引脚配置PC11 RX3; PC10 TX3;
        GPIOC->CRH|=0X00008B00; //IO状态设置
       
        RCC->APB1ENR|=1<<18;  //使能串口3时钟  ,APB1总线频率36MHz

        RCC->APB1RSTR|=1<<18;   //复位串口3
        RCC->APB1RSTR&=~(1<<18);//停止复位                     
        //波特率设置
        USART3->BRR=mantissa; // 波特率设置         
        USART3->CR1|=0X200C;  //1位停止,无校验位.

沙发
cpl_1|  楼主 | 2013-3-9 22:48 | 只看该作者
PC11,PC10引脚原来是做UART4使用的,实验可以用。可是我想把串口3重映射到pc11,pc10引脚就不成功了。

使用特权

评论回复
板凳
cjhk| | 2013-3-10 18:53 | 只看该作者
这个不是很了解   兄弟  对不住啊  我帮你顶一个   希望有玩过的兄弟  能够帮帮忙   呵呵  顶起来

使用特权

评论回复
地板
cpl_1|  楼主 | 2013-3-11 18:09 | 只看该作者
cjhk 发表于 2013-3-10 18:53
这个不是很了解   兄弟  对不住啊  我帮你顶一个   希望有玩过的兄弟  能够帮帮忙   呵呵  顶起来  ...

:)谢谢!我也刚开始学这个。

使用特权

评论回复
5
cpl_1|  楼主 | 2013-3-12 16:39 | 只看该作者
本帖最后由 cpl_1 于 2013-3-12 16:49 编辑

//        AFIO->MAPR=1<<4;   //重映射语句放在时钟开启前不行

//        RCC->APB2ENR|=1<<0;   //使能AFIO 时钟 ,以操作AFIO_MAPR寄存器
//        AFIO->MAPR=1<<4; //开启USART3部分重新映射
//        RCC->APB2ENR|=1<<4;   //使能PORTC口时钟
//        RCC->APB1ENR|=1<<18;  //使能串口3时钟  ,APB1总线频率36MHz

//        RCC->APB2ENR|=1<<0;   //使能AFIO 时钟 ,以操作AFIO_MAPR寄存器
//        RCC->APB2ENR|=1<<4;   //使能PORTC口时钟
//        AFIO->MAPR=1<<4; //开启USART3部分重新映射
//        RCC->APB1ENR|=1<<18;  //使能串口3时钟  ,APB1总线频率36MHz

        RCC->APB2ENR|=1<<0;   //使能AFIO 时钟 ,以操作AFIO_MAPR寄存器
        RCC->APB2ENR|=1<<4;   //使能PORTC口时钟
        RCC->APB1ENR|=1<<18;  //使能串口3时钟  ,APB1总线频率36MHz
        AFIO->MAPR=1<<4; //开启USART3部分重新映射
        
        GPIOC->CRH&=0XFFFF00FF;   
        GPIOC->CRH|=0X00008B00;//IO状态设置
        
//        AFIO->MAPR=1<<4; //开启USART3部分重新映射
//        RCC->APB1ENR|=1<<18;  //使能串口3时钟  ,APB1总线频率36MHz          OK
         
        RCC->APB1RSTR|=1<<18;   //复位串口3
        RCC->APB1RSTR&=~(1<<18);//停止复位                     
        //波特率设置
         USART3->BRR=mantissa; // 波特率设置         
        USART3->CR1|=0X200C;  //1位停止,无校验位. 使能串口

今天才发现原因,原来由于粗心,USART3重新映射时没有把UART4->DR改成USART3->DR,所以数据发送不出去。不过发现AFIO->MAPR=1<<4; 语句放在GPIOC引脚端口配置语句的前或后面都能重映射成功;也可以放在PORTC时钟开启对前面,就像上面注释掉的语句那样。不过实验时只单独针对USART3,没有加上其它的功能和同时映射多个设备。

使用特权

评论回复
6
hello_海涛| | 2016-10-16 22:28 | 只看该作者
还是库函数方便啊

使用特权

评论回复
7
gejigeji521| | 2017-10-5 12:17 | 只看该作者
这个确实是个细心的活。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

278

帖子

1

粉丝