• (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中调用即可:

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

  • 相关阅读:
    智慧校园管理系统
    知识增广的预训练语言模型K-BERT:将知识图谱作为训练语料
    【Java基础】构造方法概述及注意事项
    环保行业B2B交易管理系统:赋能企业突围市场竞争,打造数字化B2B交易平台
    《多GPU大模型训练与微调手册》
    leetcode(1)链表
    热乎的过万字GameFramework讲解笔记文档
    基于Java毕业设计阳光社区新冠瘦苗接种系统源码+系统+mysql+lw文档+部署软件
    【推理引擎】ONNXRuntime 的架构设计
    哨兵模式(sentinel)
  • 原文地址:https://blog.csdn.net/qwe5959798/article/details/127844546