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

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

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

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

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

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. CSS position:absolute浅析

    一.绝对定位的特征 绝对定位有着与浮动一样的特性,即包裹性和破坏性. 就破坏性而言,浮动仅仅破坏了元素的高度,保留了元素的宽度:而绝对定位的元素高度和宽度都没有了. 请看下面代码: <!DOCT ...

  2. Dream Spark ------spark on yarn ,yarn的配置

    <?xml version="1.0"?> <!-- Licensed under the Apache License, Version 2.0 (the &q ...

  3. 【windows核心编程】HideProcess

    A Basic Windows DKOM Rootkit Pt 1 https://www.landhb.me/posts/v9eRa/a-basic-windows-dkom-rootkit-pt- ...

  4. 读写分离MYSQL类

    2014年4月27日 12:34:08 概述: 1. 根据sql语句判断是连接读库还是写库 2. 链式调用$this->where()->get() 3. 不同的主机对应不同的实例, 不再 ...

  5. html复习之标签整理

    <body>标签,网页上显示的内容放在这里开始学习<p>标签,添加段落<hx>标签,为网页添加标题加入强调语气,使用<strong>加粗和<em& ...

  6. Ubuntu 12.04 安装Tomcat7

    1.下载Tomcat7 打开Tomcat官网 http://tomcat.apache.org,在左边的导航栏的“Download"中找到Tomcat7.0目录,点击后进入Tomcat7的页 ...

  7. Go语言Windows 10开发环境搭建:Eclipse+GoClipse

    Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developer ...

  8. Java与PHPweb开发比较

    参考:https://blog.csdn.net/loophome/article/details/83413878

  9. PHP取整函数之ceil,floor,round,intval的区别

    我们经常用到的PHP取整函数,主要是:ceil,floor,round,intval. ceil -- 进一法取整 说明 float ceil ( float value ) 返回不小于 value ...

  10. JS实现集合和ECMA6集合

    集合类似于数组,但是集合中的元素是唯一的,没有重复值的.就像你学高中数学的概念一样,集合还可以做很多比如,并集,交集,差集的计算.在ECMA6之前,JavaScript没有提供原生的Set类,所以只能 ...