当前位置: 代码迷 >> 单片机 >> STM32 中 USART2 接受乱码的有关问题,求大神帮助!
  详细解决方案

STM32 中 USART2 接受乱码的有关问题,求大神帮助!

热度:409   发布时间:2016-04-28 14:54:31.0
STM32 中 USART2 接受乱码的问题,急求大神帮助!!!
本帖最后由 wangwenye_wwy 于 2014-07-16 11:15:22 编辑
STM32 使用 USART2 接收到乱码:Hw?K]{n籌C靁丝亟塔Y祆璵n縣_
请问各位大神是什么问题啊?同样的代码,改成USART1就可以用。

重点代码如下:

void USART_Configuration()
{
USART_InitTypeDef USART_InitStruct;

USART_DeInit(USART2);
USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART, &USART_InitStruct);

USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
}

void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_PinRemapConfig(GPIO_Remap_USART2, DISABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; //TxD    
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; //RxD
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}

void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {
RxBuffer[RxCounter++] = (USART_ReceiveData(USART2) & 0xFF);
if(RxCounter >= RxLimit) {
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
}
}
if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET) {
USART_SendData(USART2, TxBuffer[TxCounter++]);
if(TxCounter >= TxLimit) {
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
}
}
}


int main()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
GPIO_Configuration();
USART_Configuration();
USART_Cmd(USART2, ENABLE);

}

------解决方案--------------------
时钟源的选择是否对了
------解决方案--------------------
USART2是不是被复用了
------解决方案--------------------
示波器判读一下信号就知道波特率设置对不对了。让Tx发送一个字节,把波形抓下来,看起始位到结束位的时间
------解决方案--------------------
一个可以一个不行,那就逐一找两个的差异吧,总能找出来的。
------解决方案--------------------
这会是什么问题?我也想知道
------解决方案--------------------
确实有问题。首先电平就不对,才3.6V,你需要RS232驱动芯片
波形也不对,这个真猜不出是怎么回事,配置不对?或者硬件坏了
------解决方案--------------------
我也碰到过这个问题,串口的波特率设置不对
USARTDIV = (float)(36*1000000)/(115200*16);//串口1是72,串口2是36(CPU的频率)
------解决方案--------------------
不是硬件,那还是配置问题。波形不光是脉冲宽度不对,中间还多出个脉冲来,不明白