购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

任务2.2
流水灯程序设计及应用

【任务描述】

应用C语言编写程序在嵌入式实训板上实现LED流水灯的功能。

【任务目标】

流水灯是若干个LED灯依次点亮,在视觉上像灯光在流动,这就是流水灯。流水灯电路图如图2.2所示。流水灯一共用了8个嵌入式芯片I/O口,从PA4到PA11。

以PA6为例,当引脚PA6输出高电平时,D3正极端和负极端都为高电平,D3两端没有电压差,也不会有电流流过,此时D3处于熄灭状态;当引脚PA6输出低电平时,D3正极端电平高于负极端电平,D3两端存在电压差,会有电流从D3的正极端流向负极端。此时D3点亮。总结:在对应口线上加低电平,发光二极管就会发光;在对应口线上加高电平,发光二极管就会熄灭。这个规律适合电路图中任意一个I/O口。流水灯实际上就是通过单片机软件编程的方式设置这些口线为低电平或者高电平,从而控制这些灯的状态。也可以按照从左到右或者从右到左逐个点亮发光二极管,从而实现流水灯的功能。

【相关知识】

2.2.1 STM32时钟源

STM32时钟源有HSI,HSE,LSI,LSE和PLL。

根据时钟频率可以分为高速时钟源和低速时钟源。HSI,HSE和PLL是高速时钟源,LSI和LSE是低速时钟源。根据来源可以分为外部时钟源和内部时钟源,外部时钟源是从外部通过接晶振的方式获取的时钟源,其中,HSE和LSE是外部时钟源,HSI,LSI和PLL是内部时钟源。

下面详细介绍STM32时钟源。

①HSI是高速内部时钟,采用RC振荡器,频率为8 MHz,精度较低。HSI的RC振荡器启动时间比HSE晶体振荡器短,可由时钟控制寄存器RCC_CR中的HSION位启动和关闭,如果HSE晶体振荡器失效,HSI会被作为备用时钟源。

②HSE是高速外部时钟,可为系统提供更为精确的主时钟,HSE可接石英、陶瓷谐振器或者接外部时钟源,晶振频率可取范围为4~16 MHz,一般采用8 MHz的晶振。

③LSI是低速内部时钟,采用RC振荡器,频率为40 kHz。LSI可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟,通过控制、状态寄存器RCC_CSR中的LSION位启动或关闭。

④LSE是低速外部时钟,接频率为32.768 kHz的石英晶体,LSE位实时时钟RTC或者其他定时功能提供一个低功耗且精确的时钟源,可以通过备份域控制寄存器RCC_BD CR中的LSEON位启动或关闭。

⑤PLL为锁相环倍频输出,其时钟输入源可选择HSI/2、HSE或者HSE /2,倍频可选择2~16倍,其输出频率最大不超过72 MHz。如果需要在应用中使用USB接口,PLL必须被设置成输出48 MHz或72 MHz时钟,用于提供48 MHz的USBCLK时钟。

【任务实施】

1)硬件连接

根据前述分析,嵌入式实训板上接线图如图2.8所示,实物接线图如图2.9所示。

图2.8 实训板上接线图

图2.9 流水灯实物接线图

2)软件编译

(1)建立工程

首先使用STM32CubeMX建立工程,前面章节中已经详细讲解过,这里只列出具体的引脚配置部分。

①启动STM32CubeMX,选择“ACCESS TO MCU SELECTOR”,进入目标选择界面。

②在芯片搜索框中输入“STM32F103VBT6”,在芯片列表框中双击出现的芯片型号完成启动芯片。

③配置引脚PA5为输出模式,如图2.10所示。其中,PA4~PA11的引脚配置与PA5一致。

图2.10 GPIO引脚配置

(2)主程序流程图

主程序流程图,如图2.11所示。

图2.11 主程序流程图

(3)源程序代码

下面是源程序代码的主要部分,其中重点的程序代码都做了注释,这里没有列出非主要程序代码,完整的程序详见教学资源中的程序及实验视频。

【任务小结】

经过程序的调试、编译、下载到STM32主控实训板,实验效果如图2.12所示。

图2.12 实验效果图

【考核评价】

【课后作业】

(1)采用基于HAL库函数的方法,完成8个LED灯循环点亮的电路和程序设计、运行与调试。其中8个LED灯由PA4~PA11控制。

(2)完成不相邻的4个LED灯交替点亮的电路和程序设计、运行与调试。其中,8个LED灯由PA4~PA11控制。 AFdNdXWGVj8UN+xdXuo10/HoOPEsvdMa/R0TOITNVQBnvYYFyJQRBJcfQIAxQ4FO

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开