stm32f103串口实现重映射功能

发布者:WhisperingRain最新更新时间:2019-04-12 来源: eefocus关键字: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串口实现重映射功能

上一篇:两种方法实现STM32F103向串口一直发送数据
下一篇:STM32F103两种串口输出的方式

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

STM32F103跳过停止模式,不能进入停止模式
问题: STM32F103跳过停止模式,不能进入停止模式stopmode static void led_thread_entry(void* parameter) { unsigned int count = 0; rt_hw_led_init(); while(1) { rt_hw_led_on(0); rt_thread_delay(RT_TICK_PER_SECOND / 2); rt_hw_led_off(0); rt_thread_delay(RT_TICK_PER_SECOND / 2); { //失能 SysTic
[单片机]
<font color='red'>STM32F103</font>跳过停止模式,不能进入停止模式
串口通信(用CubeMX学习STM32)
前言: STM32串口介绍 串行通信是单片机与外部设备或其他计算机交换信息的一个方式, 数据一位一位的按顺序传送, 其优点是只需要一条传输线, 协议简单, 但是缺点就是传送速度较慢。 串口是单片机上非常便捷的一个工具, 当写程序需要调试的时候, 它可以很方便的提供调试方法, 只要在一些关键代码执行的地方, 通过串口给串口调试助手发送相关信息, 就可以使我们很方便的查看代码在这个位置的执行情况。 下面看一下我所使用的单片机上串口的原理图接线 外部的发送端TXD就是单片机串口的接收端USART_RX,   外部接收端RXD就是单片机串口的发送端USART_TX TXD : Transmit(TX) Data(D)  Rec
[单片机]
linux和单片机的串口通信
最近做无线传输方面的东西,需要cc2430开发板和tq2440进行数据串口通信。os为linux。 linux驱动在移植后时已经写好了,所以直接写应用层的程序即可,跟pc的写法类似。 修改自tq的serial_test demo程序,由pc端得串口ttyS0和tq2440的uart1口进行数据通信,互发字符串。 Uart.h文件: #ifndef UART2_H #define UART2_H #define FALSE 0 #define TRUE 1 #define WORDLEN 32 struct serial_config { unsigned char
[单片机]
linux和单片机的<font color='red'>串口</font>通信
使用单片机实现GPRS通信小系统的研究
0 引 言 GPRS(通用分组无线电业务)是利用包交换的概念发展的一套无线传输方式。GPRS网络是基于现有的GSM(全球移动通信系统)网络实现的。在现有的GSM网络中需要增加一些节点,如GGSN(GPRS网关支持节点)和SGSN(GPRS服务支持节点)。SGSN的主要作用是记录移动终端的当前位置信息,并且在移动终端与GGSN之间完成移动分组数据的发送和接收。GGSN主要起网关作用,可以与多种不同的数据网络连接,如ISDN(综合业务数字网)、PSPDN(包交换公用数据网)和LAN(局域网)等。GGSN可以把GSM网中的GPRS分组数据包进行协议转换,从而把这些分组数据包传送到远端的TCP/IP或X.25网络。 GPRS网不但具有
[工业控制]
STC89C52通过串口控制流水灯亮灭
本次笔记包含两个方面: 1.只是控制LED的亮灭,不返回数值 2.控制LED的亮灭,并返回数值 看了几讲的视频,都是在讲串口的方式1。其他的还没接触,这里也只用串口的方式1实现这两个功能。串口里面需要计算的地方是根据所要使用的波特率求定时器的初始值。定时器使用的是方式2,可以自动装初始值,避免赋值语句装初始值时出现误差。 以9800bps,定时器使用方式2,串口使用方式1,晶振波特率为 11.0592MHZ,求TH1跟TL1的值。 方式1的波特率 = (2^SMOD/32)xT1溢出率。单片机复位后,电源管理寄存器PCON全部清零,SMOD作为其中一位自然也清零。 波特率已经知道了。这样就剩下T1溢出率了。 假设初值为X
[单片机]
labview串口通信
无线龙 火灾报警监控 软件使用说明   一, 监控软件的安装   以下3种方法任选一种   ① (推荐)如果你的机子安装有NI公司的labview软件8.2及以上版本,你可以直接运行报警传感点对点LV文件夹里面的火灾报警传感点对点.vi文件。系统要求参考NI公司labview软件安装要求。   ②如果你的机子安装有NI公司的run-time engine8.2和NI-VISA Version 4.1以上的驱动(本光盘有相关文件),可以直接运行可执行文件文件夹里面的火灾传感系统.exe文件。   ③直接安装光盘安装文件文件夹里面的setup.exe文件,安装方法与一般安装软件一样。安装完后可以在系统开始-》程序列
[测试测量]
labview<font color='red'>串口</font>通信
基于stm32f103zet6的内存管理的学习
主要是依照原子哥哥的代码来初步了解或者说学习一下内存管理,特别对于我们这个想往嵌入式方向发展的人来说,内存管理应该是一种艺术的。 今天在对原子的代码稍作修改是可以进行内存分配和回收的,所以开始深入分析一下这个代码的实现过程。一、所谓的内存管理内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 二、代码分析 1、首先了解一下一个数据结构,这是一个声明 /*************************** 内存管理控制 **********************************************/ typedef struc
[单片机]
基于AVR单片机和串口的SD卡读取平台的设计
O 引言 SD卡(secure digital memory card,安全数码卡)是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2 g,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。 本文正是通过AVR单片机经过软硬结合的设计方案,来读取SD卡上FAT32文件系统中的数据,FAT32是微软公司开发的新一代的文件系统,支持更大的存储容量和长达255个字符的文件名,也可以通过串口转USB接口芯片通过计算机来访
[单片机]
基于AVR单片机和<font color='red'>串口</font>的SD卡读取平台的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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