_奶咖君_
发表于 2023-12-21 09:30:59
由加站外地址需要审核,,,
这个图片你可以看看
飞捷
发表于 2023-12-21 10:05:23
cofmilk 发表于 2023-12-19 19:26
woc老哥这想法有点意思啊,,,我这里测试的时候没有你想的那么细,,,我这里测试的是 关闭DMA再打开DMA之后就 ...
昨晚已经实现了这个功能了,告别串口中断了。 另外,STC32G的DMA功能是不是也是最多只能接收和发送256个字节
神农鼎
发表于 2023-12-21 10:08:15
STC32G的DMA缓冲区是 xdata的大小, 《= 64K
_奶咖君_
发表于 2023-12-21 10:56:20
我也是上网查了之后才知道的,,,属于是共同进步的说。。
飞捷
发表于 2023-12-21 11:19:00
飞捷 发表于 2023-12-21 10:05
昨晚已经实现了这个功能了,告别串口中断了。 另外,STC32G的DMA功能是不是也是最多只能接收和发送256个 ...
整个项目的代码无法割分开,按这个思路去做就能实现,利用这个已接收的数量做为基准就好,禁用使能和同时禁用自动收发,就会把已接收数量的寄存器清零。
梁工
发表于 2023-12-21 14:35:25
根据多年来的应用,说点个人看法。
我是从90年代开始用MODBUS协议的,30年来,但凡能让我自己选择协议的,MODBUS-RTU协议是首选,协议全球通用(特别是控制领域),兼容性好,数据域不定长,CRC16校验。
对于发送,比较简单,没有DMA的,准备好数据,启动中断发送,发送完一个字节进入中断,发下一个字节,现在STC8这样的MCU,时间也就2us左右@24MHz,对于115200的波特率,86.8us一个字节,2us开销没有任何压力。
有DMA的就简单多了,准备好数据启动DMA发送即可。
对于接收,麻烦一点,因为MODBUS-RTU协议是基于超时结束的,所以要超时处理,按协议最小是35个位时间,我常用50位时间。无DMA的MCU,直接串口接收中断处理,定时器配合做超时。有DMA的,则要有硬件超时配合(比如STC32G8K64/STC32F12K54有硬件判断超时功能)比较好。如果没有硬件超时处理,则用串口中断比较简单,收到一个字节进中断保存一下,大约2us左右@24MHz,对于115200的波特率,86.8us一个字节,2us开销没有任何压力。
4个串口同时在接收或发送(115200,半双工),时间开销大约2*4/86.8=0.092=9.2%,这个时间占比不大,而一般传输距离不会很短,所以波特率往往使用比115200低,则时间开销占比就更小了,比如波特率9600时,时间开销占比不到0.8%。
飞捷
发表于 2023-12-21 15:06:47
本帖最后由 飞捷 于 2023-12-21 15:14 编辑
梁工 发表于 2023-12-21 14:35
根据多年来的应用,说点个人看法。
我是从90年代开始用MODBUS协议的,30年来,但凡我能自己定协议的,MODBU ...
一般工业产品都习惯用9600 19200,特别是9600基本是默认的标准,像变频,触摸屏,PLC都基本选择9600,可能是环境干扰比较大的原因。
然后关于资源,因为串口中断,如果串口中断优先级低,则被其它中断打断,时间长一点可能会少接收了数据,如果串口中断优先级打高,则会影响其它中断处理,例如发脉冲,脉冲一般是100K的速度,就需要200K的频率,5US如果中间被串口打断了,会影响脉冲质量。
以前发脉冲功能用得少,所以没在意这个问题。
所以能用DMA是最好的。
梁工
发表于 2023-12-21 15:30:46
飞捷 发表于 2023-12-21 15:06
一般工业产品都习惯用9600 19200,特别是9600基本是默认的标准,像变频,触摸屏,PLC都基本选择9600,可能 ...
用200KHz的中断频率发脉冲不是一个好方法,占用CPU时间太多了。
而各个中断运行最长时间是可知的,并且一般都尽量缩短中断时间(特别是任务很多时),可以保证不会丢数据的。
有DMA+硬件超时当然是最好的。
_奶咖君_
发表于 2023-12-21 15:35:39
梁工 发表于 2023-12-21 14:35
根据多年来的应用,说点个人看法。
我是从90年代开始用MODBUS协议的,30年来,但凡我能自己定协议的,MODBU ...
个人想法,选用DMA的来接收串口数据的目的就是来减少串口中断产生的。
虽然到目前为止,没有对时序这个有过高的要求。对这个串口中断开不开得没什么体验上的区别。但是,从个人原则上说,用上了DMA那就一定要比之前的传统中断式接收要有提升。如果没有超时中断,这就好像STC8A单片机上的PWM只能输出波形,不能输入捕获。
所以希望能给有DMA的单片机加上超时中断,以及这个楼主上面说的校验位问题。
真得不想说,啊这款单片机有,换这款单片机吧。。个人开发怎么都好说,但是到了公司里换单片机不是一个简单的事情呀。
飞捷
发表于 2023-12-22 17:25:40
梁工 发表于 2023-12-21 15:30
用200KHz的中断频率发脉冲不是一个好方法,占用CPU时间太多了。
而各个中断运行最长时间是可知的,并且一 ...
有什么好办法可以不用中断频率发脉冲?求指导