在实际开发中,常常遇到串口的默认输出IO口被其它模块占用了,所以我们要用到串口IO口映射功能。是指将原来实现功能的IO口映射到其它指定IO口,其它不变。详细操作例如以下:

先贴出默认下的串口初始化设置:

void USART1Conf(u32 baudRate)
{
USART_InitTypeDef USART_InitSturct;//定义串口1的初始化结构体 GPIO_InitTypeDef GPIO_InitStruct;//定义串口相应管脚的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE);//打开串口管脚时钟
//USART1_Tx_Pin Configure
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//输出引脚
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//设置最快速度50MHz
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用输出
GPIO_Init(GPIOA , &GPIO_InitStruct);//将初始化好的结构体装入寄存器 //USART1_Rx_Pin Configure
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO模式悬浮输入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;//输入引脚
GPIO_Init(GPIOA, &GPIO_InitStruct);//将初始化好的结构体装入寄存器 //USART1 Configure
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);//时钟使能
USART_InitSturct.USART_BaudRate = baudRate;//波特率19200
USART_InitSturct.USART_WordLength = USART_WordLength_8b;//数据宽度8位
USART_InitSturct.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitSturct.USART_Parity = USART_Parity_No;//无奇偶校验
USART_InitSturct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitSturct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能发送与接收
USART_Init(USART1 , &USART_InitSturct);//将初始化好的结构体装入寄存器
//USART1_INT Configure
USART_ITConfig(USART1 , USART_IT_RXNE , ENABLE);//使能接收中断
// USART_ITConfig(USART1 , USART_IT_TXE , ENABLE);
USART_Cmd(USART1 , ENABLE);//打开串口
USART_ClearFlag(USART1 , USART_FLAG_TC);//解决第一个数据发送失败的问题
}

以下是映射后的串口设置,依据datasheet,重映射设置IO口: Rx: PA9 ---- PB6     Tx: PA10 ------ PB7

void USART1Conf(u32 baudRate)
{
USART_InitTypeDef USART_InitSturct;//定义串口1的初始化结构体 GPIO_InitTypeDef GPIO_InitStruct;//定义串口相应管脚的结构体 //使用串口IO口映射功能 add by LC 2015.07.01 18:03
//重映射设置 PA9 ---- PB6 PA10 ------ PB7
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能要映射IO模块
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOB , ENABLE);//打开串口管脚时钟
//USART1_Tx_Pin Configure
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;//输出引脚
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//设置最快速度50MHz
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用输出
GPIO_Init(GPIOB , &GPIO_InitStruct);//将初始化好的结构体装入寄存器 //USART1_Rx_Pin Configure
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO模式悬浮输入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;//输入引脚
GPIO_Init(GPIOB, &GPIO_InitStruct);//将初始化好的结构体装入寄存器 GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
//end by LC 2015.07.01 18:03 //USART1 Configure
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);//时钟使能
USART_InitSturct.USART_BaudRate = baudRate;//波特率19200
USART_InitSturct.USART_WordLength = USART_WordLength_8b;//数据宽度8位
USART_InitSturct.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitSturct.USART_Parity = USART_Parity_No;//无奇偶校验
USART_InitSturct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitSturct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能发送与接收
USART_Init(USART1 , &USART_InitSturct);//将初始化好的结构体装入寄存器
//USART1_INT Configure
USART_ITConfig(USART1 , USART_IT_RXNE , ENABLE);//使能接收中断
// USART_ITConfig(USART1 , USART_IT_TXE , ENABLE);
USART_Cmd(USART1 , ENABLE);//打开串口
USART_ClearFlag(USART1 , USART_FLAG_TC);//解决第一个数据发送失败的问题
}

stm32f103串口实现映射功能的更多相关文章

  1. STM32F103 串口-IAP程序升级

    STM32F103 串口-IAP程序升级 通常情况下我们给STM32系列的单片机烧录程序文件的时候,使用SWD.J-link或者通过设置BOOT引脚后,使用串口进行程序下载,这样的方式直接一次性将程序 ...

  2. CC2540串口输出调试功能

    可以用printf()做串口打印输出 这个功能非常简单,首先在工程管理下的preprocessor把串口打开HAL_UART=TRUE. 然后看我的npi.c文件,多了什么自己琢磨,懒点的就直接复制吧 ...

  3. 使用ntfs的磁盘映射功能

    当年95极受欢迎,是作为一个还算真正的32位系统.之前的3.1都是16位为基础的,很多api支持有限.相应的对于硬件性能的发掘还是值得肯定的 98对于95的取代是成功的,我想重要原因是图形尤其是游戏的 ...

  4. WeTest功能优化第1期:截图960px,云真机映射功能了解

    第1期功能优化目录 [全线产品测试截图优化]安卓机型测试截图分辨率上升至960px [云真机新增Android 9]最新安卓系统,等你pick [云真机新增键盘映射功能]电脑键盘码字,云真机同步显示  ...

  5. thinkPHP 字段映射功能

    thinkPHP的字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能,假设我们的User表里面有username和email字段,我们需要映射成另外的字段,定义方式 ...

  6. PDF 补丁丁 0.5.0.2691 发布(替换字库新增字符映射功能)

    新版本在替换 PDF 字体功能中增加了替换字符的功能. 某些 PDF 文档可能由于编码错误的问题,复制出来的文本是乱码. 对于这种文档,可以使用此功能将错误的编码映射到正确的字符上,从而实现修复文档的 ...

  7. SSH有端口映射功能(访问本地端口=访问远程端口)

    大部分SSH连接软件都有SSH通道转发功能,就是用这个实现的. 如果Delphi在代码上实现的话,用libSSH 或者 SecureBridge都可以. 代码基本不用帖,思路给大家讲一下吧. SSH有 ...

  8. 使用 Anydesk 5.1 TCP 通道(端口映射)功能从外网方便访问内网的 web/数据库等资源

    Anydesk 5.1 带来一个新的功能:TCP 通道,在家办公时,通过互联网进行远程桌面连接到公司电脑,可以将家用电脑的某个端口,映射到公司网络的某个电脑( IP + 端口),不局限于被远程桌面连接 ...

  9. Windows系统添加虚拟串口及CanToolApp功能1的实现

    项目开始尝试用com0com添加虚拟串口,但是遇到了问题,系统中可以看到添加的虚拟串口,但是用C#无法获取串口.经过多次尝试后,决定换用Virtual Serial Port Driver添加虚拟串口 ...

随机推荐

  1. P4549 【模板】裴蜀定理

    题目描述 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小 输入输出格式 输入格式: 第一行给出数字N,代表有N个数 下面一行给出 ...

  2. CodeForces 1059C

    Description Let's call the following process a transformation of a sequence of length nn . If the se ...

  3. Ubuntu 14.04 + gnome session back (metacity) 任务栏右上角图标消失问题解决

    没错, 就是说右上角的所有图标 (时间啊, 系统啊所有的)都消失了. 通过下列命令可以恢复 dconf reset -f /org/gnome/gnome-panel/ 参考这篇帖子: Upgrade ...

  4. Implement Queue by Two Stacks & Implement Stack using Queues

    Implement Queue by Two Stacks Implement the following operations of a queue using stacks. push(x) -- ...

  5. shell函数中eof报错(warning: here-document at line 9 delimited by end-of-file (wanted `EOF'))

    在shell编写函数时,函数中有eof和EOF,如果是在sublime编写按照格式tab缩进会有以下报错 解决办法: 取消函数中的tab缩进,在运行即可

  6. STS热部署,springboot项目中修改代码不用重新启动服务

    方法如下: 1.在pom文件中引入  devtools  依赖: <dependency> <groupId>org.springframework.boot</grou ...

  7. Java中final关键字概述

    使用final修饰过的变量都不可以改变: 1.final修饰变量 恒定不变的属性,可以用final关键字来修饰: 变量名建议全部使用大写 final修饰的变量不能改变,如果程序中重新赋值,编译报错 例 ...

  8. Flask 目录

    flask入门 flask 源码剖析 Flask session Flask form

  9. Online DDL工具的安装与使用

    最近经常在线上经常遇到有性能问题的SQL,有些表没有合理添加索引,有些表添加的索引不合理,各种各样的问题,导致SQL的执行效率不高.这时DBA们不得不重构SQL,使其达到最好的性能,这时我们往往要在线 ...

  10. Smashing The Browser:From Vulnerability Discovery To Exploit学习记录

    浏览器Fuzz技术 漏洞挖掘 白盒挖掘 代码审计 自动化代码分析 黑盒挖掘 Fuzzing 两种Fuzzing技术 静态Fuzzing 基于变异的 文件.文档 多媒体 bf3 基于生成的 浏览器 重点 ...