stm32f103串口实现映射功能
在实际开发中,常常遇到串口的默认输出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串口实现映射功能的更多相关文章
- STM32F103 串口-IAP程序升级
STM32F103 串口-IAP程序升级 通常情况下我们给STM32系列的单片机烧录程序文件的时候,使用SWD.J-link或者通过设置BOOT引脚后,使用串口进行程序下载,这样的方式直接一次性将程序 ...
- CC2540串口输出调试功能
可以用printf()做串口打印输出 这个功能非常简单,首先在工程管理下的preprocessor把串口打开HAL_UART=TRUE. 然后看我的npi.c文件,多了什么自己琢磨,懒点的就直接复制吧 ...
- 使用ntfs的磁盘映射功能
当年95极受欢迎,是作为一个还算真正的32位系统.之前的3.1都是16位为基础的,很多api支持有限.相应的对于硬件性能的发掘还是值得肯定的 98对于95的取代是成功的,我想重要原因是图形尤其是游戏的 ...
- WeTest功能优化第1期:截图960px,云真机映射功能了解
第1期功能优化目录 [全线产品测试截图优化]安卓机型测试截图分辨率上升至960px [云真机新增Android 9]最新安卓系统,等你pick [云真机新增键盘映射功能]电脑键盘码字,云真机同步显示 ...
- thinkPHP 字段映射功能
thinkPHP的字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能,假设我们的User表里面有username和email字段,我们需要映射成另外的字段,定义方式 ...
- PDF 补丁丁 0.5.0.2691 发布(替换字库新增字符映射功能)
新版本在替换 PDF 字体功能中增加了替换字符的功能. 某些 PDF 文档可能由于编码错误的问题,复制出来的文本是乱码. 对于这种文档,可以使用此功能将错误的编码映射到正确的字符上,从而实现修复文档的 ...
- SSH有端口映射功能(访问本地端口=访问远程端口)
大部分SSH连接软件都有SSH通道转发功能,就是用这个实现的. 如果Delphi在代码上实现的话,用libSSH 或者 SecureBridge都可以. 代码基本不用帖,思路给大家讲一下吧. SSH有 ...
- 使用 Anydesk 5.1 TCP 通道(端口映射)功能从外网方便访问内网的 web/数据库等资源
Anydesk 5.1 带来一个新的功能:TCP 通道,在家办公时,通过互联网进行远程桌面连接到公司电脑,可以将家用电脑的某个端口,映射到公司网络的某个电脑( IP + 端口),不局限于被远程桌面连接 ...
- Windows系统添加虚拟串口及CanToolApp功能1的实现
项目开始尝试用com0com添加虚拟串口,但是遇到了问题,系统中可以看到添加的虚拟串口,但是用C#无法获取串口.经过多次尝试后,决定换用Virtual Serial Port Driver添加虚拟串口 ...
随机推荐
- CSS position:absolute浅析
一.绝对定位的特征 绝对定位有着与浮动一样的特性,即包裹性和破坏性. 就破坏性而言,浮动仅仅破坏了元素的高度,保留了元素的宽度:而绝对定位的元素高度和宽度都没有了. 请看下面代码: <!DOCT ...
- Dream Spark ------spark on yarn ,yarn的配置
<?xml version="1.0"?> <!-- Licensed under the Apache License, Version 2.0 (the &q ...
- 【windows核心编程】HideProcess
A Basic Windows DKOM Rootkit Pt 1 https://www.landhb.me/posts/v9eRa/a-basic-windows-dkom-rootkit-pt- ...
- 读写分离MYSQL类
2014年4月27日 12:34:08 概述: 1. 根据sql语句判断是连接读库还是写库 2. 链式调用$this->where()->get() 3. 不同的主机对应不同的实例, 不再 ...
- html复习之标签整理
<body>标签,网页上显示的内容放在这里开始学习<p>标签,添加段落<hx>标签,为网页添加标题加入强调语气,使用<strong>加粗和<em& ...
- Ubuntu 12.04 安装Tomcat7
1.下载Tomcat7 打开Tomcat官网 http://tomcat.apache.org,在左边的导航栏的“Download"中找到Tomcat7.0目录,点击后进入Tomcat7的页 ...
- Go语言Windows 10开发环境搭建:Eclipse+GoClipse
Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developer ...
- Java与PHPweb开发比较
参考:https://blog.csdn.net/loophome/article/details/83413878
- PHP取整函数之ceil,floor,round,intval的区别
我们经常用到的PHP取整函数,主要是:ceil,floor,round,intval. ceil -- 进一法取整 说明 float ceil ( float value ) 返回不小于 value ...
- JS实现集合和ECMA6集合
集合类似于数组,但是集合中的元素是唯一的,没有重复值的.就像你学高中数学的概念一样,集合还可以做很多比如,并集,交集,差集的计算.在ECMA6之前,JavaScript没有提供原生的Set类,所以只能 ...