有些人选择STM32L431,STM32系列的低功耗芯片,用于产品开发。在其应用中,小尺寸显示屏需要由STM32芯片驱动。由于所选芯片没有FSMC外设,因此GPIO用于更新图像数据。显示屏控制器的数据宽度为16位,通过GPIOA连接。此外,端口线还用于模拟以下读写控制线,该控制线通常处于高电平。
数据准备在读写控制线的下降沿进行,即单片机向数据总线发送图形数据,显示屏控制器在读写控制线的上升沿取走数据。
这里我们考虑使用定时器输出一个脉宽调制信号来模拟读写时序控制线,使用定时器输出比较事件来触发直接存储器存取,将数据发送到GPIOA端口,然后由屏幕控制器在上升沿读取数据。在码分多址传输完成中断中,定时器的脉宽调制输出被关闭以停止数据传输。
在根据上述思想进行调试之后,发现了一个问题,即当定时器的脉宽调制输出在码分多址传输完成中断中被关闭时,停止动作不能及时完成,特别是当数据传输速率很高时,即脉宽调制输出停止操作中有一个延迟,这经常导致输出几个不必要的脉宽调制脉冲。
例如,当最初计划发送500个数据时,读写控制线应该相应地仅输出500个脉宽调制脉冲信号,然后保持高电平。然而,程序代码仅在500次直接内存存取数据传输完成后才关闭定时器的脉宽调制输出。因为中断响应时间加上由关闭定时器输出的代码执行时间可能导致在停止[之前输出一个或两个以上的脉冲宽度调制脉冲说“可能”,因为它与传输速率和处理代码有关],虽然这些多输出脉冲不会触发直接存储器存取传输,但是它们的上升沿将触发显示控制器的数据读取操作,并且该多读取数据不是正常操作,因此影响产品功能。[下图所示的红色脉冲是额外的脉宽调制信号]
有什么方法可以使定时器的脉宽调制输出与直接内存存取传输的数据完全匹配?也就是说,如果要传输500个数据,只输出500个脉宽调制脉冲。这里有一个比较简单的方法,就是利用STM32高级定时器的重复计数器和定时器输入的单脉冲输出方式来实现上述要求。
所谓单脉冲输出模式的基本原理是,定时器计数器开始工作后,遇到定时器更新事件时停止计数,从而实现有限数量脉冲的输出。对于没有重复计数器寄存器的通用定时器,如果它工作在脉宽调制输出模式,计数器将在开始输出脉宽调制脉冲后停止;如果带重复计数器寄存器的高级定时器工作在脉宽调制输出模式,计数器将在开始和停止计数后输出指定数量的脉宽调制脉冲。脉宽调制脉冲输出的具体数量由RCR寄存器的值和所选计数模式([向上计数模式、向下计数模式、双向计数模式)决定。有关定时器单脉冲模式的详细信息,请参考STM32系列的参考手册,并参考下面推荐的《STM32定时器单脉冲输出模式话题》。
结合这里的应用,我们可以稍微调整一下方案。读/写控制定时脉冲是利用高级定时器的输出通道实现的,这里使用的是TIM1,计数器采用递增计数方式,定时器采用PWM1单脉冲输出方式,输出脉冲数与要通过DMA传输的数据数一致,通过定时器比较事件触发数据的DMA传输。这样,定时器将在输出指定数量的脉宽调制后自动停止输出,而无需软件代码的干预,最终将输出锁定在高电平,这正好满足设计要求。[注意:使用定时器单脉冲输出模式,当定时器停止计数时,输出端的最终锁定电平与所选的脉宽调制模式、RCR寄存器的值和计数模式有关。】
例如,有必要向显示控制器写入10个图形数据[数据归约点用于示波器观察]。配置了RCR=10-1;采用PWM1单脉冲输出模式和递增计数模式。通过示波器,我们可以看到以下输出:
这里巧妙地使用了高级定时器的单脉冲输出模式,因此屏幕控制器读取的数据与微控制器写入的数据一样多,不多也不少。
顺便说一句,在完成定时器的初始化之后,记得在基于更新事件启用定时器更新中断或DMA之前,清除更新中断事件的标志位。否则,它有时会给我们带来一些麻烦,例如一旦定时器中断被启用,就跳转到中断服务程序,或者一旦基于更新事件的DMA传输被启用,就进行DMA传输。ST固件库中的参考代码如下:
__HAL_TIM_CLEAR_IT(htimx,TIM _ IT _ UPDATE);
这个话题已经被提醒过很多次了,我会在这里再次提醒你。尽管如此,在申请过程中,人们还是经常被困在这个地方。原因是在定时器初始化过程中使用软件更新操作来触发更新事件,使用户配置的数据立即生效,并设置定时器更新事件标志。
好的,以上主要是分享一个基于高级定时器单脉冲输出模式的应用实例和想法。如果是通用定时器,没有RCR寄存器,还能实现上述功能吗?这也应该是可能的。如果你感兴趣,你可以自己考虑。我希望在STM32的产品开发过程中,每个人都能灵活运用各种外围设备的功能和特点,不断开发自己满意的产品。
最后,让我们祈祷我们面前的新肺炎疫情会尽快过去!愿一切尽快恢复正常!
防控疫情的需求激发之下,代替人类送药、送餐送菜、消毒巡逻的无人车成了疫情期间的特殊尖兵。疫情过后,无人车配送是否...
2020-03-23 17:12市场分调研机构Omdia的最新数据分析显示,全球智能城市人工智能(AI)软件市场将从6 738亿美元(2019年),在2025年将增长到4...
2020-04-07 17:55现代电测技术日趋成熟,由于具有精度高、便于微机相连实现自动实时处理等优点,已经广泛应用在电气量和非电气量的测量中。
2020-04-07 17:56微软经常在游戏领域开辟路径,扮演开拓者的角色,这一点体现在很多方面,包括微软的尖端技术(DX12终极版 DX光追),硬件(X...
2020-04-07 17:57去年 12 月,波音为美国宇航局发射了未载人的 Starliner 航天器。然而由于技术问题,任务并没有按计划进行。作为 NASA ...
2020-04-07 17:58