完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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,求助,帮忙看下,为什么发送和接收的数据不一致? |
|
相关推荐
26个回答
|
|
你把USART_Configuration()贴上来看看
|
|
|
|
出现你这现象我也碰到过,但是我用的是485通信的,就是因为外部设备没有我们STM32的运行速度快,所以在485发送和接收的部分要加上适当延时.
你在发送完后的 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} 在后面加个软件延时就可以了. |
|
|
|
我也出了类似的问题,但我的情况不太一样,之前运行正常,突然有一天不正常了,以后就没好过,换过232芯片,不管用,求解。
|
|
|
|
楼主问题解决了吗,我的也是一样。
|
|
|
|
也有可能是他的3232的问题
|
|
|
|
两边的波特率是一样的吗?
|
|
|
|
可能是驱动电路有问题,这样会有丢失包的现象
|
|
|
|
我也遇到这个问题,没有人解答下吗?
|
|
|
|
试了下几个可能的原因,全没有完全符合,楼主最好贴出全部代码,大家才好找原因
|
|
|
|
|
|
|
|
首先确认的几个问题:
1、USART_Configuration()中波特率是多少?GPIO是否配置?使用的串口是否是需要开启重映射? 2、PC机串口采集的波特率和板子的发送波特率是否一致? 3、电平转换的问题,PC机不能直接和STM32的串口连接,需要一个232来转换电平。 |
|
|
|
回复第 1 楼 Sunrier于2011-03-14 03:35:14发表:
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,求助,帮忙看下,为什么发送和接收的数据不一致? 不懂 |
|
|
|
STM32 串口发送数据给PC机,数据不一致的原因如下:
跳线JP4/JP5是ST32与232芯片之间的跳线,如果你是从跳线处引出的线与PC机相连,则会出现帖子中所有出现的问题,这是因为电平不同引起的,所以,如果你从开发板的COM端口与PC相连,则就不会出现此问题了。 |
|
1 条评论
|
|
不好解决,多谢
|
|
|
|
USART_InitStructure.USART_WordLength = USART_WordLength_9b; //配置成9位很重要,否则发送数据和接受数据会不一致
|
|
|
|
首先,判断PC端能否得到信号,如果用字符格式收取没有数据,说明你的数据传输或数据处理有问题,如果出现的是乱码,说明你的波特率不对。
|
|
|
|
多发几个试试,最后加上一个延时
|
|
|
|
可能是你的串口波特率初始化不正确造成的。
|
|
|
|
应该是波特率不匹配造成的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1107 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1055 浏览 2 评论
2159 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1253 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1678 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 06:27 , Processed in 1.110323 second(s), Total 123, Slave 102 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号