IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于HAL库实现流水灯 -> 正文阅读

[嵌入式]基于HAL库实现流水灯

一、项目创建

1.在stm32cube选择对应型号单片机,本次实验采用stm32f103c8T6型号。
在这里插入图片描述
2.选择要用到引脚,本次实验使用A4、B5、C14引脚。

  • 点击对应的引脚
  • 选择GPIO_output
    在这里插入图片描述
    最终效果
    在这里插入图片描述
    3.配置系统调试接口,选择Serial Wire
    在这里插入图片描述
    4.配置GPIO
    在这里插入图片描述
  • GPIO output level:有low和high两种选择,一般选择low
  • GPIO mode:推挽输出和开漏输出两者模式,两者模式的区别在于推挽输出中1代表VCC,0表示GND;开漏输出中1代表高阻态,0代表GND。
  • GPIO Pull-up/Pull-down:输入需要上下拉,输出一般没有上下拉
  • Maxinum output speed:最大的输出速度,一般选择low就可以了。

在这里插入图片描述
5.配置项目

  • 输入项目名称

  • Application Structure 选择Basic

  • IDE选择MDK 5在这里插入图片描述

  • 选择stm固件库版本在这里插入图片描述

  • 生成项目

在这里插入图片描述

  • 打开项目,会直接跳到keil。在这里插入图片描述
  • 项目打开后如图在这里插入图片描述

二、使用

1.打开用cube生成的项目后打开main函数
在这里插入图片描述
2.在main函数里面找到while循环,在循环体内部加入流水灯代码
在这里插入图片描述

本次实验采用三个灯实现,亮灯状态用1表示,灭灯状态用0表示。
按照A4、B5、C14的顺序,初始状态为0 0 0,
状态一为1 0 0
状态二为0 1 0
状态三为0 0 1
状态三结束后继续进入状态一,一直循环达到流水灯效果。

while循环体代码如下

		//高电平点亮A4
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
		//延时一秒
		HAL_Delay(1000);
		//低电平熄灭A4
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
		
		
		//高电平点亮B5
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
		//延时一秒
		HAL_Delay(1000);
		//低电平熄灭B5
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
		
		
		//高电平点亮C14
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);
		//延时一秒
		HAL_Delay(1000);
		//低电平熄灭C14
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);

①延时函数(HAL_Delay)
函数原型: void HAL_Delay (__IO uint32_t Delay)
参数说明:Delay表示所要延时的时间大小,单位是毫秒
②写管脚函数(HAL_GPIO_WritePin)
函数原型:void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin, GPIO_PinState PinState)
参数说明:
GPIOx: 管脚组(x的取值为A~G)
GPIO_Pin: 管脚编号(x的取值为0~15)
PinState: 管脚的状态(取值为GPIO_BIT_RESET表示0, GPIO_BIT_SET表示1)

3.简单分析
参考使用c语言基于寄存器实现流水灯
当我们使用寄存器来达到上述效果的时候,需要使能时钟、配置输入输出模式等操作。而使用HAL库的时候,通过stm32CubeMX会自动生成对应引脚的配置代码。在main.c里面的MX_GPIO_Init函数即是。
在这里插入图片描述

三、效果

1.使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形。

①先build项目,然后点击debug
在这里插入图片描述
②点击System Analyzer Windows,选择Logic Analyzer
在这里插入图片描述
③点击setup
在这里插入图片描述
④添加需要观察的引脚

  • 先点击添加
  • 输入需要观察的引脚后回车。格式可以用GPIOx_IDR.n(x为端口,n为引脚号,GPIOA_IDR.4表示PA4)
  • 在Display Type记住要选择bit
  • 完成后点击close即可

在这里插入图片描述
⑤点击Run,观察波形。
在这里插入图片描述
⑥波形图如下
可以看到按照A4、B5、C14的顺序依次先高电平再低电平,时间间隔约为1s。
在这里插入图片描述
2.实物效果图
为了测试方便,我让c13的灯一直处于高电平状态。
在这里插入图片描述

四、总结

通过使用HAL库可以大大减少我们配置对应引脚的时间和代码量,在操作方面也大为方便,不需要再翻资料查找每一个寄存器的基地址了。

五、参考

STM32实现LED闪烁——基于HAL库

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:38:50  更:2021-10-20 12:41:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:54:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码