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添加虚拟串口 ...
随机推荐
- Export SQLite data to Excel in iOS programmatically(OC)
//For the app I have that did this, the SQLite data was fairly large. Therefore, I used a background ...
- 银行卡号码校验算法(Luhn算法,又叫模10算法)
有时候在网上办理一些业务时有些需要填写银行卡号码,当胡乱填写时会立即报错,但是并没有发现向后端发送请求,那么这个效果是怎么实现的呢. 对于银行卡号有一个校验算法,叫做Luhn算法. 一.银行卡号码的校 ...
- 字符串格式化(百分号&format)
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号方式: %[(name)][flags][width].[precision]typecode [ ]:表示 ...
- springcloud使用Hystrix实现微服务的容错处理
使用Hystrix实现微服务的容错处理 容错机制 如果服务提供者相应非常缓慢,那么消费者对提供者的请求就会被强制等待,知道提供者相应超时.在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者 ...
- centos7更改网卡名
虚拟机中安装centos7,分配两张网卡,安装完成后,使用ip addr 命令查看网卡,发现网卡名称为ens33 和 ens34,不符合平时的使用习惯,想把网卡名改为eth0和eth1,具体操作步骤如 ...
- 升级Chrome后无法打开网页
最近升级了网站,发现很多普通网站Chrome 都打不开了.... IE 可以正常打开,很是郁闷,重启电脑都不行. chrome://net-internals/#dns 点击如下按钮 清楚DNS缓 ...
- eclipse导入项目报错multiple annotations found at this line
eclipsewindow-->preference-->Valdation-->将Manual和Build下复选框全部取消选择
- 微信小程序入门与实战
1. 备注:并不是真的不需要下载,只是下载的包小于1MB,给人的感觉像是不用下载 2. 3. 理论上:同一级可以有无限个,纵向只能有五级 目前小程序分包大小有以下限制: 整个小程序所有分包大小不超过 ...
- VS Code折腾记 - (4) 常用必备插件推荐【前端】
前言 这篇文章只要让你做一些基础的配置,把vscode变得更加顺手: 插件的需求不是一成不变,有些插件我已经移除了..在最新的VSCODE 1.9.1中, 部分以前用插件实现的功能已经集成了,那就没有 ...
- MAC下代理工具Charles使用
一.跟踪HTTPS 1.下载官方的证书ssl.zip证书,解压成*.crt 2.可以通过邮箱或者发布到自己的服务器的方式,然后用手机去下载安装crt文件. 3.charles设置Proxy--> ...