OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3291|回复: 3

USART3重映射问题

[复制链接]

45

主题

104

帖子

0

精华

高级会员

Rank: 4

积分
576
金钱
576
注册时间
2016-6-16
在线时间
101 小时
发表于 2018-1-12 17:20:03 | 显示全部楼层 |阅读模式
1金钱
STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能,即一个外设的引脚除了具有默认的脚位外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的脚位,拿USART3来说,STM32
手册中介绍到UART的重映射可分为三中,通过对寄存器的设置可以实现:
00:没有重映像(CH1/PA6,CH2/PA7,CH3/PB0,CH4/PB1);  
01:未用组合;
10:部分映像(CH1/PB4,CH2/PB5,CH3/PB0,CH4/PB1);  
11:完全映像(CH1/PC6,CH2/PC7,CH3/PC8,CH4/PC9)

那么现在有个疑问?设置了重映射USART3是不是对所有的管脚(RX、TX、CK、CTS、RTS)都同时生效呢?如果想只应用UXART3的TX和RX重映射,而把USART的CK、CTS、RTS当作普通的IO来使用,请问可以实现吗?应该如何设置呢?多谢各位的不吝赐教啊。

最佳答案

查看完整内容[请看2#楼]

重映射是全部生效的,不过你可以设置IO为GPIO功能,就不会影响使用,当正常IO用,也是OK的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-12 17:20:04 | 显示全部楼层
重映射是全部生效的,不过你可以设置IO为GPIO功能,就不会影响使用,当正常IO用,也是OK的。
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-1-12 17:55:03 | 显示全部楼层
当日可以
回复

使用道具 举报

6

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2018-1-12 22:43:02 | 显示全部楼层
[mw_shl_code=c,true]void usart3_init(u32 bound)
{  

        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC, ENABLE); // GPIOB时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口3时钟使能
        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);

        USART_DeInit(USART3);                           //复位串口3
                 //USART3_TX   PB10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;      //PB10
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_Init(GPIOC, &GPIO_InitStructure);          //初始化PB10
   
    //USART3_RX          PB11
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;           //浮空输入
    GPIO_Init(GPIOC, &GPIO_InitStructure);                          //初始化PB11
       
        USART_InitStructure.USART_BaudRate = bound;                     //波特率一般设置为9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;     //字长为8位数据格式
        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;        //收发模式
  
        USART_Init(USART3, &USART_InitStructure); //初始化串口3
  

        USART_Cmd(USART3, ENABLE);                  //使能串口
       
        //使能接收中断
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启中断   
       
        //设置中断优先级
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
}[/mw_shl_code]
部分重映射的配置如上,
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 22:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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