OpenEdv-开源电子网

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

STM32f4vet6的串口4无法与串口助手相互通信是什么原因

[复制链接]

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2020-7-7
在线时间
20 小时
发表于 2021-6-10 15:45:01 来自手机 | 显示全部楼层 |阅读模式
要实现STM32F407VET6中使用串口4与串口助手互相通信,串口助手可以发送数据给单片机,然而发送的数据和显示的不一样,还有串口助手收不到单片机发送的数据,串口部分的程序看了好几遍,感觉没啥问题,会不会是硬件上面哪个地方出问题了,附上调试助手图片。帮忙看看谢谢
#include "usart.h"     

void UART4_Init(u32 bound)
{
//GPIO端口设置  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);//使能UART4时钟

  //串口1对应引脚复用映射
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_UART4); //GPIOA0复用为USART4
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_UART4); //GPIOA1复用为UART4
  
  //USART1端口配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 ; //GPIOA0与GPIOA1
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //速度50MHz
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
  GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0,PA1
  

//USART1 初始化设置
  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(UART4, &USART_InitStructure); //初始化串口4
  
  USART_Cmd(UART4, ENABLE);//使能串口4
  
  USART_ClearFlag(UART4, USART_FLAG_TC);
     
  USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//开启相关中断

  //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;//串口4中断通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、       
}

/*******************************************************************************
* 函 数 名         : UART4_IRQHandler
* 函数功能                     : UART4中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void UART4_IRQHandler(void)                        //串口4中断服务程序
{
        u8 r;
        if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)  //接收中断
        {
                r =USART_ReceiveData(UART4);//(UART4->DR);        //读取接收到的数据
                USART_SendData(UART4,r);
                while(USART_GetFlagStatus(UART4,USART_FLAG_TC) != SET);
        }
        USART_ClearFlag(UART4,USART_FLAG_TC);
       
//#endif
}
mmexport1623291588635.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10560
金钱
10560
注册时间
2017-2-18
在线时间
1911 小时
发表于 2021-6-12 15:13:08 | 显示全部楼层
1.仿真看下串口服务函数接收的数据是怎样的,是不是31 31 31 34 34
2.检查新品TXD引进以你串口转换电路是否存在短路断路,不存在的话仿真下UART4的发送寄存器是否有数据变化
回复 支持 反对

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2022-3-7 17:01:35 | 显示全部楼层
我跟你的现象不太一样,
我使用stm32f407ve跟405rg测试结果都一样
1、串口4配置成PA0,PA1,能发送,不能接收到数据(从寄存器上看没有收到信息,用逻辑分析测试能看出上位机有发数据过去,但接收不到)
2、串口4配置成PC10,PC11,收发正常
3、串口4都是配置成DMA收发
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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