arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

上一章主要介绍了基本定时器中断的用法,本章将首先介绍在线仿真调试程序的方法,然后讲解STM32的位带操作,最后学习通用定时器的输出比较功能产生PWM,并且通过实用例程进一步强化实际产品开发能力。

4.1Keil在线仿真调试

51单片机程序相对简单,调试程序时依靠程序员根据实验现象做分析,改动程序进行逻辑验证的方式查找程序逻辑错误。随着要实现的功能越来越复杂,所选用的单片机从51单片机换到了STM32,所要编写的代码量也成倍增加,因此调试工具也要鸟枪换炮,采用ST-Link在线调试程序。

在线仿真调试就是将程序下载到系统中运行后,可以对程序进行逐步跟踪并且察看数据的变化。有了在线仿真调试功能,程序员可以测试每一行源代码,从而找出程序错误。在这个过程中,程序员可以通过设置断点,显示和监控内存内容、寄存器内容、控制输入输出等多种方式,从而找出错误根源。

在线仿真调试可以实现Keil软件和目标板的联调,更加直观了解单片机运行的过程,高效快速排查问题,从而提高产品和项目开发的效率。

4.1.1 软件配置

在所构建的工程模板中的system_stm32f10x.c文件中,有两段针对系统时钟的宏定义,如图4-1所示,用户选择哪个时钟就在图4-1左侧一段取消注释哪个时钟,其他时钟全部注释掉,这里系统默认用的是72MHz。

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

图4-6 片内外设地址

一般情况下,要改写某一个寄存器某一位的值,如果不采用位带操作,要分三步,第一步读出寄存器的值,第二步改变需要改变的那一位,第三步将改变后的值写进寄存器;而如果采用位带操作程序代码会更简单,代码执行效率也更高。

4.2.2 位带和位带别名区

编写代码时我们要操作某个寄存器的某一位,比如是GPIO的某一个IO口,那在程序中直接操作的就是相对应的位带别名区的一个32位的地址。首先确定要操作的寄存器的地址,也就是他的位带地址,然后确定要操作的是哪一位,最终根据映射关系计算出要操作的这一位所映射的位带别名区的地址。

统一用一个片上外设区和SRAM区的位带与位带别名区的映射公式:

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

通过上面位带设置程序,对IO口赋值时不必再使用”位设置”或”位清除”函数,而是可以像操作51单片机的IO口一样操作STM32的GPIO引脚。比如以PA1引脚为例,设置其为输出模式:

首先使用宏定义PA1对应的位带区地址,即: define PA1 PAout(1) 。其中PA1为宏定义的引脚名称,这个可以随意设置,PAout(1)才是关键,其中PA表示GPIO端口A,out表示输出模式,in表示输入模式;(1)表示引脚号。

通过这种操作,可以用PA1 = 1; 替代GPIO_SetBits(GPIOA, GPIO_Pin_1);

4.2.3 练习

将2.6,3.6.3,3.9小节中的程序,改为位带方式,重新编写一编,在此不再粘贴代码,具体代码可以到”Kingst-32F1开发板配套光盘《ARM嵌入式编程与实战应用–STM32F1系列》例程Lesson4″文件夹下查看。

4.3 RGB调色

在音乐广场、KTV、酒吧等场所,往往都有激情四射的舞台灯光,效果绚烂夺目,本小节通过开发一套简易舞台灯控制系统来提高读者的实际产品开发能力。

4.3.1 RGB调色原理

前边介绍过RGB小灯的发光原理,理论上三原色相互搭配,可以产生七色,如图4-8所示。有了七种颜色,就可以编程实现单色显示、单色渐变、渐变切换、单色闪烁、闪烁切换等复杂的功能,让简单的RGB小灯通过程序发挥出强大的功能。

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

图4-10 通用定时器捕获/比较通道结构图

当计数器与捕获/比较寄存器(TIMx_CCRx)中的内容相同时,如果设置了事件产生寄存器(TIMx_EGR)中的CCxG位,将会在通道上产生一个捕获/比较事件,若设置了相应的中断使能位(TIMx_DIER寄存器中的CCxIE位),则会产生一个捕获/比较中断。

配置通用定时器的输出比较功能步骤如下:

1、配置通用定时器的基本定时功能(参考3.6节基本定时器配制方法)

2、设置 TIMx 捕获/比较寄存器(CCRx)的预装载使能(x表示1、2、3、4)

3、设置 TIMx 捕获比较寄存器(CCRx)的值

4、设置NVIC中断优先级

5、清除TIMx更新中断及捕获/比较x中断标志位

6、使能TIMx更新中断和捕获/比较x的中断源

7、使能TIMx定时器

其中设置 TIMx 捕获/比较寄存器的预装载使能所用库函数如下:

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

4.5 简易舞台灯控制系统

生活中经常能在荧幕或者舞台现场看到绚丽的舞台灯光,本节对实际舞台灯光效果进行了拆分,通过Kingst-32F1开发板自带的一个RGB小灯实现舞台灯光的各类显示效果。

4.5.1 舞台灯光控制程序

一、首先设计舞台灯光控制器的功能需求,如下所示:

1、单色闪烁显示模式——实现红、绿、蓝、黄、紫、青、白七种颜色单独闪烁显示类型;

3、多色闪烁显示模式——实现红绿、绿蓝、红蓝、红绿蓝间隔闪烁类型;

4、多色渐变显示模式——实现红绿蓝三色渐变、红黄绿紫蓝青白七色渐变显示类型;

5、按键实现显示模式可调;

6、按键实现闪烁和渐变速度可调;

7、数码管显示当前RGB显示模式。

二、设置舞台灯光控制器的整体程序框架

1、功能划分

按键1: RGB模式选择按键;

范围1~13: 1-红光闪烁,2-绿光闪烁,3-蓝光闪烁,4-黄光闪烁,5-紫光闪烁,

6- 青光闪烁,7-白光闪烁,8-红绿交替闪烁,9-绿蓝交替闪烁,

10- 红蓝交替闪烁,11-红绿蓝交替闪烁,12-红绿蓝三色渐变,

13-红黄绿紫蓝青白七色渐变

按键2:调节闪烁或渐变速度逐渐变快

按键3:调节闪烁或渐变速度逐渐变慢

数码管:显示当前RGB灯光模式,使用数字1~13表示

三、编程程序代码

本节需要新建两个文本文件,保存在lighting.h和lighting.c,用于存放舞台灯光控制程序。

具体代码如下:

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

arm嵌入式开发板(arm嵌入式开发板实现 点击按钮实现图片切换)

长按识别关注

知识共享|助力梦想

本站部分内容由互联网用户自发贡献,该文观点仅代表作者本人,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如发现本站有涉嫌抄袭侵权/违法违规等内容,请联系我们举报!一经查实,本站将立刻删除。