前言

学习stm32 GPIO 的使用,实现简单的按键输入功能,用按键的高低来控制LED的亮灭!

示例详解

基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。将PA0引脚设置成输入引脚,程序得到PA0引脚的(按键操作)输入状态,并根据其输入电平的高低来控制PC13输出,来控制LED,实现按一次LED亮,再按一下,LED灭的功能。

本示例所用的最小系统板原理图:

  1. 新建STM32 CUBEMX 工程,

    1. 双击桌面STM32CubeMX工具

  1. 在CubeMX中菜单中点 File à New Project …

  1. 在新弹出的界面中的搜索框中输入 “stm32f103c8” ,并双击右侧栏中列出的STM32F103C8

  1. 弹出如下图所示界面,至此工程创建完成!!接下是就是配置工程:

  1. 配置STM32 CUBEMX 工程

    1. 配置系统伏仿真调试接口, 在System Core 目录下单击SYS选项,将其中的Debug选项选为Serial Wire, 此时PA13 PA14引脚会被占用,配置图如下:

  1. 配置系统时钟源,在System Core 目录下单击RCC选项,将其中的High Speed Clock( HSE )选项选为Crystal/ceramic resona…, 此时PD0 PD1引脚会被占用,配置图如下:

  1. 配置GPIO PA0 及 PC13引脚,详细配置如下。

  1. 配置系统时钟树,将工程界面切换到Clock Configureation 界面,完成如下配置。

  1. 配置代码生成,工程界面切换到Project Manager 界面,在界面左侧单击Project项,将其设置成如下图所示( 设置工程路径在E:\Stm32cubePrj目录,工程名为stm32_key, 开发环境为 MDK-ARM v5 )。

在界面左侧单击Code Generator项,将其设置成如下图所示( 只拷贝所需文件到工程,为每个接口生成独立的初始化头文件和源文件,将所有未使用的引脚设为模拟输入)。

  1. 生成代码,单击工程界面中”GENERATE TOOL” 开始生成代码,代码生成后弹出是否打开工程对话框,单击“Open Project”打开创建的工程。

  1. 在代码工程(MDK/keil)中的 main.c 中 man函数中如下红框中代码:

  1. 编译工程

  1. 烧录代码,在代码工程中单击“Options for Target” 图标,在弹出的窗口中选中“Debug”页,选择相应的烧录工具(如本示例所用是jlink工具),然后单击右侧“Setting”按钮,将Port 设为“SW”, 最大速度建议不要超过5M(有此仿真调式工具接线过长,可以将最大速度设为100K,这样可以保证烧录成功),

接着选“flash Download”页,勾选“Reset and Run”,并确保其它内容如下图所示:

设置完上述设置后,便可进行下载操作,将调试仿真工具中的与最小系统板连接好,在工程中点Download 按钮,或按F8快捷键进入下载,下载完成后会出现如下图所示提示信息。

  1. 到此,操作GPIO引脚按键功能演示完成,实现了按一下按键(PA0引脚由高变低一次),LED输出PC13状态实现一次反转。

if( HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET )

{

HAL_Delay(50);  // 按键消抖延时

if( HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET )

{

HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);

// 等待按键释放

while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET);

}

}

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

文中资料下载,在公众号里给十三发消息:

下载|STM32基础系列教程2

关注十三公众号

STM32 基础系列教程 2 - GPIO 按键输入相关推荐

  1. STM32 基础系列教程 1- CubeMX+GPIO

    前言 学习stm32 GPIO 的使用,设置某一GPIO引脚为输出功能,将对应引脚拉高或拉低输出,同时学会初步认识STM32最新的HAL库的使用, 用代码实现控制GPIO引脚输出产生周期出1s 占空比 ...

  2. STM32 基础系列教程 3 – 外部中断

    前言 学习stm32 GPIO 的外部中断使用,用中断模式实现简单的按键输入功能,用按实现基础实验二中的LED亮灭切换功能! 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的 ...

  3. STM32 基础系列教程 24 - USB_HID_key

    前言 学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开 ...

  4. STM32 基础系列教程 50 – MbedTls

    前言 mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码.这是双重许可与Apache许可证 2.0版(与GPLv2许可也可).网站上指出,mbed ...

  5. STM32 基础系列教程 47 - MD5

    前言 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信 ...

  6. STM32 基础系列教程 40 - Lwip_mqtt

    前言 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级&qu ...

  7. STM32 基础系列教程 38 - Lwip_http

    前言 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的种网络传输协议,所有的WWW文件都必须遵守这个标准.HTTP是一个基于TCP/IP通 ...

  8. STM32 基础系列教程 36 - Lwip_dns

    前言 域名系统(英文:DomainNameSystem,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP和UDP端口53 ...

  9. STM32 基础系列教程 35 - Lwip_sntp

    前言 NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议.SNTP 简单网络时间协议(Simple Network Time Protocol ...

最新文章

  1. AttributeError: module ‘tensorflow‘ has no attribute ‘Session‘错误解决
  2. [React Native] 解析JSON文件
  3. Linux终端打开一只小马,Linux 终端上的漂亮小马
  4. 企业服务总线全双工异步通信机
  5. 解三对角线性方程组的追赶法
  6. shell脚本监控cpu/内存使用率 转
  7. c语言switch case ppt,C语言-09switch-case多分支开路语句.ppt
  8. Day11 - 使用正则表达式
  9. Come On, Baby!
  10. [BZOJ2339][HNOI2011]卡农
  11. WinForm(一):开始一个WinForm程序
  12. linux下的asp.net服务器,Ubuntu架设asp.net服务器
  13. 整人小程序c++实现(附源码)
  14. 史上最全微信运营工具
  15. 推导抛物线插值的拉格朗日插值公式
  16. 一文看懂多模态大型语言模型GPT-4
  17. 仿淘宝商品界面(html div+css)
  18. [Swift]LeetCode871. 最低加油次数 | Minimum Number of Refueling Stops
  19. 高中毕业礼物送什么比较好?第一名的礼物你绝对想不到
  20. 再也不怕和老外交流了!我用python实现一个微信聊天翻译助手!

热门文章

  1. [jQuery]无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案
  2. linux 内核线程与普通进程的区别
  3. NABC框架的创意之校园导航。
  4. [@Controller]4 详解@ModelAttribute
  5. 解决网通英文wiki无法显示图片问题【20100723更新】
  6. UA MATH563 概率论的数学基础 鞅论初步7 停时与Upcrossing不等式
  7. 使用Spyder生成动态二维码遇到的问题 ImportError 、ValueError 、OSError
  8. VC++ 使用BitBlt函数显示位图
  9. 混淆工具Dotfuscator基本使用
  10. Cesium环境搭建成功和初步看一下它的示例