OpenEdv-开源电子网

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

STM32F407的PD8 PD9复用USART3问题

[复制链接]

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
发表于 2020-6-2 09:37:35 | 显示全部楼层 |阅读模式
1金钱
STM32F407使用PD8 PD9复用USART3,发不出数据,也接收不到,引脚初始化、复用、串口初始化、时钟等都开启了,不知道什么原因。代码如下:

      GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);   //使能GPIOD时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);   //使能UART3时钟
        //串口对应引脚复用映射
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_USART3);  //GPIOD8复用为USART3
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_USART3);  //GPIOD9复用为USART3

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  //复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  //上拉
        GPIO_Init(GPIOD,&GPIO_InitStructure);  //初始化

        USART_InitStructure.USART_BaudRate =  bound;  //波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //字长为8位数据格式
        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(USART3, &USART_InitStructure);  //初始化串口3
      USART_Cmd(USART3, ENABLE);  //使能串口3


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 09:48:08 | 显示全部楼层
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 09:49:21 | 显示全部楼层
在线的,很急
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 10:59:19 | 显示全部楼层
在线的@原子哥
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
920
金钱
920
注册时间
2018-7-18
在线时间
385 小时
发表于 2020-6-2 11:08:09 | 显示全部楼层
要进行端口重映射  
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 11:16:02 | 显示全部楼层
wwhh 发表于 2020-6-2 11:08
要进行端口重映射

GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_USART3); 应该是映射了吧?
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
920
金钱
920
注册时间
2018-7-18
在线时间
385 小时
发表于 2020-6-2 11:18:47 | 显示全部楼层
可爱的CPU 发表于 2020-6-2 11:16
GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_USART3); 应该是映射了吧?

这个是复用   不是端口重映射
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
920
金钱
920
注册时间
2018-7-18
在线时间
385 小时
发表于 2020-6-2 11:21:58 | 显示全部楼层
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)


这个函数
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 11:23:16 | 显示全部楼层
wwhh 发表于 2020-6-2 11:18
这个是复用   不是端口重映射

这就是映射,我查手册了,407中,将USART3映射到AF7
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 11:25:16 | 显示全部楼层
wwhh 发表于 2020-6-2 11:21
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)

好的,我试下
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 11:26:10 | 显示全部楼层

您这个是103的吧? 407里没有这个函数吧
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-8
在线时间
12 小时
 楼主| 发表于 2020-6-2 11:37:40 | 显示全部楼层
有没有哪位碰到过这个问题?或者知道怎么解决?
回复

使用道具 举报

0

主题

104

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-5-23
在线时间
135 小时
发表于 2020-6-2 16:45:51 | 显示全部楼层
本帖最后由 denike 于 2020-6-2 16:55 编辑

配置看了一下,貌似没问题
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2020-6-3
在线时间
6 小时
发表于 2020-6-3 13:23:09 | 显示全部楼层
USART_InitStructure.USART_BaudRate =  bound;  //波特率设置
没改波特率啊,我也是萌新 感觉这里有问题,bound改11520,然后编译下载,串口助手改成对应的115200波特率
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2022-1-20
在线时间
0 小时
发表于 2022-1-20 15:45:06 | 显示全部楼层
楼主解决了吗 我复用为PC10 和PC11,能接收但是不能发送数据 ,PC10都是低电平状态导致不能发送,但是不知道为什么
回复

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2251
金钱
2251
注册时间
2019-8-7
在线时间
364 小时
发表于 2022-1-20 17:15:26 | 显示全部楼层
chenk405 发表于 2022-1-20 15:45
楼主解决了吗 我复用为PC10 和PC11,能接收但是不能发送数据 ,PC10都是低电平状态导致不能发送,但是不知 ...

正好我用了UART4 STM32F429  ;
void UART4_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
               
  RCC_AHB1PeriphClockCmd(UART4_RX_GPIO_CLK|UART4_TX_GPIO_CLK,ENABLE);

  /* 使能 USART 时钟 */
  UART4_CLOCKCMD(UART4_CLK, ENABLE);
  
  /* GPIO初始化 */
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  
  /* 配置Tx引脚为复用功能  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin =  UART4_TX_PIN  ;  
  GPIO_Init(UART4_TX_GPIO_PORT, &GPIO_InitStructure);

  /* 配置Rx引脚为复用功能 */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin =  UART4_RX_PIN;
  GPIO_Init(UART4_RX_GPIO_PORT, &GPIO_InitStructure);
  
/* 连接 PXx 到 USARTx_Tx*/
  GPIO_PinAFConfig(UART4_RX_GPIO_PORT,UART4_RX_SOURCE,UART4_RX_AF);

  /*  连接 PXx 到 USARTx__Rx*/
  GPIO_PinAFConfig(UART4_TX_GPIO_PORT,UART4_TX_SOURCE,UART4_TX_AF);
  
  /* 配置串DEBUG_USART 模式 */
  /* 波特率设置:DEBUG_USART_BAUDRATE */
  USART_InitStructure.USART_BaudRate = UART4_BAUDRATE;
  /* 字长(数据位+校验位):8 */
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;       
  /* 停止位:1个停止位 */
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  /* 校验位选择:无校验 */  
        USART_InitStructure.USART_Parity = USART_Parity_No;
  /* 硬件流控制:不使用硬件流 */
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  /* USART模式控制:同时使能接收和发送 */
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  /* 完成USART初始化配置 */
  USART_Init(UART4, &USART_InitStructure);
  
    /* 嵌套向量中断控制器组选择 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* 配置USART为中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
  /* 抢断优先级为1 */
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 子优先级为1 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* 初始化配置NVIC */
  NVIC_Init(&NVIC_InitStructure);
  
  /* 使能串口接收中断 */
  USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
       
  /* 使能串口 */
  USART_Cmd(UART4, ENABLE);
}
回复

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2251
金钱
2251
注册时间
2019-8-7
在线时间
364 小时
发表于 2022-1-20 17:18:15 | 显示全部楼层
chenk405 发表于 2022-1-20 15:45
楼主解决了吗 我复用为PC10 和PC11,能接收但是不能发送数据 ,PC10都是低电平状态导致不能发送,但是不知 ...

解决不了就去看看电路 是不是PC10接地之类的  单独控制PC10看看能不能高低电平转换就可以看出来
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-6 10:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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