"STM32中采用DMA实现方波的产生和捕获"
STM32微控制器是ST公司基于Cortex-M3内核的高集成度的微控制器,具有高性能、低功耗和实时性强的特点。它集成了Cortex-M3内核,以及双ADC、多用途的通用时钟TIMx、RTC、I2C、SPI、UART、CAN、DMA、USB等丰富的外设。
STM32微控制器中的DMA(Direct Memory Access)模块可以实现数据的高速传输,不占用CPU的资源。DMA模块可以实现内存到内存、内存到外设或外设到内存的数据传输,每个通道可以任意指定工作模式。DMA的每次传输都分为四个阶段:申请仲裁、地址计算、总线存取和应答。DMA和CPU工作在交替方式下,不会相互阻塞。DMA各个通道可独立设置优先级,当访问同一资源时高优先级通道先获得资源。
TIMx(通用时钟)模块是STM32微控制器中的一个重要外设,可以实现多种复杂的功能。时钟模块内部主要包含一个计数器和四个通道的比较/捕获寄存器。时钟可工作在捕获或比较模式。在捕获模式下,若有对应的触发信号,计数器的值会保存到比较/捕获寄存器,并触发中断或DMA;在比较模式下,若计数器的值与比较/捕获寄存器的值相等,则对外输出预选设定好的信号,如高电平、低电平或电平反转等。
采用DMA+TIMx可以实现多路方波的产生和捕获。例如,可以将时钟的四个比较/捕获通道加DMA可以产生出四路不同频率和占空比的方波。基本原理是:将时钟的四个通道设置为反转模式(即计数器与比较捕获寄存器相等时,其对应的CPU引脚电平发生反转),设置计数器为向上计数到0xFFFF的模式;然后预先计算好需要引脚反转的时刻,并使能对应通道的DMA请求。这样,当计数器与比较/捕获寄存器的值相等时,由DMA将下一个需要引脚电平反转的时刻送入到比较/捕获寄存器。
在捕获方波时,采用DMA+TIMx的方式可以提高系统的实时性和执行效率。通过TIMx的捕获功能将方波的电平跳变时刻记录在比较/捕获寄存器中,然后DMA将该值自动传输到内存,只有当DMA触发半满或全满事件时CPU才需要进入中断处理数据。通过记录方波的上升沿和下降沿时刻,然后将两个时刻相减,进而就能得到所有低沿和高沿的宽度,最后进行后续的分析处理。
STM32微控制器中的DMA和TIMx模块可以实现方波的产生和捕获,提高系统的实时性和执行效率。