这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STM32学习笔记之串口重映射

共15条 1/2 1 2 跳转至

STM32学习笔记之串口重映射

高工
2013-08-02 13:20:27     打赏

在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。

第一次这么干感觉心里没底,所以针对USART1在STM32F103RBT6的板子上实现了一把,以下是相关的测试代码:

/*****************************************************************************

//函数名:void Uart1_Init(void)

//功能:串口(USART1)重映射初始化配置函数,由TX PA9~PB6    RX PA10~~PB7

*****************************************************************************/

void Uart1_Init(void)

{

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);//开启端口B和复用功能时钟

 GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射

 GPIO_InitTypeDef GPIO_InitStructure;

 //uart 的GPIO重映射管脚初始化 PB6 usart1_TX PB7 USART_RX

 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;

 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽输出

 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

 GPIO_Init(GPIOB,&GPIO_InitStructure);


 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;

 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬空输入

 GPIO_Init(GPIOB,&GPIO_InitStructure);



 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

 USART_InitTypeDef USART_InitStructure;

//串口参数配置:9600,8,1,无奇偶校验,无硬流量控制 ,使能发送和接收

 USART_InitStructure.USART_BaudRate = 9600;

 USART_InitStructure.USART_WordLength = USART_WordLength_8b;

 USART_InitStructure.USART_StopBits = USART_StopBits_1;

 USART_InitStructure.USART_Parity = USART_Parity_No ;

 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

 USART_Init(USART1, &USART_InitStructure);

 USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//串口接收中断

 USART_Cmd(USART1, ENABLE);

}

简要分析重映射步骤为:

1.打开重映射时钟和USART重映射后的I/O口引脚时钟,

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |RC C_APB2Periph_AFIO,ENABLE);

2.I/O口重映射开启.

  GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_Init(GPIOB, &GPIO_InitStructure);


 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

 GPIO_Init(GPIOB, &GPIO_InitStructure);

只需要简单的以上三步就能轻松搞定,完整的例程见附件内容。

例程中实现了重映射之后的串口收发功能。

zhongpin_test.zip




关键词: STM32     串口重映射    

院士
2013-08-02 13:56:53     打赏
2楼

帖子写得真棒——有些版主的范了。

先是总概括,再语句细说。即使是版主,也要加分奖励


院士
2013-08-02 14:05:39     打赏
3楼

看了一下源文件与工程。

望楼主在以下方面再努力提高与完善:

1、自己的编写的串口相关函数的文件命名与官方的库文件名相同——很多情况会带来不必要的麻烦;

2、文件注释说明还有待完善,无时间记录及版本号;

3、尽量不要在中断中添加延迟程序;


高工
2013-08-02 14:22:24     打赏
4楼
说好的分呢????哈哈哈

高工
2013-08-02 14:24:18     打赏
5楼
多谢楼主批评指正,虚心接受指导,对于第三点深表谢意,中断函数越简单用时越短越好,谢谢亲

院士
2013-08-02 15:43:46     打赏
6楼
还真没有加~~

院士
2013-08-02 16:19:06     打赏
7楼
我替你代劳了

高工
2013-08-02 17:29:02     打赏
8楼
开玩笑呢,还真给了啊,多谢亲

高工
2013-08-02 17:30:22     打赏
9楼
多谢老大,jobs又追加了,我拿双份的了,真是不好意思啊,继续努力,回馈老大的厚爱,嘿嘿嘿

高工
2013-08-05 23:36:40     打赏
10楼
不错~!

共15条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]