Stm32通过串口与串口上位机波形显示通信失败

关于STM32串口高速与上位机通信的问题 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 3086|回复: 11
关于STM32串口高速与上位机通信的问题
在线时间3 小时
该用户从未签到主题帖子精华
初级会员, 积分 53, 距离下一级还需 147 积分
大家好,有个问题请教一下,如下:我看到STM32串口最大支持的速率为4.5M bit/s,我想用STM32的串口来高速传输数据到PC,速率为600kbps左右,计划使用FT232R(最大速率为1M)来进行USB-RS232转换。目前手头有一个CH340G的USB-232模块,但是看到PC设备管理器里面串口设置的波特率最大为128000。
有如下疑问:
1、PC设备管理器里串口波特率怎么设置为大于128000的值?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间9 小时
该用户从未签到主题帖子精华
初级会员, 积分 157, 距离下一级还需 43 积分
PC一般只能到115200。之前为了支持1Mbps以上的速率,自己用FPGA和USB芯片做了个串口转USB的模块。
指望PC设置4.5M的速率,只能买硬件了,转换器,或者PCI的转换硬件了。
在线时间150 小时
该用户从未签到主题帖子精华
金牌会员, 积分 2228, 距离下一级还需 2772 积分
可以自己写计算机端的上位机软件
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间3 小时
该用户从未签到主题帖子精华
初级会员, 积分 53, 距离下一级还需 147 积分
PC一般只能到115200。之前为了支持1Mbps以上的速率,自己用FPGA和USB芯片做了个串口转USB的模块。
指望PC ...
以了解,谢啦
在线时间3 小时
该用户从未签到主题帖子精华
初级会员, 积分 53, 距离下一级还需 147 积分
可以自己写计算机端的上位机软件
因为之前看到有人说最大只支持115200,我还以为上位机不能配置炒锅这个速度的呢,特来确认一下
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间47 小时
该用户从未签到主题帖子精华
中级会员, 积分 324, 距离下一级还需 176 积分
一般的串口软件就是115200这个速率吧。
在线时间124 小时
ST金币1170
该用户从未签到主题帖子精华
金牌会员, 积分 1311, 距离下一级还需 3689 积分
一般的串口软件就是115200这个速率吧
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间201 小时
ST金币2155
该用户从未签到主题帖子精华
金牌会员, 积分 3284, 距离下一级还需 1716 积分
标准的串口达不到这么高的,如果你是USB转串口的 是可以实现 更高的波特率设置
在线时间203 小时
该用户从未签到主题帖子精华
金牌会员, 积分 2866, 距离下一级还需 2134 积分
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间394 小时
ST金币2270
该用户从未签到主题帖子精华
有那个必要吗。要高速可以用USB啊。
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by21ic官方微信-->
想要做一个上位机,用来和STM32进行通讯,有什么好的办法呢
中级技术员, 积分 219, 距离下一级还需 81 积分
中级技术员, 积分 219, 距离下一级还需 81 积分
中级技术员, 积分 219, 距离下一级还需 81 积分
中级技术员, 积分 219, 距离下一级还需 81 积分
想要做一个上位机,用来和STM32进行通讯,老师说让用labview,该怎么进行通讯呢
中级技术员, 积分 246, 距离下一级还需 54 积分
中级技术员, 积分 246, 距离下一级还需 54 积分
中级技术员, 积分 246, 距离下一级还需 54 积分
中级技术员, 积分 246, 距离下一级还需 54 积分
串口,只要有串口,就可以进行通讯,labview中有串口组件的
资深技术员, 积分 459, 距离下一级还需 41 积分
资深技术员, 积分 459, 距离下一级还需 41 积分
资深技术员, 积分 459, 距离下一级还需 41 积分
资深技术员, 积分 459, 距离下一级还需 41 积分
用串口通信,约定双方的通信协议,上位机发送数据后,stm32解析数据,然后执行。。。
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
网上搜这么一篇文章,STM32和Labview不解之缘,里面讲的很详细的
中级技术员, 积分 279, 距离下一级还需 21 积分
中级技术员, 积分 279, 距离下一级还需 21 积分
中级技术员, 积分 279, 距离下一级还需 21 积分
中级技术员, 积分 279, 距离下一级还需 21 积分
串口的速度有点慢,labview还有usb组件的,比串口通讯快多了
中级技术员, 积分 201, 距离下一级还需 99 积分
中级技术员, 积分 201, 距离下一级还需 99 积分
中级技术员, 积分 201, 距离下一级还需 99 积分
中级技术员, 积分 201, 距离下一级还需 99 积分
串口通讯我做过,只要枚举到串口,配置好波特率,就可以配合进行收发了
资深技术员, 积分 411, 距离下一级还需 89 积分
资深技术员, 积分 411, 距离下一级还需 89 积分
资深技术员, 积分 411, 距离下一级还需 89 积分
资深技术员, 积分 411, 距离下一级还需 89 积分
只要是stm32的外设,都可以用来和labview通讯的,labview的组件很多的
资深技术员, 积分 447, 距离下一级还需 53 积分
资深技术员, 积分 447, 距离下一级还需 53 积分
资深技术员, 积分 447, 距离下一级还需 53 积分
资深技术员, 积分 447, 距离下一级还需 53 积分
labview也可以调用外部组件或者程序的,只要你配置好,就没有问题。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖
热门推荐 /6STM32上位机通过串口发送大数据返回接收异常 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 3710|回复: 12
STM32上位机通过串口发送大数据返回接收异常
在线时间4 小时
该用户从未签到主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
通过串口助手发送一串很长的数据如下上传的图所示,然后下位机原样返回串口助手发送的数据,当发送的字符串超过62个左右时,返回接收的数据在固定位置出现异常,如下图所示。发送的数据不超过62个时,发送的数据与返回数据没有异常,
1.串口中断接收的程序:
void USART1_IRQHandler(void)& && && && && & & & & &
& & & & & & & & & & & & char Res1=0; & & & && & //(USART_GetFlagStatus)
& & & & & & & & & & & &
& & & &&&if(USART_GetFlagStatus(USART1, USART_FLAG_ORE ) ==SET)//数据过载错误 。USART_IT_ORE & & & &&&USART_GetFlagStatus
& & & & & & & & {
& & & & & & & && &&&USART_ClearFlag(USART1, USART_FLAG_ORE );
& & & & & & & & & & & & USART_ReceiveData(USART1);
& & & & & & & & //& & & & Res1 =USART_ReceiveData(USART1);
& & & & & & & & //& & & & Uart1_Buf[First_Int1] = Res1;&&& & & && &//将接收到的字符串存到缓存中& & & & & & & &
& & & & & & & & //& & & & First_Int1++;
& & & & & & & & }
& & & &&&if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生
& & & && & {
& & & & & & & && &&&USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
& & & & & & & & & & & & Res1 =USART_ReceiveData(USART1);&&
& & & & & & & & & & & & Uart1_Buf[First_Int1] = Res1;&&& & & && &//将接收到的字符串存到缓存中& & & & & & & &
& & & & & & & & & & & & First_Int1++;& && && && && & & & & & & & & & & & & & //缓存指针向后移动
& & & & & & & & }
& & & &&&if(First_Int1 & Buf1_Max )& && & & & & & & & & & //如果缓存满,将缓存指针指向缓存的首地址
& & & & & & & & {
& & & & & & & & & & & & First_Int1 = 0;
& & & & & & & & }& &
& & & & & & & &&&
2.接收到上位机数据后原样输出的程序:
& & & & if(Find1(&901A905300&))& &//901A905300检查电话卡属于哪个网络
& & & &&&{& & & && &
& & & && &UART1_SendString(Uart1_Buf);
& && && & }
**************************************************************************************************
***************************************************************************************************
希望版主能帮忙看看。。这问题困扰了我两个多星期,希望大伙能顶起。。
(177.49 KB, 下载次数: 3)
14:29 上传
红色框框位异常的位置
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间605 小时
ST金币3658
该用户从未签到主题帖子精华
找到Windos系统中的串口设备,设置Buffer长度.
在线时间991 小时
该用户从未签到主题帖子精华
本帖最后由 Paderboy 于
15:31 编辑
换个串口软件试试
我这有个,你试试看。。。
(687.84 KB, 下载次数: 37)
15:31 上传
点击文件名下载附件
下载积分: ST金币 -1
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间150 小时
该用户从未签到主题帖子精华
金牌会员, 积分 2228, 距离下一级还需 2772 积分
每个字符回传前加入延时
在线时间4 小时
该用户从未签到主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
找到Windos系统中的串口设备,设置Buffer长度.
怎么在Windos系统中的串口设备,设置Buffer长度啊?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间4 小时
该用户从未签到主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
换个串口软件试试
我这有个,你试试看。。。
你给的那个串口软件很好用,功能更及全,但是还是出现一样的问题哦。。不知如何是好,总感觉是在缓存出现问题,但不知道怎么解决。。
在线时间4 小时
该用户从未签到主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
每个字符回传前加入延时
这个我试过,但是没用还是在固定位置出现错误,在第63个字符的位置出现异常,(字符超过63个字符时就出现错误了)
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间4 小时
该用户从未签到主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
以上问题已经解决,原先是用IFIO的方式接收缓存的数据,不知道其占用很大的存空间和时间,超过一定的存贮量数据时会使接收返回数据出错。
正确接收程序:
void USART1_IRQHandler(void)& && && && && & & & & &
& &&&char Res1=0; & & & && & & & & & & & & & & & & &
& & & &&&if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生
& & & && & {
& & & & & & & && &&&USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
& & & & & & & & & & & & Res1 =USART_ReceiveData(USART1);//缓存指针向后移动& && && && && &&&& & & & & & & & & & & &
& & & && && && &USART_SendData(USART1, Res1);
& && &&&& & & & while (!(USART1-&SR & USART_FLAG_TXE));
& & & & & & & & }& & & & & & & &&&
在线时间4 小时
该用户从未签到主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
解决。。。。。。。。。。。。。。。。。。。。。。。。。
(74.18 KB, 下载次数: 0)
22:58 上传
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间991 小时
该用户从未签到主题帖子精华
解决就好。。
STMCU-Logo.png (21.38 KB, 下载次数: 0)
08:25 上传
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered bySTM32与上位机串口通讯的学习笔记(简明的数据帧设计方法)
最近因为项目需要,需要做一个STM32和Windows的串口通讯协议来交换数据,本着追求极致的心态,来讨论一下简明的数据帧的设计方法。
数据的传输方式
对于很多单片机初学者而言,可能他们接触到串口 首先想到的就是通过串口打印字符串,然后就会很理所当然的想到了用“打印”的方式来传输数据。
比如我们需要传输一个float型的数据value,可能小白们首先会想到的方式就是串口重定向printf然后像下面这样把数据传输过去
printf("%f",&value);
但是实际上,对于程序之间的交流,使用字符串打印这样的方式是非常浪费传输数据的,因为假设这个浮点数据为占了8个字符(小数点也占一位) 所以用字符串传输的方式就需要通过串口传输8个字节,但是实际上float类型在内存里面永远都是占用4个字节,所以使用字符串的传输效率是非常低的,并且这样传输 上位机收到的也是字符串,还得把字符串的数据读出来重新放到一个float类型的数据里面,才可以进行运算。
因此,通过串口传输的数据基本上都是通过直接传输内存数据来实现的。
它的原理大概是这样 同样以float类型作例子
当你在程序里面声明了一个float类型的变量的时候,程序会为这个变量开辟一个4字节的内存空间,然后这4个字节的内存数据唯一决定了这个float类型的数据(具体实现方式可以百度float类型的存储方式)。因此,我们的串口只要把这4个字节的数据通过串口传输到上位机,然后上位机根据传输协议直接把这4个字节写入到一个float类型的内存空间中,然后这个float类型的数据也就随之完成了。
为了方便这个过程的实现 我们可以定义一个联合体
typedef union{
unsigned char sendbuf[4];
这样定义的好处就是:联合体内的所有成员共用一片内存空间
然后我们需要传输数据float型数据的时候,我们只需要声明一个send_type类型,然后对send_type的value直接赋值,然后与此同时sendbuf的数据也会因此改变,我们就可以直接发送sendbuf[4]这四个字节了。建议在上位机的程序里面也使用同样的联合体,然后当上位机的snedbuf[4]放入接收的4个字节之后,value就可以直接读出所需要的数据了。然后对于其他各种数据类型,如double,long int之类的类型同样也可以使用这种方式来传输,只需要注意好各种数据类型需要占用的内存空间就可以了
组合数据的传输方式的注意事项
通过上面的方式,我们通过传输内存数据的方式来传输单个数据了,那么当我们需要传输多个数据呢?
或者说,传输的并不是直接的数据,而是带有一定的开头,结尾的数据,假如协议规定数据起始要先发一个字节的标志0x0d,然后传输两个float型数据,再以结束标识符0x0d结尾
(此处0x0d是人为规定,协议可以要求为其他值)
这时候只考虑联合体的话并不能解决我们的问题
这时候结构体就派上用场了
typedef struct{
unsigned char
unsigned char
像这样我们就可以按照顺序把协议整合成一个结构体的形式,编译器会根据结构体内成员顺序在内存里按顺序分配内存空间,上位机和单片机共用同一种结构体形式,然后只需要设定好帧内各成员内容之后,把结构体直接发过去,好像就可以了??
其实问题并没有想的这么简单。结构体虽然会占用一片连续的内存空间,但是实际上结构体内的成员并不一定是连续分配内存空间的。可以实践,刚刚声明的结构体,它并不是只占用1+4+4+1=10个字节的内存空间。为什么会这样呢?因为编译器在分配内存时会按照内存对齐的方式来分配内存,因此前面的unsigned char变量为了和float对齐,编译器为其分配了4个字节的空间。这会导致我们协议的帧长度增加一些没有意义的空的数据,并且判断帧长度将变得复杂。
(当然,其实如果上位机和stm32的内存对齐的方式恰好是一样的话,只要保证把整个结构体传输过去,整个通信应该还是可以完成的)
那么如何取消编译器的内存自动对齐呢?
我们可以在结构体定义后紧跟一句_attribute_ ((_packed_))
这一句的意义是将该定义的内存分配强行按最小位对齐(也就是按字节对齐)。
那么我们修改后的结构体定义是这样的:
typedef struct{
unsigned char
unsigned char
}_attribute__ ((__packed__)) sned_
可以实践,对现在的结构体使用sizeof关键字,得到的的长度为10。这样就可以压缩帧的长度,避免数据浪费了。在需要改动协议的时候,也只需要简单的增加结构体的成员即可。
/———————————————————————————————————–
日11:26:30后记:
在STM32的开发中,如果使用了硬件浮点数解算的话,同时又存在串口发送浮点型数据的话,此时最好不要压缩数据帧,按照编译器的自动补充空字节来发送,上位机也保持一样的数据包.因为硬件浮点解算涉及到了内部的专用电路,而此时如果浮点数没有内存对齐的话是无法使用硬件解算从而出现错误的.这时候会带来不必要的麻烦. 当然 如果需要和性能受限制的设备进行通信,不舍得填充空数据的话,在涉及内存不对齐的浮点数据可以先开一个临时变量进行操作,在进行发送的前一刻使用memcpy函数将浮点数放进数据帧内也是可以的
没有更多推荐了,查看: 2707|回复: 9
STM32与51单片机不能进行串口通讯,单独的与上位机串口调试助手都能通讯,接法就是TX,RX交叉接,GND接一起,有没有遇到同样问题的
主题帖子精华
高级会员, 积分 650, 距离下一级还需 350 积分
在线时间48 小时
STM32与51单片机不能进行串口通讯,单独的与上位机串口调试助手都能通讯,接法就是TX,RX交叉接,GND接一起,有没有遇到同样问题的
主题帖子精华
金牌会员, 积分 2219, 距离下一级还需 781 积分
在线时间37 小时
没遇到过,电平是可以兼容的才是
专业制作STM32 物联网通信模块板,模块交流群:。
主题帖子精华
金钱128934
在线时间1149 小时
可能是电平不匹配.
检查下串口的IO是不是还接了其他东西.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
主题帖子精华
高级会员, 积分 650, 距离下一级还需 350 积分
在线时间48 小时
回复【3楼】正点原子:
---------------------------------
原子哥,你们那个72块钱的Jlink在V2.0的板子上能用吧,下个月发工资买一个,还有你们卖的触摸屏和V2.0的板子上的接口能正好匹配吗
主题帖子精华
金钱128934
在线时间1149 小时
回复【4楼】骑着蜗牛追梦想:
---------------------------------
可以的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
主题帖子精华
中级会员, 积分 285, 距离下一级还需 215 积分
在线时间45 小时
请问你最终解决了吗
主题帖子精华
初级会员, 积分 63, 距离下一级还需 137 积分
在线时间12 小时
你这个问题说的太泛了,你可以先检查一下波特率是否一致
主题帖子精华
高级会员, 积分 650, 距离下一级还需 350 积分
在线时间48 小时
你这个问题说的太泛了,你可以先检查一下波特率是否一致
这个问题已经过去太久远了,谢谢!
主题帖子精华
金牌会员, 积分 1892, 距离下一级还需 1108 积分
在线时间256 小时
串口1RXT与CH340的TXD是连在一起的,这里要把跳线冒去掉才不会影响,还有就是电平不匹配。
主题帖子精华
新手入门, 积分 3, 距离下一级还需 17 积分
在线时间1 小时
想请教下楼主最后是如何解决的啊,为什么STM32可以和电脑通讯,和别的单片机串口通讯出问题呢?用的UART1。波特率和字符长度没问题
Powered by

我要回帖

更多关于 上位机串口通信 的文章

 

随机推荐