完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
ST有个例子 配置如下
USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 用计算机接收数据的时候,奇偶校验位作为了数据的最高位,我把USART_WordLength_8b;改成USART_WordLength_9b;就接收不到数据了,不知道问题处在那里,请各位指教。 |
|
相关推荐
21个回答
|
|
|
如果PC端设置为: 数据位=8,停止位=1,奇偶检验=偶
则STM32的设置为:数据位=9,停止位=1,奇偶检验=偶 请记住,在STM32上,奇偶检验位要计算在数据位中 |
|
|
|
|
|
"请记住,在STM32上,奇偶检验位要计算在数据位中。",----------------stm32真变态啊。
|
|
|
|
|
|
|
|
|
|
|
|
呵呵,的确有些变态。通常我们所说的数据位不包括校验位。
|
|
|
|
|
|
我没有贬低stm32的意思,只是觉得他这点跟别的mcu不一样而已。
还有他的usart发送寄存器空中断,也和别的不一样,别的mcu(如nxp的arm)是变为空才中断,他是只要是空就不停的中断。 |
|
|
|
|
|
通常是设置成小于一半就中断一下拉。
|
|
|
|
|
|
我的设置如下: USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_9b;; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* USART configuration */ USART_Init(USART1,&USART_InitStructure); 结果是单片机可以正确接收计算机的消息,也可以正确返回,但是计算机接收不到单片机的任何数据。 不知道发送的时候如果加了奇偶校验,还要加其他的什么设置。 |
|
|
|
|
|
我的设置如下: USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_9b;; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* USART configuration */ USART_Init(USART1,&USART_InitStructure); 结果是单片机可以正确接收计算机的消息,也可以正确返回,但是计算机接收不到单片机的任何数据。 不知道发送的时候如果加了奇偶校验,还要加其他的什么设置。 |
|
|
|
|
|
弄了一上午,做了n多尝试,结果还是不行,不是收不到数据,就是数据的最高位包含了校验位。
|
|
|
|
|
|
又发现一个问题,有时候数据没法接收到,用仿真器看的时候,数据的确是一直在发送,但是有时候就接收不到了,用示波器也没有看到波形,不知道什么原因。
|
|
|
|
|
|
你先把波特率降下来,等双方都稳定了再调上去。也许是波特率太高,某一方的响应跟不上。
|
|
|
|
|
|
不是,我用示波器看了一下,计算机的发送波形是有的,单片机也能正确接收到,而单片机内部发送也是一直发送的,但是看不到发送波形。不知道什么影响到什么寄存器了,我只是改了改奇偶校验,但是只要改了,有时候就通讯不上了,改回来也不行,不知道啥原因呢。
|
|
|
|
|
|
现在用的是STM32F103RCT6,以前用vbt6的时候没遇到过这类问题。
|
|
|
|
|
|
哈哈,我怀疑这个说法:因为10楼说“我只是改了改奇偶校验,但是只要改了,有时候就通讯不上了,改回来也不行”
|
|
|
|
|
|
我现在也摸不着啥原因,呵呵,奇偶校验反正是失败了。我下载了一个以前的程序,运行一下,能正常通讯,然后再把我这次改回来的程序下载进去,就一切正常了。
|
|
|
|
|
|
呵呵,你自己改来改去,把自己都改晕了,别人看着就更晕了
|
|
|
|
|
|
没有改动什么,就是想加校验位来着,后来发现的这个问题,就是用仿真器看到数据写到串口的发送寄存器了,但是管脚没有数据输出
|
|
|
|
|
|
仿真器看到数据写到串口发送寄存器了?寄存器的值不是你软件写进去的吗,你如果用示波器打不到波形,就证明没发
|
|
|
|
|
|
现在初步估计是编译器的bug,因为从新编译两次,不改动任何地方,有时候就好了,新出的芯片,估计编译器完全支持的很好还要些时候。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 10:34 , Processed in 1.307887 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2301