你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于stm32f103的usart1的端口重映射问题

[复制链接]
无双个妹 提问时间:2014-12-30 15:13 /
本帖最后由 无双个妹 于 2014-12-30 15:40 编辑

我参考了网上有人发的帖子,但是发现自己用了,TX发出来全是高电平,没有竖线(低电平)

以下是我的程序请大家帮忙端口设置

  1.         GPIO_InitTypeDef GPIO_InitStructure;
  2.               

  3.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  4.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  5.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  6.           GPIO_Init(GPIOB , &GPIO_InitStructure);
  7.    

  8.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  9.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  10.           GPIO_Init(GPIOB , &GPIO_InitStructure);
复制代码
usart1重映射设置

  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
  2.        GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
  3.        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
  4.    
  5.           USART_InitTypeDef USART_InitStructure;
  6.         
  7.           USART_ClockInitTypeDef  USART_ClockInitStructure;

  8.         USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
  9.         USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
  10.         USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
  11.         USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
  12.         USART_ClockInit(USART1 , &USART_ClockInitStructure);

  13.         USART_InitStructure.USART_BaudRate = 9600;
  14.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  15.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  16.         USART_InitStructure.USART_Parity = USART_Parity_No ;
  17.         USART_InitStructure.USART_HardwareFlowControl =  USART_HardwareFlowControl_None;
  18.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  19.         USART_Init(USART1 , &USART_InitStructure);
  20.             
  21.           USART_Cmd(USART1 , ENABLE);
复制代码
为了使用这个端口我这样设置,AFIO_MAPR|=1<<2;  
但是总是报错                             Error[Pe020]: identifier "AFIO_MAPR" is undefined
999.png
收藏 评论14 发布时间:2014-12-30 15:13

举报

14个回答
wamcncn 回答时间:2014-12-30 15:37:03
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);//开启端口B和复用功能时钟
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射
GPIO_InitTypeDef GPIO_InitStructure;
//uart 的GPIO重映射管脚初始化
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);
无双个妹 回答时间:2014-12-30 15:38:13
wambob 发表于 2014-12-30 15:37
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);//开启端口B和复用功能时钟  ...

我就是抄这个人的例程的,有问题,实习不了,可能是单片机不一样
wamcncn 回答时间:2014-12-30 15:48:14
本帖最后由 wambob 于 2014-12-30 15:50 编辑

貌似你的顺序不对吗,而且有地方不一样,你改程序了
无双个妹 回答时间:2014-12-30 15:49:54
wambob 发表于 2014-12-30 15:48
貌似你的顺序不对吗,你改程序了

我把程序的初始化,分成时钟,端口分别使能
wamcncn 回答时间:2014-12-30 15:52:27
无双个妹 发表于 2014-12-30 15:49
我把程序的初始化,分成时钟,端口分别使能

按你的说法,除了顺序外,因该代码一样多,看你的好象不全
奔跑小蜗牛 回答时间:2014-12-30 15:56:07
单片机不一样?你的不是103系列吗?
无双个妹 回答时间:2014-12-30 16:14:24
奔跑小蜗牛 发表于 2014-12-30 15:56
单片机不一样?你的不是103系列吗?

是103,但是后面型号不一样,
奔跑小蜗牛 回答时间:2014-12-30 16:28:38
你是用的IAR吧?关于 Error[Pe020]: identifier "AFIO_MAPR" is undefined

1、在程序前面加上定义。
#include <xxxx.h>
还不行的话就自己在程序开头重新定义一下就100% OK了。
#define AFIO_MAPR 0x......;
2、重新安装过软件。
也许是软件出错了,这个当然包括软件的安装目录有中文;安装的时候更改了安装路径等等都会出现这种情况。所以最好的安装方法就是“一路回车”。
无双个妹 回答时间:2014-12-30 16:43:42
奔跑小蜗牛 发表于 2014-12-30 15:56
单片机不一样?你的不是103系列吗?

其实都是一样的,STM32F103C8和STM32F103RB都差不多
wenyangzeng 回答时间:2014-12-30 22:45:13
本帖最后由 wenyangzeng 于 2014-12-30 22:46 编辑

举个实例给你参考:
AFIO->MAPR   = 0X00000800;                            //定时器3  CCR2映像到PB5然后你参考手册应该能设置成功
小贾-370388 回答时间:2014-12-31 00:18:52
重映射步骤为:

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

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_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);
简单的说 STM32的 io 有3个功能一个是默认的 一个是复用 一个是重映射功能(这个其实也属于复用)

如果配置成复用 则将使用第2个功能 如果配置成复用 同时 相应的重映射配置了 则将使用第3个功能

通常一个口的 复用+重映射有好多 不止两个 这时候就看你使能哪个设备了(哪个被使能就用哪个)

开复用 + 使能设备+ 是否重映射就可以决定这个io口到底使用哪个功能
晓枫VS枯叶 回答时间:2014-12-31 16:11:45
  1. USART_ClockInitTypeDef  USART_ClockInitStructure;

  2.         USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
  3.         USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
  4.         USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
  5.         USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
  6.         USART_ClockInit(USART1 , &USART_ClockInitStructure);
复制代码

不知都楼主用的什么版本的库,一直用3.5的,没发现有这个结构体...
Dylan疾风闪电 回答时间:2015-1-4 13:06:10
为了使用这个端口我这样设置,AFIO_MAPR|=1<<2;  
但是总是报错                             Error[Pe020]: identifier "AFIO_MAPR" is undefined


应该是AFIO->MAPR来操作寄存器。
Dylan疾风闪电 回答时间:2015-1-4 13:15:10
其他的貌似没什么,引脚复用很简单的。
如果还是有问题,就下载一个STM32CubeMX软件,看看官方工具生成的代码和你自己的有什么差异。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版