STM32实验一:GPIO点灯

嵌入式:STM32课堂实验一


前言

就像编程里的hello world,学习嵌入式开发的第一步,永远是操作GPIO端口点亮一个LED灯。


一、实验内容

实验器材是正点原子STM32开发板:
利用STM32CubeMX对MCU进行配置
生成基于MDK-ARM集成开发环境的初始化代码
添加功能逻辑,完成应用开发,编译并运行

二、实验步骤

1.创建工程

打开CubeMX新建工程,选择MCU型号F103ZET6;新建工程选择MCU型号F103ZET6

2.配置系统参数

进入配置界面,首先打开system core,选择sys,选择调试模式为serial wire串口调试,选择后可看到PA13和PA14两个端口被占用;
选择系统高速时钟由外部晶振提供;
随后打开Clock Configuration对时钟树进行配置。
配置系统参数
系统时钟

系统时钟树

3.配置I/O端口

由开发板电路图可知:开发板自带两个LED,相应的I/O端口号分别为PB5和PE5,输出低电平即可点亮。
在这里插入图片描述选择PB5和PE5端口,将其设置为GPIO_Output输出模式。
引脚配置为推挽输出模式,默认高电平
引脚配置

4.生成工程文件

点击ProjectManager,重命名项目文件,选择生成MDK工程文件,打开Code Generator勾选每一个外设初始化都生成一对的“.c/.h”文件。


生成工程文件
最后点击Generate Code生成项目文件,选择open project
在keil中打开

5.修改main.c

打开Keil软件后,打开Application/user/core目录下的gpio.c和main.c文件
其中,gpio.c文件中即是之前所配置的引脚基本信息:
端口配置
引脚配置信息:

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED0_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LED0_GPIO_Port, &GPIO_InitStruct);

打开main.c文件:在while主循环中,添加自己要执行的指令,此处即为让PE5和PB5两个端口输出低电平,并在延时后反转。对应操作函数即为HAL_GPIO_WritePin,和HAL_Delay。

HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
HAL_Delay(uint32_t Delay)

main.c中添加:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//端口输出低电平
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);
HAL_Delay(500);//延时500ms
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);
HAL_Delay(500);

注意:代码段应在一对BEGIN和END内,避免更新配置导致代码被覆盖。

最后编译和烧录即可
编译与烧录
如果没有意外的话,就能观察到开发板上的两颗led以固定的频率闪烁。

总结

不管使用何种嵌入式开发工具,其最终目的都是为了操作I/O端口。输出我们期望的控制信号,或是接受和处理所接受到的电平信号,所以点灯和按钮对应的写操作和读操作是一切的基础。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值