1.1 STM32F103XX微处理器简介
系统硬件采用意法半导体公司开发的基于Cortex-M3内核的新型32位微控制器STM32F103RE作为主控芯片,工作频率高达72 MHz,内部集成了RAM、全速USB 2.0设备接口模块和双通道的12位高精度D/A转换模块等丰富的外设。在结合了高性能、低功耗和低电压的同时,保持了高度的集成性能和简易的开发特性。应用开发时,只需连接少量的外围电路即可使电路结构简单紧凑。
1.2 D/A转换模块
D/A转换模块(DAC)是12位数字输入,电压输出的D/A转换器。DAC可以配置成8位或12位模式,也可以与DMA控制器配合使用。DAC有2个输出通道,每个通道都有单独的转换器,可以工作在双DAC模式下,DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放,即可直接驱动外部负载。DAC转换可以选择外部事件触发(定时器计数器,外部中断线)和软件触发。
使能DAC通道后,STM32F103XX相应的GPIO管脚(PA4或PA5)会自动与DAC的模拟输出相联系。为避免寄生干扰和额外功耗,管脚PA4和PA5配置成模拟输入(AIN),如图2所示。
[page]
1.3 USB全速设备接口
内核层:该层管理使用USB IP硬件与USB标准协议两者间的直接通信。USB库内核遵从USB 2.0标准并和标准的STM32F103XX固件库分离。
应用程序接口层:该层为用户提供了内核和最终应用程序之间的完整接口。应用接口层和最终应用与固件库通信来管理应用的硬件需求。
2.2 固件程序的设计
在本系统的开发中,没有对内核层进行深入研究和修改,仅对应用接口层进行完成设备功能需要的设计。应用层的开发主要包括:系统初始化,主要开启系统和所用外设的时钟;USB时钟配置,设置并使能USB时钟,为48 MHz;USB初始化主要是完成USB设备的枚举;定时器模块配置、DAC和DMA模块配置主要是完成所用外设的初始化;最后配置好标志位后等待上位机发送数据。所有代码都是用库函数来完成的,主程序流程图如图5所示。
插入USB设备时,主机轮回查询各个USB端口,检测到D+和D-之间有电压差,会识别出有USB设备的插入,然后对设备进行枚举。在设计的D/A回放系统中,枚举过程的实现主要是对USB设备的设备描述符、配置描述符、端口描述符和端点描述符的配置来实现的。USB设备枚举的过程就是通过读取各个描述符来获取USB设备的信息,然后将它配置为其中的一种功能。
[page]
D/A回放系统模块设计中,共使用了3个端点,分别为端点0,2和3。端点0为USB设备默认的控制端点,采用了控制传输方式,主要完成设备的枚举。端点2、3均为批量传输端点,数据传输采用的是批量传输方式,分别接收上位机发送来的心电信号数据和呼吸信号数据。定时器是一节拍发生器,作为DAC的外部事件触发源。定时时钟的预装载值和时钟分频系数由原数字信号的抽样频率来决定。在D/A回放系统中,使用了两个通用定时器3,4,分别作为心电信号和呼吸信号数据DA数模转换的触发源。DAC的配置为12位数据右对齐输入,电压输出的双通道模式。其中,通道1完成心电信号数据的D/A,通道2完成呼吸信号数据的D/A,选择定时器作为外部事件触发源,在一个定时周期内完成一次数据的DA实现。DMA模块主要是完成数据的转移,USB模块接收端点中断接受的数据,利用DMA方式从端点缓存中送入DAC的DAC_DHRyyD寄存器中,经过相应的移位后,写入的数据被转存到DHR1和DHR2寄存器中,随后通过定时器的外部事件触发传输到DORx寄存器中,在经过时间tsetting后,输出即有效。在数据传输过程中,采用了双缓冲机制,在RAM中开辟了2个缓存buffer,USB模块接收数据放在一个buffer中,DMA传输即DAC阶段,处理的数据是另一个buffer中的数据,这样,使接收数据和处理数据并行进行,保证了转换后波形的连续不间断性。双缓冲的实现大致如下(以心电信号数据为例):初始化空闲buffer位为buffer1,DMA源初始化配置为buffer1。端点2接收一数据包放入buffer1中,判断是否为第一次接收数据,如果是第一次接收,改变空闲buffer位为buffer2,并允许下一数据包的接收;如果不是第一次,中断直接返回。继续接收第二个数据包,放入buffer2中,判断是否第一次DMA传输,如果是,改变空闲buffer位为buffer1,开启DMA传输,并使能定时器;如果不是,中断返回。当DMA传输完成进入中断时,首先判断空闲buffer位,再重新配置DMA,包括DMA源和传输数目的改变,最后改变空闲buffer位,并允许端点的继续接收。心电信号数据接收处理流程图如图6所示。对于呼吸信号数据,做同样的处理。
3 设备驱动和应用程序的设计
本系统的USB驱动程序采用WDM模型,选用的开发工具是Windows XP DDK(Build 2600),Driver Studio 3.2和VC 6.0。驱动程序开发平台搭建成功后,根据实际需要,用DriverWorks自带的DriverWizard生成驱动程序框架和Read,Write函数,在DeviceIoControl函数中添加设备控制程序,完成自定义的功能。
上位机应用程序是采用VC 6.0创建的一个基于MFC的多文档界面应用程序,主要分为数据管理模块,回放模块等基本模块。Win32应用程序与设备驱动程序之间的通信是通过接口(API)函数来实现的,应用程序不需要为了和USB设备通信去了解复杂的USB协议,把USB接口当做文件来操作,从而轻而易举的实现USB接口通信。
4 系统回放结果分析
按照固件程序的设计写入USB设备,插入主机并加载相应的驱动程序,打开上位机程序,读取数据库中220.dat文件,传输到STM32完成D/A,原始心电信号波形与示波器回放波形的比较如图7所示。
D/A模块较好的完成了回放功能。通过示波器实时分析,回放波形周期及幅度亦满足要求,即时序性满足要求。
5 结语
基于STM32的MIT-BIH心电数据D/A回放的设计,在硬件和固件应用程序两方面实现了比较完美的结合,对原始数据的D/A回放取得了良好的运行效果。同时主控芯片STM32F103RE内部集成的丰富的功能模块,降低了开发的难度,也保证了系统的稳定性,使得该回放系统在医学研究和工业生产中有广泛的应用前景。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』