【Day6】:GPIO输入输出(中)

GPIO 输出-LED闪烁

昨天我们成功将脚位设定成输出模式,现在我们将PB0脚位设定为输出模式。会选PB0是因为STM32F429ZI这块晶片的PB0脚位与USER LED的正极是连通的。因此只要将PB0设为输出,LED就会亮,可以很直观的判断是否成功输出。
https://ithelp.ithome.com.tw/upload/images/20210905/20141525Zpeyaewyj5.jpg
这块开发版上有3个LED分别对应到的脚位为PB0、PB7、PB14
继上次介绍HAL_Delay()後,我们来认识学习STM的第二个函式吧~
这个函式的功能就是Arduino的digitalWrite()

HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_PIN, GPIO_PinState PinState);

这是这个函式的API,不要看到一堆不认识的型态就害怕,举个例子你就明白了
假设你要让PB0脚位输出高电为,第一个参数就放GPIOB,就是"GPIO"+脚位的英文。第二个参数放GPIO_PIN_0,即"GPIO_PIN_" +第几号脚位,最後一个参数如果你要输出HIGH,就放GPIO_PIN_SET;LOW就放GPIO_PIN_RESET,很简单吧。
完整的程序码如下

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

搭配我们先前学过的HAL_Delay()函数

/* USER CODE BEGIN WHILE */
while (1) {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
    HAL_Delay(500);
}
/* USER CODE END 3 */

就可以让LED以1Hz的频率闪烁罗~

这个程序就像是学程序语言第一支程序一定都是在萤幕上输出HelloWorld一样呢

我们再来介绍今天的第二个语法吧

HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

这个函式与刚刚的很像,只不过这个会根据你现在的状况来做输出,每次都输出与现在状态相反的状态,例如现在是HIGH则下次输出LOW,反之亦然。
於是我们可以再更精简我们的程序码

/* USER CODE BEGIN WHILE */
while (1) {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
    HAL_Delay(500);
}
/* USER CODE END 3 */

GPIO-输入

学习完输出,我们来学习输入
要注意的是我们要把脚位设定成输入模式(刚刚是输出模式)
将.ioc档内配置将PF13脚位配置成输入模式(GPIO_Input),这样就完成设定啦
我们可以设计一个简单的线路,将刚刚已经设定好的PB0以杜邦线连接到PF13,这样我们就可以用PF13来侦测PB0所输出的脚位啦
https://ithelp.ithome.com.tw/upload/images/20210905/20141525xSIX173Mzr.jpg
接下来介绍今天最後一个语法

HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

这个函式可以读取现在输入是高电位还是低电位,直接来个范例吧

/* USER CODE BEGIN WHILE */
while (1) {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
    state = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_13);
    HAL_Delay(500);
}
/* USER CODE END 3 */

记得在全域变数宣告一个整数变数state喔
接着再利用我们之前提到的小工具-现场表达式,就可以看到state的值一直在1和0这两个数字交替变换罗

小结

今天总共介绍了3个函式分别是

  1. HAL_GPIO_WritePin()
  2. HAL_GPIO_TogglePin()
  3. HAL_GPIO_ReadPin()
    用这三个函式搭配适当的HAL_Delay()基本上已经可以做许多的控制了。但我们目前还缺了一个重要的东西那就是类比输入,明天再接着学习吧

<<:  不只懂 Vue 语法:如何使用 v-model 实现父子元件传递资料?

>>:  自动化测试,让你上班拥有一杯咖啡的时间 | Day 6 - 使用 Custom Commands

DAY9:元件与监听事件简介及实作

我们要来介绍到元件与监听事件,首先,先从取得画面元件说起,简单来说,Android主程序码跟画面的x...

菜鸡用 Phaser 拾起童年游戏 28

哈罗哈罗~我们的铁人赛也快到了尾声,今天要给大家介绍一个 template,可以让我们在制作的时候更...

Day 28【Deploy NFT - Deploy the Lazy Mint in Website】Vitalik Buterin mining Ethereum

// Thats proof of work 【前言】 今天终於来到这个 Project 测试的最...

新新新手阅读 Angular 文件 - ngFor(1) - Day19

本文内容 阅读有关 Angular 中有 ngFor 语法的笔记内容。 ngFor 在干嘛的? 它用...

什麽是 Webhook Signature

What and Why 在串接对方 webhooks 时通常会看到文件上提到 signature「...