STM32F407串口总是乱码

2019-07-20 22:34发布

有谁弄成功的吗?我试了串口1没反应,串口2,3都是乱码,只显示一个  “帱”   字,不解,STM32F103都正常,说明软件设置什么的没有问题,硬件也没有问题


void USART2_Init(void) {   GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;   /* Enable GPIO clock */   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  /* Enable UART clock */   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
  /* Connect PXx to USARTx_Tx*/   GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_USART3);
  /* Connect PXx to USARTx_Rx*/   GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_USART3);
  /* Configure USART Tx as alternate function  */   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   GPIO_Init(GPIOC, &GPIO_InitStructure);
  /* Configure USART Rx as alternate function  */   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;   GPIO_Init(GPIOC, &GPIO_InitStructure); /* USART configuration */ USART_InitStructure.USART_BaudRate = 2400;   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(USART3, &USART_InitStructure);     /* Enable USART */   USART_Cmd(USART3, ENABLE); }










友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
subo19920716
1楼-- · 2019-07-22 16:44
回复【12楼】lich87:
---------------------------------
回复【11楼】tanghong668:
---------------------------------

果然是这里出了问题,谢谢两位,呵呵,现在不乱码了
爱学习的小妞
2楼-- · 2019-07-22 17:26
 精彩回答 2  元偷偷看……
dreamc
3楼-- · 2019-07-22 20:35
遇到同样问题,在这里看到了问题所在。。。。很谢谢。。。
王小才
4楼-- · 2019-07-22 21:50
时钟对的,串口有输出很奇怪
举例
程序从串口输出:
        USART_Send(USART1, "ABCDEF");
        USART_Send(USART1, "123456");
接收到正确数据应该为:
41 42 43 44 45 46 31 32 33 34 35 36
计算机串口接收到数据【十六进制】
81 82 83 84 85 86 71 72 73 74 75 76          [看似差了0x40]
很奇怪有没有,想不出原因。。。
USART_Send()函数实现
void USART_Send(USART_TypeDef *USARTx, char *str)
{
        uint16_t ch;
while (*str)
{
         ch = *str++;
USART_SendData(USARTx, ch);
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}
}
如果将其修改为
void USART_Send(USART_TypeDef *USARTx, char *str)
{
        uint16_t ch;
while (*str)
{
         ch = *str++;
USART_SendData(USARTx, ch - 0x40);          //此处有修改,减去0x40
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}
}
计算机串口接收到数据为
01 02 03 04 05 06 F1 F2 F3 F4 F5 F6

#if !defined  (HSE_VALUE)
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
这一段的外晶振设置也已经改为板载晶振

这很诡异,有没有
求高手解惑
雪雪
5楼-- · 2019-07-22 22:00
 精彩回答 2  元偷偷看……
雪雪
6楼-- · 2019-07-23 02:59
回复【14楼】subo19920716:
---------------------------------
为什么要配置这个时钟呢,我对比了一下103的stm32f4xx_conf.h中的配置,103就不需要配置这个时钟,为什么

一周热门 更多>