
本文介绍了利用STM32F103ZE系列产生三种波形并在LCD上显示,并通过DA和AD转换重新显示转换后的波形。 0 F3 h; H3 x! b 0 q. @7 U% B7 q( m' K 思路4 N Q2 {2 f1 n- G 第一种思路是通过给出三种波形数据的数组,把数组的首地址传给DMA的基地址,DAC每个周期从DMA里读取数组的值来进行转换,然后ADC同时读值并进行转换,最后把转换好的结果存进一个数组里,LCD循环显示数组里的内容即可。, y8 h" O: Y- ]* J5 R; I1 C 0 K7 z$ |+ v+ @1 ` 还有一种比较直接的思路就是找出三种波形坐标的规律,在定时器中断里计算各波形的坐标,主程序里循环画点即可,此方法虽能正常在LCD上显示波形,但因为定时器中断里边执行的东西太多,导致DA转换后的点不是连续的,在示波器上不能正常显示波形。 5 s' F5 \+ y, d% v! f$ ?0 q7 Z" C 下面主要介绍第一种思路。 ( r3 e& E% _, Q d' f 设计流程2 f( R8 }+ u8 a# d 程序的流程图如下:' h# Q; C) q# M0 P ![]() . ~! l# l) J% K! |' X : d! K3 n. [# V4 _/ I 程序遵循模块化设计的思想,主程序里非常简单,只有DA和AD,串口等外设的初始化和波形发生函数,while循环里是按键切换波形和串口数据解析函数。 0 h6 c3 |8 s( R" i 程序流程:3 Q ~. i' e1 D j 当按键按下之后,单片机自动扫描出是哪个按键并按了几次(加了一个计数变量),以此改变切换波形变量的值(例KEY0按一次波形数组即变为三角波),改变后若串口发送的有数据变重新改变TIM2的ARR值,若无数据则继续向下执行; 当定时器2进入中断后,DAC不断从DMA里读取数组的值,与此同时,ADC也不断从DMA里读取转换过的数据并重新转换为数字量存到暂存数组里(定时器2和定时器3的频率需一致)。当暂存数组的数达到256个时,进入DMA中断服务函数里,此时将暂存数组的值赋给一个新的数组来供LCD调用,并且检测波形变量的值,把相应波形的数组首地址重新赋给DMA的基地址以此达到切换波形的目的。4 g& V3 Y0 E- F r 这一切都完成后,定时器4进入中断,计算当前产生波形的频率并控制LCD显示波形。考虑到一个周期总共有256个点,所以计算频率的公式如下:7 U T+ H. H( ]2 v; N ![]() 在LCD的显示中,我加入了一个固定变量来控制LCD显示波形的周期个数,可根据要求任意控制周期个数。4 O3 M$ s: Z, R/ l, B5 u ( X" |- N* {8 e' h. _. V3 J ; S& x' p7 f( a 总结 经过此次课程设计,我感觉收获很多。这里总结如下: + B3 O+ P: I. S3 {7 f2 y 以后如果再进行工程设计的时候(无论是小工程还是大工程),在进行设计前一定要考虑好设计方案是否可行,是否有更好的方案。在此次课程设计,我首先采用直接画点的方法,虽然较快,但因为方案本身有一定的缺陷,并不能完全满足老师给的要求,因此又连夜采用查正弦波表的方法,虽然最后也设计出来了,但花费的人力和时间较长,算是长了一个经验教训,对以后的工作或者学习会有很大益处。, s% E) v( ]" [6 n+ ?9 _ 写工程代码时,一定要规范,不能自己想到哪就写到哪,这样就算最后能工作,但根本不可维护。在一些大公司的团队,内部都有一套自己的代码规范,员工都需要按那个规范来写代码,这样每个人都能读懂别人的代码,工作效率较高。 在进行本次课程设计的时候,有些知识看似不是很重要,但是使用的时候由于不熟练仍然会有很多疑问。以后如果再遇到这种问题,一定要从根里边去找原因。弄清楚知识的原理,这样再对知识进行扩展的时候就可以举一反三,自己的思路也会更加清晰。: ]: N$ }" c1 ` s* ~ 我们现在学的知识还不算多,在做工程的时候如果有不会的地方很正常,此时我们首先应该想到的就是自己去查阅各种资料去弄清楚。如果仍然不清楚,这时候就应该考虑去向老师请求帮助。老师的经验很多,有些问题我们看着很棘手,但老师可以帮助我们快速地解决,但是在问老师问题的时候一定要想清楚自己想问什么,提前组织好语言。 以后再进行工程设计的时候,一个团队里要有合理的分工。虽然本次课程设计工程量不算很大,但以后做工作量较大的工程时自己不可能干完所有的活,所以再进行工程设计的时候,每个人都合理地分工,干好自己的工作,这样团队才会更有效率。1 \( f. b# {! B# @ |
梳理STM32芯片的内部架构
使用Nano板验证驱动SPI串口屏的颜色显示
【STM32H7体验】+CANopen协议简介
【经验分享】基于STM32F103C8的 USB 外部flash虚拟U盘
【经验分享】基于STM32F103的NEC红外发送接收使用同一个定时器的一体设计
STM32F103的GPIO与DMA的终极(没啥用)玩法
STM32F103的RTC模块用作32位计数器
蓝桥杯旧嵌入式板STM32F103RBT6驱动练习笔记
STM32F103RBT6型号说明
基于STM32F103C8T6的点灯设计