历史上的今天
返回首页

历史上的今天

今天是:2025年04月12日(星期六)

2019年04月12日 | stm32f103串口实现重映射功能

2019-04-12 来源:eefocus

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

}


推荐阅读

史海拾趣

EHC(ELECTRONICHARDWARE)公司的发展小趣事

面对日益全球化的市场环境,EHC公司积极实施国际化战略。公司通过与国外知名企业的合作,引进先进的技术和管理经验,不断提升自身的竞争力。同时,EHC公司还积极参加国际展会和论坛,拓展海外市场。经过多年的努力,EHC公司的产品已经成功打入国际市场,并在多个国家和地区建立了稳定的销售渠道。

Codeco Corporation Of Vermont公司的发展小趣事

随着公司的发展,Codeco逐渐意识到技术创新的重要性。他们投入大量资源研发新技术,不断提升产品的性能和用户体验。在一次关键的研发项目中,Codeco的团队突破了某项技术难题,推出了一款引领行业潮流的新产品。这一创新不仅为公司带来了可观的收益,也进一步巩固了Codeco在电子行业的地位。

Engineered Components Co公司的发展小趣事

在追求经济效益的同时,ECC也注重可持续发展和环保责任。他们积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。ECC还投入资金建设了废水处理设施和废气处理设备,确保生产过程中的废弃物得到有效处理。此外,ECC还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了ECC的社会责任感,也为公司的长期发展奠定了坚实的基础。

Cyrix Corp公司的发展小趣事

1999年,Cyrix再次被威盛电子(VIA)收购。这次收购后,Cyrix所生产的CPU产品上开始出现了两个商标:VIA和Cyrix。这种双标现象反映了Cyrix在被收购后的地位变化。随着时间的推移,Cyrix的商标逐渐淡出市场,最终被彻底放弃。

HEC Inc公司的发展小趣事

在被VIA收购后的一段时间里,Cyrix继续寻求市场扩张的机会。例如,在1998年,Cyrix与北京大船电子技术公司签订了总代理协议,以扩大其在中国的分销网络。这一策略帮助Cyrix进一步打开了中国市场的大门,为其在全球市场的发展奠定了基础。

以上五个故事描绘了Cyrix Corp公司在电子行业中的发展历程。从初创时期的挑战英特尔到被多次收购后的市场策略调整和市场扩张尝试,Cyrix的发展之路充满了曲折和变革。

Bytes公司的发展小趣事

在技术创新的基础上,Bytes公司积极拓展市场。公司通过精准的市场定位和营销策略,成功打开了多个国家和地区的市场。同时,Bytes公司注重品牌建设,通过优质的产品和服务赢得了消费者的信任和好评。公司还积极参与国际展览和交流活动,提升品牌知名度和影响力。

问答坊 | AI 解惑

试论将嵌入式无线技术用于单片机教学

引言: 单片机也称为微控制器(MCU Microcontroller Unit)是最典型、最广泛、最普及的嵌入式系统。目前我国大学,中等专业学校,职业学校,职工进修, 社会培训等,都已经广泛开设单片机教学课程和进行单片机教学。 随着SOC(片上系统)目前日新月异 ...…

查看全部问答>

FPGA很有价值的27实例

不错的资料哦 有ADC0809 VHDL控制程序,TLC7524接口电路程序,自动售货机VHDL程序与仿真,频率计程序设计与仿真, 出租车计价器VHDL程序与仿真(2004.8修改),出租车计价器VHDL程序与仿真等等 …

查看全部问答>

NDIS中间层MPSendPackets加密出的问题,求教

小子刚学习写windows 过滤驱动,在ndis的MPSendPackets中对发送包内容进行加密,但运行一段时间(几十秒)后就会报错,系统重启,请达人帮小子看看,报错显示:unable to get nt!MmSpecialPoolStart            ...…

查看全部问答>

WINCE5 直接连SQL2000

如题,WINCE 5 可以直接连接SQL2000数据库吗?…

查看全部问答>

关于LPC启动代码startup.s的疑难点,请高手帮助

以下代码段一直难以理解,请各位帮分析一下: ;IRQ中断服务程序 IRQ_Handler         SUB     LR, LR, #4                 &nb ...…

查看全部问答>

2812的ADCLO

2812的ADCLO除了接地,还能有什么特殊的用法吗?在AD转换公式中,用到了这个东西呀.…

查看全部问答>

如何将单片几程序转为可读文件?

各位大虾,小弟有个单片机程序,,二进制的,,想看是否能转化为可读文件,我想看看里面是否有写是哪个公司编写的。我的qq773681。请高手帮助…

查看全部问答>

ucosii小程序,为啥2个任务不来回切换呢????????

  #include <includes.h>#define RCC_GPIO_LED                    RCC_APB2Periph_GPIOF    /*LED使用的GPIO时钟*/#d ...…

查看全部问答>

DM368 音频编码启动失败

encode demo 里面在启动speech或者audio编码的时候需要配置什么吗?现在我用的EVM板子,跑DEMO的时候Sound_create这个函数总会失败!视频是没有问题的!谢谢指教!…

查看全部问答>