OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5191|回复: 5

stmf030c8t6 串口1的重映射问题

[复制链接]

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-8-21 11:58:15 | 显示全部楼层 |阅读模式
5金钱
我在网上找到f103的配置如下:
但是f0xx的串口重映射和这个不一样。不知道大神们有对f0xx熟悉的么。
帮我看看怎么进行串口1的重映射。能帮到我的话,小弟先说句不胜感激啊。
一下是f103的重映射配置:
针对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);

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

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

我写的f0xx的配置,这个不行还请修正:

void usart1_init(unsigned long BaudRate)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
 
 USART_InitStructure.USART_BaudRate = BaudRate;
 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; 

 /* Enable GPIO clock */
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
 
 /* Connect PXx to USARTx_Tx */
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_0);

 /* Connect PXx to USARTx_Rx */
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_0);
 
 /*GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);*/
//f0xx中没有这个函数
 
 
 /* Enable USART clock */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);


 /* Configure USART Tx as alternate function push-pull */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 GPIO_Init(GPIOB, &GPIO_InitStructure);

 /* Configure USART Rx as alternate function push-pull */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
 GPIO_Init(GPIOB,&GPIO_InitStructure);

 /* USART configuration */
 USART_Init(USART1,&USART_InitStructure);

 /* Enable USART */
 USART_Cmd(USART1, ENABLE);
}

最佳答案

查看完整内容[请看2#楼]

和PA9 PA10一样的用法. 把函数中所有的PA9 PA10改成PB6 PB7就可以了. PA9 PA10能搞定,PB6 PB7也不会有问题 私以为st官方认为remap这一步多此一举,于是就优化架构删掉了. [mw_shl_code=c,true]/*********配置UART1********************/ GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_0); //PB6 PB7复用功能为UART1 GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_0); //具体可以查芯片手册(非用户手册 ...
原子哥是不是又要出黑科技了呀。^_^...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2015-1-17
在线时间
16 小时
发表于 2015-8-21 11:58:16 | 显示全部楼层
和PA9 PA10一样的用法.
把函数中所有的PA9 PA10改成PB6 PB7就可以了.
PA9 PA10能搞定,PB6 PB7也不会有问题

私以为st官方认为remap这一步多此一举,于是就优化架构删掉了.
[mw_shl_code=c,true]/*********配置UART1********************/ GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_0); //PB6 PB7复用功能为UART1 GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_0); //具体可以查芯片手册(非用户手册) /* 配置IO为复用功能 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE ); USART_InitStructure.USART_BaudRate = 1200; USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_StopBits = USART_StopBits_1 ; USART_InitStructure.USART_Parity = USART_Parity_Odd; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx |USART_Mode_Rx ; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_TC, ENABLE); //发送中断   USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE);[/mw_shl_code]

回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2015-8-21 11:58:16 | 显示全部楼层
回来结贴。
问题解决了。再次谢谢叶萌球的帮忙。
这是我调试通过的配置:
void usart1_init(unsigned long BaudRate)
{
    GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); 

GPIO_PinAFConfig(GPIOB,  GPIO_PinSource6, GPIO_AF_0); 
GPIO_PinAFConfig(GPIOB,  GPIO_PinSource7, GPIO_AF_0);

/* Configure USART Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure USART Rx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOB,&GPIO_InitStructure);


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE );

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;  
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure);  

USART_InitStructure.USART_BaudRate = BaudRate;
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_Tx | USART_Mode_Rx ;

/* USART configuration */
USART_Init(USART1,&USART_InitStructure);
    /* Enable USART */
//USART_ITConfig(USART1, USART_IT_TC, ENABLE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
}
映射到PA6和PA7上去了。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

10

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2015-1-17
在线时间
16 小时
发表于 2015-8-21 13:46:15 | 显示全部楼层
f030没有这个remap功能,删掉好了.
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2015-8-21 14:48:45 | 显示全部楼层
回复【2楼】叶萌球:
---------------------------------
那怎么用串口1的重映射啊,映射到PB6和PB7上去。PA9和PA10被占用了。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2015-8-21 16:01:04 | 显示全部楼层
回复【4楼】叶萌球:
---------------------------------
多谢 多谢 我试试看能用不能。
^_^
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 21:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表