本帖最后由 lai832 于 2012-3-27 16:05 编辑
10# 香水城
有个项目:
三个RS422数据采集设备(RS422的数据看最后,是没有中断的,一条接一条):
1.因为数据采集是自动连续的---即,每个RS422上的数据都是连续的(完整的一条数据为:0x11,0xXX,0xXX,0xXX,0x22,0xXX,一条一条首尾相接发送到STM32);所以不能采用并联RS422
2.因为不同的的RS422间要进行运算:如:RS_1+RS_2 等等; 所以对数据有时间同步要求,即同一时间进入USART的数据进行计算,如果这个时间相差越大,误差越大.-----这也是不能采用并联RS422的重要原因之一.
---------------------------------------------------------------------------------------------
系统:
数据采集----USART1,2,3的RX
LED显示----第二版考虑LCD显示
DA输出-----暂时使用DA1,2; 可能要考虑外加一个:SPI的DA,共三个,
逻辑开关输出
按键输入
参数保存-----这部分最后才考虑是外EEPROM还是内FLASH
远程---UART4
数据流向:
USART1--->|
USART2--->|-->24Bit转为float--->求和-->显示--->float转为12Bit--->|-->DA1
USART3--->| |-->DA2
-----------------------------------------------------------------------------------------------
程序:
LED---略
逻辑开关输出---略
按键输入---略
远程-----略
流程:
USART1_RX----(DMA)-------->|
USART2_RX----(DMA)-------->|--------->|
USART3_RX----(DMA)-------->| |
|
求和-->(按键)-->显示-->12Bit-->DA--> 24Bit-->(求和)
DMA与"求和-->...->DA"并行运行,DA完了,检测三个DMA是否中断,如中断,取数据并将24Bit转为float
因为第一次用STM32,所以有疑问:
1.三个DMA能同时输入数据到内存?
---------详细过程不考虑,但是否三个USART.RX的数据,能通过DMA完整传到内存不?
2.三个DMA通道工作,对于下面(指:求和-->....->DA)的程序运行影响有多大?
---------其实我现在是将DMA理解为多线程的实现方式了,但不管是否是多进程,上面的处理过程是否可行?即:等待DMA收数据时,CPU给安排去处理"求和-->....->DA"了.
---------------------------------------------------------------------------------------------
时间差1~3是指:三个USART的.RX不可能同时0x11通过DMA进入内存,所以一定要有个连接BUFFER,
处理起来就可能有个错位,即时间同步可以允许的差最大是多少,最好最多能只差1条数据,最多不超3条,不过这个问题应该不大.
数据采集设备输出:
0x11,0xXX,0xXX,0xXX,0x22,0xXX,0x11,0xXX,0xXX,0xXX,0x22,0xXX,0x11,0xXX,0xXX,0xXX,0x22,0xXX,0x11,0xXX,0xXX,0xXX,0x22,0xXX,0x11,0xXX,0xXX,0xXX,0x22,0xXX,0x11,0xXX,0xXX,0xXX,0x22,0xXX,0x11,0xXX,0xXX,0xXX,0x22,0xXX,.................
0x11为一条数据的开头,(0x22,0xXX)为一条数据结尾,最后一个0xXX为异或码)
三个RS422,分别接到:STM32F103VET的:USART1,2,3 |