int main(void) { #ifdef DEBUG debug(); #endif /* System clocks configuration ---------------------------------------------*/ RCC_Configuration(); /* NVIC configuration ------------------------------------------------------*/ NVIC_Configuration(); /* GPIO configuration ------------------------------------------------------*/ GPIO_Configuration(); /* USARTconfiguration ------------------------------------------------------*/ USART_Configuration(); while(1) { USART_SendData(USART1,0x01); //--------> 串口工具中接收到的数据又为0xE0 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} } } 端口配置都已经正常,在while里给PC机发送0x01,用串口工具接收到的数据为0xE0,不知道为什么发送和接收到的数据不一致,求各位帮忙. 然后自己查看了USART_SendData()和USART_GetFlagStatus函数: 库中的源代码为: void USART_SendData(USART_TypeDef* USARTx, u16 Data) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DATA(Data)); /* Transmit Data */ USARTx->DR = (Data & (u16)0x01FF); } FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG) { FlagStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_FLAG(USART_FLAG)); assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */ if ((USARTx->SR & USART_FLAG) != (u16)RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } while(1) { USART_SendData(USART1,0x02); //0x01改为0x02 --------> 串口工具中接收到的数据又为0xE1 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} } while(1) { USART_SendData(USART1,0x03); //0x01改为0x03 --------> 串口工具中接收到的数据又为0xE1 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} } 然后试了下把发给PC机的数据0x01改为数据0x02,串口工具中接收到的数据又为0xE1,然后把0x01再改为0x03,串口工具中接收到数据也为0xE1,求助,帮忙看下,为什么发送和接收的数据不一致? |
我也遇到过同样的情况 单片机发1 串口助手收到的是e0 外部时钟默认频率修改一下就好了
RE:请教:STM32 串口发送数据给PC机,数据不一致
RE:请教:STM32 串口发送数据给PC机,数据不一致
你在发送完后的
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
在后面加个软件延时就可以了.
RE:请教:STM32 串口发送数据给PC机,数据不一致
RE:请教:STM32 串口发送数据给PC机,数据不一致
RE:请教:STM32 串口发送数据给PC机,数据不一致
RE:请教:STM32 串口发送数据给PC机,数据不一致
RE:请教:STM32 串口发送数据给PC机,数据不一致
回复:请教:STM32 串口发送数据给PC机,数据不一致
RE:请教:STM32 串口发送数据给PC机,数据不一致
RE:请教:STM32 串口发送数据给PC机,数据不一致
1、USART_Configuration()中波特率是多少?GPIO是否配置?使用的串口是否是需要开启重映射?
2、PC机串口采集的波特率和板子的发送波特率是否一致?
3、电平转换的问题,PC机不能直接和STM32的串口连接,需要一个232来转换电平。
回复:请教:STM32 串口发送数据给PC机,数据不一致
int main(void)
{
#ifdef DEBUG
debug();
#endif
/* System clocks configuration ---------------------------------------------*/
RCC_Configuration();
/* NVIC configuration ------------------------------------------------------*/
NVIC_Configuration();
/* GPIO configuration ------------------------------------------------------*/
GPIO_Configuration();
/* USARTconfiguration ------------------------------------------------------*/
USART_Configuration();
while(1)
{
USART_SendData(USART1,0x01); //--------> 串口工具中接收到的数据又为0xE0
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
}
}
端口配置都已经正常,在while里给PC机发送0x01,用串口工具接收到的数据为0xE0,不知道为什么发送和接收到的数据不一致,求各位帮忙.
然后自己查看了USART_SendData()和USART_GetFlagStatus函数:
库中的源代码为:
void USART_SendData(USART_TypeDef* USARTx, u16 Data)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
/* Transmit Data */
USARTx->DR = (Data & (u16)0x01FF);
}
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_FLAG(USART_FLAG));
assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */
if ((USARTx->SR & USART_FLAG) != (u16)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
while(1)
{
USART_SendData(USART1,0x02); //0x01改为0x02 --------> 串口工具中接收到的数据又为0xE1
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
}
while(1)
{
USART_SendData(USART1,0x03); //0x01改为0x03 --------> 串口工具中接收到的数据又为0xE1
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
}
然后试了下把发给PC机的数据0x01改为数据0x02,串口工具中接收到的数据又为0xE1,然后把0x01再改为0x03,串口工具中接收到数据也为0xE1,求助,帮忙看下,为什么发送和接收的数据不一致?
不懂
RE:请教:STM32 串口发送数据给PC机,数据不一致
跳线JP4/JP5是ST32与232芯片之间的跳线,如果你是从跳线处引出的线与PC机相连,则会出现帖子中所有出现的问题,这是因为电平不同引起的,所以,如果你从开发板的COM端口与PC相连,则就不会出现此问题了。
RE:请教:STM32 串口发送数据给PC机,数据不一致
回复:请教:STM32 串口发送数据给PC机,数据不一致