摘 要:随着控制理论和电子技术的发展,控制芯片的发展可谓速度迅猛。从当初风靡业界的51单片机,到如今dsp、fpga、arm等等的百花齐放,这无不印证的控制处理器芯片发展的强大动力。而STM32芯片(ST:意法半导体公司;M:Cortex-M系列芯片;32:32位芯片)由于其具有优秀的运算速度和丰富的芯片资源以及低廉的价格(低至1美元)已经渐渐取代单片机。
STM32对比起普通单片机,不仅仅运算速度几十倍之差,而且对于其丰富的内部资源(例如一般STM均集成多路ADC、DAC、DMA、多路IIC、多路UART、SPI等等众多功能)单片机是无法匹敌的。而且STM芯片已经越来越接近单片机价格。众多优秀的表现可以看出STM32将取代普通单片机。
本文介绍基于STM32F103ZET6的简易示波器,旨在通过搭配4.3寸TFTLCD显示屏显示0-3.3V的全波、半波、方波等波形,实现对ADC、DMA、定时器等灵活运用,完成嵌入式课程设计任务。
关键词:STM32F103ZET6 示波器 嵌入式
1. 引言
随着信息时代的急速发展,大量的微控制芯片诞生并且被广泛运用到各种场合。在这其中,ST公司的STM32系列绝对是其中的主力系列。STM32 属于一个微控制器,自带了各种常用通信接口,比如 USART、 I2C、 SPI 等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有 STM32 的身影,比如智能手环,微型四轴飞行器,平衡车、移动 POST 机,智能电饭锅,3D 打印机等等。
本文旨在利用STM32F103ZET6完成一个简易示波器设计,示波器能够显示全波、半波、矩形波、三角波、梯形波、白噪声等波形,并且拥有暂停按钮,便于查看静态波形以及电压值。
2.系统整体概述
此设计是基于STM32F103ZET6战舰版的超简易示波器,为实现示波器良好的示波效果,采用了DMA读取ADC采样值,定时器对采样值数组排列处理再画点描线显示。整体设计框图如下左图1-1所示。

图1-1 设计框图
2.1 系统设计思路
本作品整体设计为模拟量波形输入,用DMA方式读取AD值,设定一个1ms的定时器,每次中断存入数组中,并对数组进行预先的左移操作。在主程序循环中,先对数组进行坐标变换,将每个AD值转换为相应的横坐标(表示时间,设定为5ms每格)纵坐标(表示赋值,需要依据AD关系转换),再用LCD快速描点对数组逐个描点,再逐个描线显示波形,最后区域清屏,对新更新数组循环以上步骤,以此达到动态显示波形的效果。本作品另外设计暂停按钮,按下按钮暂停定时器更新数组和清屏函数,显示静态波形;另设置计算波形Vpp值和Vave值动态显示。
2.2 硬件设计
本作品硬件主要设计基于485总线的TFTLCD显示屏,以及普通按键、主控芯片,具体采用了正点原子战舰版开发板作为主体,具体电路如下图1-2,图1-3,图1-4所示。具体实物如图1-5所示。
2.3MCU主控介绍
本设计中选用ST公司的STM32系列MCU。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品。
详细介绍如下:
①2.0~3.6V电源和IO电压
②上电复位,掉电复位和可编程的电压监控
强大的时钟系统:
-4~16M的外部高速晶振。
-内部8MHz的高速RC振荡器。
-内部40KHz低速RC振荡器,看门狗时钟。
-内部锁相环(PLL,倍频),一般系统时钟都是外部或者内部高速时钟经过PLL倍频后得到。
-外部低速32.768K的晶振,主要做RTC时钟源。
低功耗:
-睡眠,停止和待机三种低功耗模式。
-可用电池为RTC和备份寄存器供电。
③AD:
-3个12位AD【多达21个外部测量通道】
-转换范围:0~3.6(电源电压)。
-内部通道可以用于内部温度测量。
-内置参考电压。
④DA:
2个12位DA。
⑤DMA:
12个DMA通道(7+5=12; 7通道DMA1,5通道DMA2)。
支持外设:定时器,ADC,DAC,SDIO,I2S,SPI,I2C,和USART。
⑥定时器:多达11个定时器:
-4个通用定时器。
-2个基本定时器。
-2个高级定时器。
-1个系统定时器。
-2个看门狗定时器
⑦通信接口:多达13个通信接口
-2个I2C接口。
-5个串口。
-3个SPI接口。
-1个CAN2.0。
-1个USB FS。
-1个SDIO。
2.4软件设计
软件的任务包括通过初始化GPIO、RCC、ADC、 SYSTICK、EXIT、NVIC、4.2英寸液晶屏等进行初始化。然后通过AD采集的信号以队列方式储存起来,再输送到液晶屏。当完成了一个屏幕的数据点采集,再从头开始消点、采集、画点,当然在写程序的时候加入了一个使数据点连在一起的小算法达到显示效果。
PA0与GND模拟示波器的一个通道接入模拟信号,TFTLCD采用485总线通讯,通讯效果快速、准确,AD采集采用DMA1中的ADC1通道实现,采集快速,节省CPU资源,按键设计采用GPIO引脚读取电平切换定时器状态实现简易示波器暂停和运行。
实验结果波形效果显示良好,但波形清屏略有迟缓,数据显示良好,可显示半波、全波、锯齿波、矩形波、白噪声、三角波、梯形波等等,可显示频率在几Hz到几百Hz不等,幅值在0-3.3V上下左右。

图1-2 STM32F103ZET6 MCU

图1-3 TFTLCD

图1-4 按键

图1-5 正点原子战舰版开发板
具体各方面如下:
① 采用正点原子官方LCD库作为画点描线基础,利用LCD_ShowString、LCD_DrawLine、LCD_Fast_DrawPoint、LCD_Fill123等函数绘制GUI界面和快速描点画线、清点更新。
② AD采集方面采用DMA读取ADC,在一个1ms的定时器中,直接将采集AD值存入数组中,对于数组的处理,由于要显示出示波器波形的动态左移效果,采取每次定时中断先将数组整体左移一位,将新AD值存入数组的最后一位,如此循环往复即可。
③ 波形的具体实现主要体现再主函数while循环中,每次循环直接将AD数组从第一位描点到最后一位,再加以画线显示;下次循环先将上次循环清点处理后,再如上次循环一样将新更新数组描点画线显示即可。
④ 按键暂停示波器波形更新。主要是通过MCU的GPIO来读取外部按键电路的电平变化来改变状态。一旦外部按键电平变化,就采取对定时器的使能或者失能来继续或者阻断AD数组的更新,并且使能或者失能清点操作,从而达到波形的静态显示。
⑤ 波形电压值的测量。这部分只需对新采样AD数组在定时中断中采取平均法求值和求取最大值即可实现。
⑥ AD数组在LCD屏上的显示需要一定的坐标变换,坐标变换取决于个人在GUI界面上一格所代表的幅值和时间跨度,在一定程度上也决定了示波器的量程,而量程在另一方面也受定时器定时时长的影响。
3 制作感想
本次基于STM32F103ZET6的嵌入式课程设计让我感触颇多,在整个制作过程中,我先后涉及了定时器中断、DMA、ADC采集、外部中断以及485总线等等方面。从开始的LCD界面设计开始,到后面的ADC采集调试,换用DMA读取ADC提高效率,利用定时器中断存取数据至数组中,最后实时显示波形,计算相关数据,添加按键暂停功能,整个流程持续时间长,所遇波折多,尽自己所能利用起课上的所有知识,并且学习了大量的新知识,感受到了嵌入式的魅力和趣味性。嵌入式这门课程重在理论与实践并重,由实践可反过去验证理解理论知识,值得一学一试。
参考文献
[1]浣喜明.电力电子技术[M]. 中国:高等教育出版社,2012.
[2]田泽.嵌入式系统开发与应用[M].北京航空航天大学出版社.2005.
[3]杜春雷.ARM体系结构与编程[M].清华大学出版社.2003.
[4]何小平.选择适合ARM的嵌入式操作系统[J].北京大学出版社.2003.
[5]谭浩强.C程序设计.北京:清华大学出版社,2010.