STM32基于HAL库流水灯实验

本文介绍了使用STM32单片机和HAL库控制LED流水灯的实验过程,包括搭建开发环境、编写代码实现LED周期闪烁,以及通过波形观察验证程序效果。实验旨在理解单片机工作原理和外设资源应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验背景:
LED流水灯是一种由多个LED灯珠按照一定规律排列和控制的电子装置。在各种显示场合中,LED流水灯常常用来展示动态效果,如广告牌、舞台灯光等。此外,LED流水灯在教育、科研等领域也有着广泛的应用,可以帮助人们理解单片机的工作原理和电路设计。

实验目的:
本实验的主要目的是探究LED流水灯的控制方式,了解单片机的内部资源和外设库的使用方法。通过实验,希望能够达到以下目标:

掌握基于标准外设库的LED流水灯程序设计方法;
学会利用单片机内部资源进行LED流水灯的控制;
掌握电路的基本连接方式,学会根据原理图进行硬件搭建;
分析实验结果,理解电路连接和程序执行的效果。

实验原理:
LED流水灯的控制原理可以通过单片机外设库和内部资源来实现。外设库提供了对单片机I/O口的操作函数,如延时、计数器、中断等。内部资源包括存储器、定时器、串口等,可以用来存储程序代码、控制LED灯珠的亮灭时间以及实现通信等功能。电路连接方面,需要将LED灯珠的正极连接到单片机I/O口,负极接地,同时串联适当的电阻以保护LED灯珠。

一、搭建STM32的开发环境
(一)安装jdk
由于STM32CubeMX是Java实现的,需要安装jdk环境。
jdk官网下载链接:
https://www.oracle.com/java/technologies/javase-downloads.html

(二)安装STM32CubeMX
1.下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html
2.安装完成后打开

二、HEL库GPIO端口3只LED红绿灯的周期闪烁
(一)CubeMX建项目
1.安装固件库
打开STMCubeMX

2.新建项目
回到STMCubeMX的主界面,创建新项目:

选择芯片STM32F103C8

RCC选择

选择端口输出设置,选择需要的端口,点击设置

GPIO_OUTPUT,我选择的是PC13,PA15,PB0

接下来观察时钟架构

Project Manager设置

创建项目完毕,然后用Keil打开

(二)main.c代码修改


1.在while(1)中输入以下代码

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);  // 灯1亮
    HAL_Delay(1000); // 延时1s
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);  // 灯1灭
      
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);  // 灯2亮
    HAL_Delay(1000); // 延时1s
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);  // 灯2灭
      
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);  // 灯3亮
    HAL_Delay(1000); // 延时1s
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);  // 灯3灭

(三)烧录运行结果
1.烧录工具
硬件工具:
st-link v2
STM32F103C8开发板
LED灯
线路若干

软件工具:
keil c51

2.结果展示
在这里插入图片描述

三、波形观察
1.仿真环境设置
debug设置

2.点击魔法棒,选择target,晶振选择为8MHZ:
(注意:这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确)

3.点击调试

4.设置完成后,开启调试模式,打开逻辑分析仪:

5.选择要观察的引脚
①点击Setup Logic Analy
②添加要观察的引脚


6.输入(PORTB & 0X00000000)>>0、Display Type选择Bit,依次输入(PORTA & 0X00008000)>>15、(PORTC & 0X00002000)>>13


7.点击全速运行;执行一段时间后,点击停止按钮即可:
另:点击in或out设置Grid的大小为1s,勾选signal info和cursor可以设置起始线看到相关信息:

8.波形图
运行一段时间后,点击暂停;
为了观察一下延时函数是否准确:将鼠标移动至第一个波形的一条下降沿处,并点击,锁定此刻的时间;再将鼠标移动至第二条波形的下降沿处与其重叠,观察二者的时间:

总结
通过这次实验,不仅理解了STM32cubemx的基础原理知识,同时通过在stm32cubeMX的开发环境下,运用HAL库编程实现LED流水灯及Keil环境下的仿真运行,观察其波形,又进一步加深了我对这部分知识的理解与运用。实操过程中,还是有些小问题,经过上网查询以及同学们的帮助下,完成了实验。
参考资料:
https://blog.csdn.net/weixin_56102526/article/details/120877293
https://blog.csdn.net/weixin_46129506/article/details/120780184
 

《餐馆点餐管理系统——基于Java和MySQL的课程设计解析》 在信息技术日益发达的今天,餐饮行业的数字化管理已经成为一种趋势。本次课程设计的主题是“餐馆点餐管理系统”,它结合了编程语言Java和数据管理系统MySQL,旨在帮助初学者理解如何构建一个实际的、具有基本功能的餐饮管理软件。下面,我们将深入探讨这个系统的实现细节及其所涉及的关键知识点。 我们要关注的是数据设计。在“res_db.sql”文件中,我们可以看到数据的结构,可能包括菜品表、订单表、顾客信息表等。在MySQL中,我们需要创建这些表格并定义相应的字段,如菜品ID、名称、价格、存等。此外,还要设置主键、外键来保证数据的一致性和完整性。例如,菜品ID作为主键,确保每个菜品的唯一性;订单表中的顾客ID和菜品ID则作为外键,与顾客信息表和菜品表关联,形成数据间的联系。 接下来,我们来看Java部分。在这个系统中,Java主要负责前端界面的展示和后端逻辑的处理。使用Java Swing或JavaFX可以创建用户友好的图形用户界面(GUI),让顾客能够方便地浏览菜单、下单。同时,Java还负责与MySQL数据进行交互,通过JDBC(Java Database Connectivity)API实现数据的增删查改操作。在程序中,我们需要编写SQL语句,比如INSERT用于添加新的菜品信息,SELECT用于查询所有菜品,UPDATE用于更新菜品的价格,DELETE用于删除不再提供的菜品。 在系统设计中,我们还需要考虑一些关键功能的实现。例如,“新增菜品和价格”的功能,需要用户输入菜品信息,然后通过Java程序将这些信息存储到数据中。在显示所有菜品的功能上,程序需要从数据获取所有菜品数据,然后在界面上动态生成列表或者表格展示。同时,为了提高用户体验,可能还需要实现搜索和排序功能,允许用户根据菜品名称或价格进行筛选。 另外,安全性也是系统设计的重要一环。在连接数据时,要避免SQL注入攻击,可以通过预编译的PreparedStatement对象来执行SQL命令。对于用户输入的数据,需要进行验证和过滤,防止非法字符和异常值。 这个“餐馆点餐管理系统”项目涵盖了Java编程、数据设计与管理、用户界面设计等多个方面,是一个很好的学习实践平台。通过这个项目,初学者不仅可以提升编程技能,还能对数据管理和软件工程有更深入的理解。在实际开发过程中,还会遇到调试、测试、优化等挑战,这些都是成长为专业开发者不可或缺的经验积累
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值