博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32 ~ UART 重映射
阅读量:6262 次
发布时间:2019-06-22

本文共 2344 字,大约阅读时间需要 7 分钟。

在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32 上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的 I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。

第一次这么干感觉心里没底,所以针对USART1在STM32F103RBT6的板子上实现了一把,以下是相关的测试代码:

/*****************************************************************************//函数名:void Uart1_Init(void)//功能:串口(USART1)重映射初始化配置函数,由TX PA9~PB6    RX PA10~~PB7*****************************************************************************/void Uart1_Init(void){   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |    RCC_APB2Periph_AFIO,ENABLE);//开启端口B和复用功能时钟   GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射   GPIO_InitTypeDef GPIO_InitStructure;   //uart 的GPIO重映射管脚初始化 PB6 usart1_TX PB7 USART_RX   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽输出   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;   GPIO_Init(GPIOB,&GPIO_InitStructure);   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬空输入   GPIO_Init(GPIOB,&GPIO_InitStructure);   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);   USART_InitTypeDef USART_InitStructure;   //串口参数配置:9600,8,1,无奇偶校验,无硬流量控制 ,使能发送和接收   USART_InitStructure.USART_BaudRate = 9600;   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;   USART_Init(USART1, &USART_InitStructure);   USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//串口接收中断   USART_Cmd(USART1, ENABLE);}

  

 

简要分析重映射骤为:

1.打开重映射时钟和USART重映射后的I/O口引脚时钟,

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |RC C_APB2Periph_AFIO,ENABLE);

2.I/O口重映射开启. 

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure);  

只需要简单的以上三步就能轻松搞定。

转载于:https://www.cnblogs.com/einstein-2014731/p/4949007.html

你可能感兴趣的文章
Mysql优化策略
查看>>
python基础知识踩点
查看>>
3月5日云栖精选夜读 | 2019阿里云开年Hi购季新用户分会场全攻略!
查看>>
IJCAI阿里论文 | JUMP: 一种点击和停留时长的协同预估器
查看>>
腾讯十年投资记
查看>>
搭建直播平台需要从CDN“内部”入手
查看>>
python实现堆栈数据结构及其基本方法
查看>>
制造业瓶颈如何突破?“智变与突破——制造业人工智能产业峰会·南京”来献策...
查看>>
Linux shell 遍历
查看>>
MySQL ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
查看>>
如何设计一个高可用的运营系统
查看>>
SQL数据库学习之路(一)
查看>>
Prometheus监控实践:Kubernetes集群监控
查看>>
创建表格存储(Table Store)结果表
查看>>
网站301跳转
查看>>
Android 权限管理
查看>>
Django配置MySQL数据库及采坑记
查看>>
关于DialogFragment全屏方案
查看>>
WPF中查看PDF文件
查看>>
旷视科技 CSG 算法负责人姚聪:深度学习时代的文字检测与识别技术 | AI 研习社 103 期大讲堂...
查看>>