NUCLEO-F411RE RT-Thread 体验 (4) - GCC环境 LED控制以及CMD命令的添加

news2024/10/6 0:59:14

NUCLEO-F411RE RT-Thread 体验 (4) - GCC环境 LED控制以及CMD命令的添加

1、LED的控制

前面pin驱动移植后,我们使用rt_pin_mode() rt_pin_write() 控制gpio拉高拉低,从而控制LED灯的闪烁。
整个pin的初始化流程在rt_hw_board_init里。
在这里插入图片描述
rt_hw_pin_init中最重要的是rt_device_pin_register这个函数。
在这里插入图片描述
在这里插入图片描述
rt_device_pin_register这个函数里_hw_pin.parent应该没啥用,最重要的是_hw_pin.ops = ops;这句话,将_stm32_pin_ops赋值过来。
在这里插入图片描述
这些函数指针分别对应
在这里插入图片描述
从而调用到hal库中的函数。而之前 tm32cumxbe生成的gpio.c gpio.h 文件我们也可以删掉了。

2、finsh命令添加

1、添加info命令,显示系统时钟等信息

在这里插入图片描述

2、添加led命令,控制LED的亮灭等

void led_show_usage(void)
{
    rt_kprintf("Usage:\r\n");
    rt_kprintf("  led (-h | --help)\r\n");
    rt_kprintf("  led (-i | --info      )   show led pin info \r\n");
    rt_kprintf("  led (-s | --set x 0/1 )   set led status \r\n");
    rt_kprintf("  led (-g | --get       )   get led status\r\n");
}
int led(int argc ,char *argv[])
{
    int c;
    int longindex = 0;
    int mode_value = 0;
    int pin_value = 0;
    const char short_options[] = "his:g";
    const struct option long_options[] =
    {
        {"help",        0,  NULL,     'h'},
        {"info",        0,  NULL,     'i'},
        {"set",         0,  NULL,     's'},
        {"get",         0,  NULL,     'g'},
        {NULL,          0,  NULL,      0},
    };

    if (argc == 1)
    {
        /* goto the help */
        led_show_usage();
        return 0;
    }
    /* init 0 */
    optind = 0;
    opterr = 0;

    do
    {
        /* code */
        /* parse the args */
        c = getopt_long(argc, argv, short_options, long_options, &longindex);
        switch (c)
        {
        case 'h':
            led_show_usage();
            break;
        case 'i':
            rt_kprintf("Led Pin Index = %d\n",LED0_PIN);
            break;
        case 's':
            mode_value = strtol(optarg,NULL,10);
            if (mode_value == 0 || mode_value ==1)
            {
                rt_pin_write(LED0_PIN,mode_value);
            }
            else
            {
                led_show_usage();
            }
            break;  
        case 'g':
            pin_value = rt_pin_read(LED0_PIN);
            rt_kprintf("get Led Pin State %s\n",pin_value == 1 ? "On" : "Off");
            break;          
        default:
            break;   
        } 
    } while (c != -1);
    
    return 0;
}
 
MSH_CMD_EXPORT(led , Led Control);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

梅林固件启用自定义DDNS(以cloudflare为例)

参考: In-a-dyn 组件:In-a-dynhttps://github.com/RMerl/asuswrt-merlin.ng/wiki/DDNS-services In-a-dyn配置示例https://github.com/troglobit/inadyn/tree/master/examples原理: 原版梅林固件即Asuswrt-Merlin 自384.7开始,引…

JDK自带的构建线程池的方式之newSingleThreadExecutor

newSingleThreadExecutor从名称上就可以知道这个是一个单例的线程池。在这个线程池中只有一个线程来处理任务。 就可以使用在业务涉及到顺序消费的时候。 newSingleThreadExecutor的代码展示 可以从这个在Executors中的静态方法newSingleThreadExecutor可以发现,该…

chatgpt赋能python:Python数值区间判断

Python数值区间判断 Python是一种高级编程语言,具有强大的数值计算和处理功能。在Python中,经常需要进行数值区间判断,以确定一个特定的数值是否位于指定的范围内。本文将介绍Python中常用的数值区间判断方法,并对其进行详细的讲…

SpringBoot操作Word实现文字替换和盖章(提供Gitee源码)

前言:在日常的工作当中,避免不了会涉及到一些Word文件方面的操作,这篇博客将使用SpringBoot整合开源Apache来操作Word,分享的都是目前实际当中会经常用到的一些功能代码都实际测试过,只分享干货,大家一键复…

AI加持、共建共享...亚马逊云科技重新定义云安全

我们正在进入数字化时代,无数传统企业正在飞速走上云端,无数基础设施服务在云的加持下焕发全新的活力。AI、物联网、大数据等新兴技术逐步落地应用,IaaS、PaaS、云原生技术日渐成熟,“云”正在快速扩容。2021年,我国云…

#10035. 「一本通 2.1 练习 1」Power Strings

Power Strings 题意简述: 求一个字符串由多少个重复的子串连接而成。 例如 ababab 由三个 ab 连接而成,abcd 由 abcd 由一个 abcd 连接而成。 输入格式 本题多组数据。 每一组数据仅有一行,这一行仅有一个字符串 s s s。 输入的结束标…

蓝牙GATT协议介绍

前言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。 GAP 详细介绍 GAT…

鉴源论坛丨汽车电子ISO 26262:2018标准概述(一)

作者 | 郭建 上海控安可信软件创新研究院特聘专家 版块 | 鉴源论坛 观模 摘要:安全在汽车研发中是关键要素之一,辅助驾驶、车辆的动态控制等功能的研发和集成都需要加强安全系统研发,同时,需要为满足所有预期的安全目标提供证据…

牛客网最新890道大厂 Java 八股文面试题整理

程序员真的是需要将终生学习贯彻到底的职业,一旦停止学习,离被淘汰,也就不远了。 面试跳槽季,这是一个千年不变的话题,每到这个时候,很多人都会临阵磨枪,相信不快也光。于是,大家都…

2023 最新版navicat 下载与安装 步骤及演示 (图示版)

2023 最新版navicat 下载与安装 步骤演示 -图示版 1. 下载Navicat2 .安装navicat 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请…

三子棋小游戏【C语言】

目录 前言 一、基本实现逻辑 二、实现步骤 1.实现进入游戏后的选择菜单——》这个实现起来较为容易,我们约定为:1是玩游戏, 0 是退出游戏! 2.要玩完了一局后接着玩,很容易想到要用循环。 3.采用多文件编程---》我…

0011-TIPS-pawnyable : Heap-Overflow

原文 Linux Kernel PWN | 040202 Pawnyable之堆溢出 Holstein v2: Heap Overflowの悪用 题目下载 漏洞代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/uaccess.h>…

【Nginx介绍和安装与升级】

文章目录 Nginx网站服务一、nginx服务基础1. Nginx简介2. Tengine3. Nginx 相对于 Apache 的优点4. 阻塞与非阻塞 同步与异步5. nginx 应用场景 二、编译安装nginx 服务1. 在线安装nginx2. nginx编译安装1. 关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2. 安装依…

二维码标签制作教程

如今二维码已被广泛应用在了许多场景中&#xff0c;譬如设备巡检、固定资产盘点、隐患上报、人员管理等&#xff0c;在二维码投入使用前需要为设备、物品、人员等制作一物一码标签。为了让标签快速落地&#xff0c;可使用草料二维码的标签制作功能&#xff0c;只需选择心仪的标…

Cortext-M3系统:中断的具体行为(6)

1、中断/异常的响应序列 当CM3开始响应一个中断时&#xff0c;会在它小小的体内奔涌起三股暗流&#xff1a; ​ 入栈&#xff1a;把8个寄存器的值压入栈 ​ 取向量&#xff1a;从向量表中找出对应的服务程序入口地址 ​ 选择堆栈指针MSP/PSP&#xff0c;更新堆栈指针SP&#xf…

数据恢复技巧:如何恢复已删除的手机短信

短信包含大量重要信息&#xff0c;例如个人联系人、密码和重要业务数据。丢失有价值的数据可能会令人失望&#xff0c;但很高兴知道可以使用多种方法恢复短信。 在本文中&#xff0c;我们将探讨您可以采取哪些步骤来恢复 Android 或 iOS 设备上丢失或删除的短信。 第 1 部分…

chatgpt赋能python:Python指定区域截图:优化截图流程的最佳方式

Python指定区域截图&#xff1a;优化截图流程的最佳方式 在网络时代&#xff0c;图片作为一种重要的信息传播方式&#xff0c;扮演着举足轻重的角色。截图作为最常见的图片处理方式之一&#xff0c;也时常被我们用于记录屏幕内容、报告问题及展示操作流程。 若想提高截图的效…

操作系统-I/O管理-磁盘和固态硬盘

目录 一、磁盘结构 二、磁盘调度算法 ​编辑 2.1先来先服务(FCFS) 2.2最短寻找时间优先(SSTF) 2.3扫描算法(SCAN) 2.4LOOK调度算法 2.5循环扫描算法(C-SCAN) 2.6 C-LOOK调度算法 三、减少延迟时间方法 交替编号 ​磁盘地址结构的设计 错位命名 四、磁盘的管理 4.1磁盘…

JDK自带的构建线程池的方式之newFixedThreadPool

在Java中基于Executors提供了很多种线程池供开发者使用&#xff0c;在Java的并发包下&#xff0c;由并发编程大佬到隔离创建。 newFixedThreadPool 这个线程池的特点是线程数是固定的&#xff0c;下面这个是在Executors类中提供的一种静态方法。在使用的时候需要向方法提供一个…

Excel VBA 语法基础

VBA&#xff08;Visual Basic for Applications&#xff09;是一种用于宏编程和自动化任务的编程语言&#xff0c;广泛应用于 Microsoft Office 套件中的各种应用程序&#xff0c;如 Excel、Word 和 PowerPoint。掌握 VBA 基础语法可以帮助您通过编写自定义的宏来增强和自动化这…