准备在STM32上用DMA做一个数码管动态扫描的实例

准备在STM32上用DMA做一个数码管动态扫描的实例

第一次发文,先问候一下大家,你们好啊!

一直以来在使用数码显示驱动时,当程序越做愈多时,发现数码管的显示经常会出现一些显示闪烁现象,使用定时器中断方式,也没能完全解决问题,后来想到用DMA是否可以彻底解决,如果行的话,就不再受程序量多少和中断的影响,都可以稳定显示了。
下面先简单说说实现思路,首先在内存里开辟两块显示缓存空间,用来存放段选码数据及位选码数据,数据的长度视要显示的数码宝位数而定,我例子用4位显示。用定时器做DMA请求源,分别用采用重装更新事件及比较事件作为DMA请求。
我这里定时器使用了TIM1,因为以前中断扫描显示的时候就用的TIM1,这次也就不改了,直接拿来用就行了。由于数码管显示也不是什么新东西,具体电路图我就不说了,直接在原来动态显示基础上修改。DMA采用两个通道传输,一个通道传输位选码,一个通道传输段选。通过控制段选与位选重合实间调节数码管显示亮度。

下面就具体说说各设备的定义。
1、MCU硬件: STM32F103CBT6 外部晶振8MHz 主频72MHz
2、GPIO端口选择
段选码输出端口,高电平点亮:
GPIOA pin0-6,段选a-g,pin7为小数点dp。
位选码输出端口,高电平点亮:
GPIOB pin12-15,位选DIG1-4。
3、定时器TIM1
使用重装更新事件,申请DMA1通道5数据传输,做位选输出;
使用CH1比较事件,申请DMA1通道2数据传输,做段选输出;
中断视具体应用开启,我这里开启了上述两个事件的中断。
4、DMA通道
DMA1通道2,内存到外设,传输段选码
DMA1通道5,内存到外设,传输位选码
5、缓存定义
定义两个一维数组存放显示数据,由于要读写端口位设置/清除寄存器(GPIOx_BSRR) ,故数据位数设置为32位,字长为8,为什么是8个字后面再说。
extern vu32 Dis7_Pa[8],Dis7_Pb[8]; //DMA方式显示缓存数据

程序原理
1、定义缓存数据结构
段选码缓存:
Dis7_Pa[8]={0x000000XX,0x00FF0000,0x000000XX,0x00FF0000,0x000000XX,0x00FF0000,0x000000XX,0x00FF0000}
此组数据中0、2、4、6内数据中的XX为7段码表值,需根据具体显示内容写入相应码值,bit0-bit7八位分别对应数码管a、b、c、d、e、f、g、dp的状态。另4个数据用于复位显示端口无需改变。此组数据由DMA通道2读出(TIM1 CH1比较事件控制)顺序写入GPIOA_BSRR寄存器。
位选码缓存:
Dis7_Pb[8]={0x00001000,0xF0000000,0x00002000,0xF0000000,0x00004000,0xF0000000,0x00008000,0xF0000000}
此数组数据无需改变,由DMA通道5读出(TIM1 UP溢出重装事件控制)顺序写入GPIOB_BSRR寄存器。

由于段选和位选两个DMA通道是由两个不同的触发源触发。所以数据更新不是在同一时刻完成数据转换。所以在两个数据之间插入一个空白数据,让数码管熄灭一个位显示周期。再显示下一位数据。防止显示串扰。

下面通过下图说明显示过程:显示原理
图中波形通道0为段选端口数据,共8路,我这里只采集一路,作为演示,图中为数码管内b段二极管,在4个位置从左向右状态分别为,亮->亮->亮->灭 循环。下两通道为位选信号波形,共4路DIG1-DIG4,这里只画2个作为演示,4个脉冲依次出现高电平。图中标尺1和标尺2间为第一个数码管b段点亮时间。

亮度调节原理
要调节数码管的亮度,我们只要让上图中两个脉冲的重合时间变化,就可以实现了。这可以通过调整TIM1 CH1的捕获/比较寄存器(TIM1_CCR1)的值就可以方便的控制了。
TIM1_ARR为1250,TIM1_CCR1为1000的波形图
调节亮度原理1

TIM1_ARR为1250,TIM1_CCR1为100的波形图
亮度调节原理2
这个实验做完了,显示效果真的没说的,异常的稳定,而且就是在程序调试时,中断程序运行时,显示仍能正常显示,再多的程序也不会干扰显示效果了,最主要的节省了CPU资源,显示过程完全不要CPU参与,不需要定时器中断处理,全部由硬件事件完成控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值