• (STM32)从零开始的RT-Thread之旅--GPIO


    无论什么开发板,最先调试的肯定是GPIO,一般用来用作指示灯或者按键输入。本篇只是很简单的GPIO应用,没有具体分析RTT框架实现。

    首先先创建一个BSP文件夹,里面可以放各种板级驱动:

    然后依次再在文件夹里创建相关文件:

    然后再把头文件路径添加进去:

    然后把新增的头文件目录添加进去:

    准备工作做好,就可以添加驱动代码。这里我的开发板上的LED是PE3,按键输入是PC13

    在led.c中代码十分简单:

    1. #include
    2. #include
    3. #include "led.h"
    4. void led_on(void *args)
    5. {
    6. rt_pin_write(LED_PIN_NUM, PIN_HIGH);
    7. }
    8. void led_off(void *args)
    9. {
    10. rt_pin_write(LED_PIN_NUM, PIN_LOW);
    11. }
    12. void led_init(void)
    13. {
    14. rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
    15. rt_pin_write(LED_PIN_NUM, PIN_LOW);
    16. }

    这个LED_PIN_NUM其实就是PE3的索引,我在led.h中定义它:

    1. #ifndef BSP_INC_LED_H_
    2. #define BSP_INC_LED_H_
    3. #ifndef LED_PIN_NUM
    4. #define LED_PIN_NUM 67 /* PE3 */
    5. #endif
    6. void led_init(void);
    7. #endif /* BSP_INC_LED_H_ */

    它是怎么得到的呢?我们需要在drv_gpio.h中查询:

    在这个文件中定义了一个数组,数组里面包含STM32最大引脚个数的所有引脚索引:

    因为我们选择好MCU后RTT Studio就知道了我们芯片的封装,它会自动根据你芯片封装确定你芯片引脚个数,从而知道你的芯片有哪几个GPIO组,这些都不用我们关系和设置。从这个表里可以查到所有引脚的索引,比如我这里的:

    然后看一下具体的引脚设置:

    可以看到极其简单,其中引脚模式有几种:

    然后按键使用了中断,具体设置如下:

    至此框架已经搭建完毕,可以写个按键开关LED灯的测试代码:

    只需要在key.c中添加:

    1. #include
    2. #include
    3. #include "key.h"
    4. #include "led.h"
    5. void key_irq(void *args)
    6. {
    7. if(rt_pin_read(LED_PIN_NUM))
    8. rt_pin_write(LED_PIN_NUM, 0);
    9. else
    10. rt_pin_write(LED_PIN_NUM, 1);
    11. }
    12. void key_init(void)
    13. {
    14. led_init();
    15. rt_pin_mode(KEY_PIN_NUM, PIN_MODE_INPUT_PULLDOWN);
    16. rt_pin_attach_irq(KEY_PIN_NUM, PIN_IRQ_MODE_RISING, key_irq, RT_NULL);
    17. rt_pin_irq_enable(KEY_PIN_NUM, PIN_IRQ_ENABLE);
    18. }

    然后在main.c中调用即可:

    测试完成可以开始后续模块开发。 

  • 相关阅读:
    前端必要收藏相关要点
    C Primer Plus(6) 中文版 第10章 数组和指针 10.7 指针和多维数组
    判断子序列
    02|如何量化分析语音信号
    网络编程内容
    如何使用ArcGIS Pro为栅格图添加坐标信息
    最新ACR15.0新功能如何使用?ps插件camera raw15.0mac版新功能教程
    【趣味设计模式系列】之【组合模式】
    10步开启SAFe敏捷发布列车
    springmvc第十四个练习(异常处理)
  • 原文地址:https://blog.csdn.net/qwe5959798/article/details/127844546