stm32f103串口实现映射功能

发布者:灵感火花最新更新时间:2018-06-15 来源: eefocus关键字:stm32f103  串口  映射功能 手机看文章 扫描二维码
随时随地手机看文章

在实际开发中,经常遇到串口的默认输出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);//解决第一个数据发送失败的问题  


关键字:stm32f103  串口  映射功能 引用地址:stm32f103串口实现映射功能

上一篇:stm32-USART1重映射
下一篇:STM32小问题-复用调试接口JTAG/SWD为普通GPIO

推荐阅读最新更新时间:2024-03-16 16:05

8051单片机串口通信中的检错方法研究
0 引言 对于基于flash控制器的8051的芯片结构,一般在进行数据传输时,都是先通过串口将数据传送到flash控制器的buffer中。由于buffer的大小为512 bytes,所以每次传输的最大数据量为512bytes。本文中所讨论的三种检错方法的传输数据量均为512 bytes。 1 检错方式 基于8051的串口数据通信系统的硬件开发平台框图如图1所示。利用该平台进行数据传输时,通常有三种数据检错方式。 1.1 奇偶校验 奇偶校验是检错中比较常见的一种方法。它利用数据中的1的个数作为检错的标志位,若1的个数为奇数个,则错误检测的标志位为1,若1的个数为偶数,则错误检测的标志位为0。在发送端和接收端
[单片机]
STM32f103学习之RFID驱动
RFID驱动在现实的生活中用到的也十分多,但是笔者在实际工作第一次遇到这样的问题,也确实花费了很多时间来处理这个问题,花了九牛二虎之力终于还是弄出来了。下面就来讲述我解决这个我问题的过程,希望各位看官一些帮助。 我在实际运用中主要是通过SPI来进行通信和获取数据,I2C还没有去研究过如果那位大佬弄过还望指教。 网上的程序是可以实现寻卡、防冲撞等功能,但是在调用此功能的过程中我们需要配置SPI的时钟和片选,以及读写的次序。笔者就是在这个地方出现的问题。不知道为什么使用STM32自带的硬件SPI总线,初始化后读写数据还是不行(可能是自己不懂),最后我在浏览了网上很多文章后自己写了通过SPI读写RFID卡的软件时序。 相信在
[单片机]
<font color='red'>STM32f103</font>学习之RFID驱动
基于CCS工程MSP430串口升级(一)
第一次接触MSP430的芯片,第一次使用CCS开发环境,花了将近一个星期的时间,才把MSP430串口升级做出来。 同样分成BOOT,APP,上位机,三个部分来讲解。 BOOT 在lnk_msp430fg479.cmd中修改BOOT Flash的起始地址(0xF000~0xFFE0),将近4K的Flash MEMORY { SFR : origin = 0x0000, length = 0x0010 PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0 PERIPHERALS_16BIT : origin = 0x0100, len
[单片机]
基于CCS工程MSP430<font color='red'>串口</font>升级(一)
AVR片内两个串口互相通信的单片机源码
学习单片机串口程序时,我们经常会写一个串口自发自收程序,来测试硬件以及我们编写的程序; 自发自收很简单,只需要将串口的RXD与TXD两个IO短接就行; 而我们的XMEGA片上的串口非常丰富; 我将串口C0的TXD与串口E0的RXD用杜邦线链接起来,如果E0正确收到了C0发来的数据,便在虚拟串口输出相关信息虽然串口通信是一个简单而古老的通信协议,而且串口与PC直接通信越来越多地被USB代替, 但是,大量的应用仍然直接或间接地通过串口通信来完成,因此它的重要性是不言而喻的 相关图片与代码如下 ------
[单片机]
AVR片内两个<font color='red'>串口</font>互相通信的单片机源码
Stm32f103rct6ADC电压采集简介及注意点
STM32f103 系列有 3 个 ADC,精度为12 位,每个 ADC 最多有 16 个外部通道。其中ADC1和ADC2 都有 16 个外部通道,ADC3根据CPU 引脚的不同通道数也不同,一般都有8 个外部通道。ADC 的模式非常多,功能非常强大。 ADC 输入范围为:V REF- ≤ V IN ≤ V REF+ ,一般把 V SSA 和 V REF- 接地,把 V REF+ 和 V DDA 接3V3,得到ADC 的输入电压范围为:0~3.3V。 通道: 注入通道: 注入,可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种。如果在规则通道转换过程中,有注入通道插队,那么就要
[单片机]
<font color='red'>Stm32f103</font>rct6ADC电压采集简介及注意点
建立在单片机和PC串口通信基础上的测温系统设计
温度是工业控制中主要的被控参数之一,在日常生活及工农业生产中经常要用到温度的检测及控制,因此研究温度的测量方法和装置具有重要的意义。传统方法多以热电阻和热电偶等为温度传感元件,而这种模拟温度传感器输出为模拟信号,必须经过A/D 转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结构比较复杂、抗干扰性差、布线麻烦以及成本高等缺点。   针对上述问题,该设计提出了基于Dallas 半导体公司的数字式温度传感器DS18B20[1-2]和ATMEL 公司AT89S52 单片机构成的温度测量系统,并可通过串口连接在PC 系统上进行实时显示,该系统安装简易,可靠性高,适用于恶劣环境的现场温度测量。   1 系统构成  
[单片机]
建立在单片机和PC<font color='red'>串口</font>通信基础上的测温系统设计
基于STM32V评估板的嵌入式实时操作系统μC/OS-II串口通信设计
ARM是目前嵌入式领域中应用最广泛的RISC微处理器结构,以低成本、低功耗、高性能的特点占据了嵌入式系统应用领域的领先地位,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。STM32F103VB是基于ARM新内核Cortex-M3的通用微处理器,STM32V评估板是基于该芯片的学习板并集成了仿真调试器(Ulink_Me),可以方便用户快速学习和开发用户程序。目前常见的嵌入式系统有:WinCE、Linux、pSoS、VxWorks和μC/OS-II等。μC/OS-Ⅱ是专门为嵌入式系统应用设计的,具有源码公开、实时性好、可移植裁剪、高效稳定和教学科研免费使用等特点,已经成功移植到8、16、32和64位等多种
[单片机]
基于STM32V评估板的嵌入式实时操作系统μC/OS-II<font color='red'>串口</font>通信设计
基于FPGA的PCI总线串口卡设计
     随着计算机测试技术的飞速发展,越来越多的外部设备通过串口与计算机进行通信,实现信息共享以及设备的集中控制和管理。利用串口进行通信具有结构简单、传输距离远、成本低廉等优点,被广泛应用于各个领域。同时,PCI(Peripheral Component Interconnect)总线是一种高性能32/64位局部总线,最大数据传输速率为132 Mb/s,可同时支持多组外设,数据吞吐量大,是目前应用最广泛、最流行的一种高速同步总线。因此,利用PCI总线实现上位机与外部设备的串口通信,可以提高通信能力。   由于大部分I/O 设备没有PCI总线功能,要实现设备与PCI总线的连接,需要PCI接口芯片、通用异步收发器UART(Uni
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved