周洪雁,宫 志
(1.大庆师范学院 物理与电气信息工程学院,黑龙江 大庆163712 2.大庆油田有限责任公司 信息技术公司,黑龙江 大庆163000)
DMA,即为存储器访问,DMA 数据传输是按照地址空间的标识来传递的。CPU 虽然初始化了DMA传输动作,但是在实际的应用当中整个数据传输过程是不需要CPU 来参与的,完全由DMA 自身来实现数据的转移,这也就是为什么在进行大量多次的数据采集的时候,我们采用DMA 来实现数据的传输可以很大程度的提升处理器的处理速度,其实本质并不是提升了CPU 的处理速度,而是让CPU 有更多的时间去处理数据而不是浪费在数据的传输上。
STM32 的大多数外设可产生DMA 请求,可通过逻辑或的关系挂载到DMA 的使能端子,由于是逻辑或的关系故而同一时刻只能有一个请求被执行。STM32 上所挂载外设的DMA 请求,可以通过填充相应的结构体来实现。
1.2.1 DMA1 通道简介
DMA 通道配置如图1所示。
图1 DMA 通道配置
图1中的逻辑或,如同一个通道的DMA 请求,这里DMA1 为例(ADC3、TIM2_CH1、TIM4_CH3),需要强调的是这几个参数在通道1 上是逻辑或的关系,所谓逻辑或就是同一时间DMA 只能响应其中的一个。
1.2.2 DMA 中断状态寄存器
通常我们在配置DMA 的时候会开启DMA 中断,一旦数据传输结束会进入中断服务函数,当没有开启DMA 中断的时候也可以通过查询的方式来检测DMA 是否传输完毕,这是因为DMA 传输完毕后会有一个标志位,该标志位会置一来标识DMA 传输结束,CPU 可以处理下一组数据了,然而这个标志位是软件置位的,置1 后不会自动清零,需要软件清零,所以在检测到标志位后首先进行软件清零,再进入下一步操作,使DMA 工作在满负荷状态,极大地提升CPU 的运作效率。
1.2.3 DMA 中断标志清除寄存器
上面提到了标志位需要通过软件清零,同样的中断标志位也是需要我们进行软件清零的,不同的是我们不能通过直接给中断标志寄存器写0 来实现清零,需要通过给中断标志清除寄存器写1 来实现对中断标志位的清零。同样在进入中断之后,我们首先需要做的就是清除中断标志位。
高级定时器TIM1 或高级定时器TIM8 的本质都是一个独立于内设挂载在CPU 上的外设,就是一个16 位的可以自动重新装载的计数器,与普通单片机一样该计数器的工作同样不需要CPU 内核的参与,它的时钟驱动是由一个可编程的预分频从系统时钟上独立分支出来的,如图2所示。高级定时器TIM1 适用领域较多,对于脉冲宽度的测量或者像普通单片机那样生成产生输出各种波形也是完全可以胜任的。
图2 整体系统图
根据内部电路图可知定时器1 与定时器8 挂载在APB2 预分频器上,分频因子可选1,2,4,8,16。而APB2 预分频器挂载在AHB 预分频上分频因子可选1,2…512 故使能定时器1 时区别于常用的定时器。
所谓死区就是在一组成对出现的互补脉宽上两者之间并不是完全互补的而是存在一定的错位,所谓错位的这段时间就被称之为死区。在配置STM32 生成互补脉宽的同时也可对死区进行初始配置,可通过相关的寄存器使能死区,同时也只需继续填充相应的结构体即可完成对死区时间的配置。死区的设置函数里还有一个刹车功能,刹车功能有效电平设置为低电平的时候,倘若突然将该引脚拉低,原先正在输出的互补脉宽会突然停止。
通过把基于STM32 的脉宽发生器用于实际工作领域,可以得到该脉宽发生器具有精度高和速度快的特点,可以满足一般的实验和生存需要。故该脉宽发生器的设计和开发具有一定的实际意义。
[1]黄智伟.全国大学生电子设计竞赛常用电路模块制作[M].北京:北京航空航天大学出版社,2011.
[2]李全利,迟荣强.单片机原题与接口技术[M].北京:高等教育出版社,2004.
[3]宋岩.Cortex-M3 权威指南[M].北京:北京大学出版社,2008.