![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c
文章平均质量分 72
老子姓李!
单片机开发、嵌入式开发、MATLAB、Linux、电子设计等,忙于学习,感谢关注。私信评论看到了就必回。
展开
-
【详解~按键状态机~功能Plus】2.实现单击、双击、长按的功能(基于STM32)
按键状态机讲解见:【详解~按键状态机】1.实现短按长按的功能本文长按短按的基础上,增加了双击功能。文章目录1.问题描述2.单击、双击、长按的定义3.代码变更讲解3.1 宏定义3.2 结构体、枚举型3.3 按键全局变量3.4 函数定义关键函数3.5 定时器中断及main函数定时器函数main函数4.实验验证5.总结1.问题描述使用一个按键,实现长按、单击、双击操作。运用状态机思想,提高效率。外设:io口、定时器2.单击、双击、长按的定义 事.原创 2022-03-26 16:37:57 · 9343 阅读 · 6 评论 -
【源码详解~按键状态机~简洁易懂】1.单个按键实现短按长按的功能(基于STM32)
0.引言在日常生活中,有不少按键长按、短按的应用实例。比如:一个台灯,短按切换亮度,长按关机。问题来了,单片机是如何区分按键的短按和长按的呢?原创 2022-03-26 15:23:15 · 8236 阅读 · 15 评论 -
【昇润蓝牙】蓝牙4.0BLE模组(型号CC2541) 两个蓝牙之间互相通信的使用日志
使用昇润蓝牙4.0BLE模组(型号CC2541) 实现俩个蓝牙模组之间的通信电脑手机等和蓝牙模组通信的资料很多,但蓝牙模块之间的通信资料比较少。本文以CC2541模组为例实现,俩个蓝牙模块之间的数据通信。硬件准备1.CC2541主从一体的模组一块2.CC2541从机的模组一块注意:几乎相同外型的蓝牙模组,是区分主从机的。一般来说,俩个全是从机的蓝牙之间,不能实现相互通信。俩个主从一体的也可以。总之:一定要有一个模块可以作为主机模块介绍图实物图做了一个简单的转接板,将vcc,gnd,原创 2021-12-28 21:24:05 · 4599 阅读 · 3 评论 -
【VS code找不到头文件】成功解决 (检测到Include错误,请更新includePath)(明明有头文件,却找不到)
vscode 是一款好用且功能十分强大的编辑器。对于由编译器过渡到使用编译器而言,在编辑C/C++代码时,现在找不到头文件很让初学者头疼。找不到头文件,不能进行定义跳转,十分影响开发效率。如下图,就找不到下面的三个头文件。如何解决找不到头文件的问题,其实很简单,且听我细细道来。步骤:1.新建文件夹在工作区的根目录,新建.vscode文件夹。操作如图。(也可以直接在Ubuntu系统客户端里面新建文件夹)2.打开json配置文件在软件界面按住Ctrl+Shift+P,在软件上方出现输.原创 2021-08-25 10:16:10 · 104401 阅读 · 34 评论 -
【仿STM32库】编写I.MX6UL的LED驱动
一、STM32寄存器结构体 对于STM32而言,使用一个结构体将一个外设的所有寄存器都放到一起。将结构体抽象为硬件的外设寄存器,给结构体一个基地址,成员变量的地址自动偏移。仿照STM32库函数的方式,编写I.MX6UL的LED驱动。二、修改驱动 1、添加清除bss段代码 imx6ul.ldsSECTIONS{ . =0X87800000; .text : { start.o (*.text) } .r原创 2021-08-18 15:54:20 · 313 阅读 · 0 评论 -
使用汇编语言点亮正点原子ALPHA开发板的LED,基于I.MAX6ULL芯片。
使用汇编语言点亮正点原子ALPHA开发板的LED,基于I.MAX6ULL芯片。一、汇编LED原理分析 为什么要学习Cortex-A汇编:· ①、需要用汇编初始化一些SOC外设。 ②、使用汇编初始化DDR,I.MX6U不需要。 ③、设置sp指针,一般指向DDR,设置好C语言运行环境。ALPHA开发板LED灯硬件原理分析: STM32 IO初始化流程: ①、使能GPIO时钟。 ②、设置IO复用,将其复用为GPIO ③、配置GPIO的原创 2021-08-16 09:05:51 · 789 阅读 · 0 评论 -
调试技巧:使用宏实现调试信息快速控制(如开启、关闭等待)
程序开发过程中,printf是一种常用的调试信息。调试时printf打印的有多爽,那么正式上线删起来就有多狼狈!避免不需要打印调试信息时,重复地一个一个删除printf(“XXX”)。如此不优雅的性操作,实在不应该。如下代码,通过使定义 DEBUG_INFO的值来确定不同情形的调试信息。#include <stdio.h>#define DEBUG_INFO 2 #if(DEBUG_INFO == 1) #define LOG(...)原创 2021-08-11 18:44:13 · 387 阅读 · 0 评论 -
【FreeRTOS】2.STM32移植-任务挂起和恢复
u :代表unsigned。s :代表short。c :char。所以类似uc,us类的变量就是unsigned char,unsigned short,分别对应uint8_t,uint16_t。x :为用户自定义的数据类型,比如结构体,队列等。常看到ux开头的函数,就是unsigned且用户自定义的类型。需要注意的是size_t变量前缀也是ux。e :枚举变量p :指针变量类似(uint16_t *)变量前缀为pus。prv :static函数v: void函数挂起:原创 2021-08-11 09:02:43 · 132 阅读 · 0 评论 -
【C程序版本控制】C语言打印编译时间、版本编号等信息及__DATE__、__LINE__等常用宏
程序编译完成后提交,通常要包含一些版本信息。以C语言程序为例,使用宏打印出编译时间、版本编号等信息。废话不多说,直接上程序:#include <stdio.h>#define LOG_VERSION_NUM "1.0.0"#define COMPILE_TIME __DATE__","__TIME__#define PROJECT_NAME "A Big Project"#d原创 2021-07-31 18:19:52 · 2270 阅读 · 0 评论 -
手把手教你实现printf函数(C语言方式)
在日常的嵌入式开发过程中,常常会用到格式化输出的功能。比如在LCD屏幕上,显示需要的字符,如果没有格式化输出,用起来将会是十分麻烦。本文运用变参函数的知识,提供一种实现printf的格式化输出的实现方法供大家参考。实现思路通过一个个读取需要打印的字符,如果遇到格式化输出的字符,则根据格式化规则,用变参函数的方式取读取到参数,然后将参数拆解输出出来。主要难点为变参函数,下面介绍变参函数。变参函数学习1. 定义即:函数数目可变的函数。变参函数原型type VarArgFunc(type Fi原创 2021-07-03 15:20:56 · 18461 阅读 · 24 评论 -
C语言指针入门(解决你的各种概念问题的总结,包括空指针、野指针、数组指针、指针数组、函数指针、指针函数、多级指针等等)
本文记录了一些C指针的定义,包括空指针、野指针、数组指针、指针数组、函数指针、指针函数、多级指针等等一些知识点的小结。1.空指针:没有赋值的指针变量(没有指向内存变量的地址),对空指针操作会造成程序的Core dump(段错误)#include <stdio.h>#include <stdlib.h>int main(){ int* p_i = 0; printf("p_i = %p \r\n", p_i); *p_i = 2;// 试图对空指针进行赋值操作,原创 2021-07-01 09:50:43 · 217 阅读 · 0 评论 -
Makefile简单运用
Makefile定义作用:实现linux下C/C++的自动化编译和链接,省去了手动编译的繁琐。Makefile文件描述了make工具的自动化编译的规则。Makefile原则GCC常用基本操作gcc -c选项GCC 编译器将指定文件加工至汇编阶段,并生成相应的目标文件。所谓目标文件,其本质为二进制文件,但由于尚未经过链接操作,所以无法直接运行。语法格式:gcc -c [infile] [-o outfile][infile]表示要处理的输入文件,可以是源文件、汇编文件或者目标文件原创 2021-06-29 21:11:21 · 132 阅读 · 0 评论 -
shell脚本入门2(判断函数循环)
一、shell脚本条件判断 shell脚本支持条件判断,虽然可以通过&&和||来实现简单的条件判断,但是稍微复杂一点的场景就不适合了。shell脚本提供了if then条件判断语句,写法if 条件判断 ; then //判断成立要做的事情fi代码示例#!/bin/bashread -p "Please input(Y/N):" valif [ "$val" == "Y" ] || [ "$val" == "y" ];then echo "you input原创 2021-06-23 18:28:11 · 183 阅读 · 0 评论 -
shell脚本入门1(定义、语法)
一、什么是shell脚本我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一条输入命令。这样会很麻烦,那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是shell脚本!shell脚本类似windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件。shell脚本提供数组、循环、条件判断的等功能。shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。二、sh原创 2021-06-23 18:26:10 · 393 阅读 · 0 评论 -
【STM32移植机智云】超详细教程#1 ESP8266烧录机智云固件教程(烧录固件详细教学)
ESP8266烧录机智云固件教程(烧录固件详细教学)介绍a.esp8266简介 esp8266是一款常用的WiFi模块,物美价廉,功能强大。b.机智云简单实用的物联网平台。官网概述:准备材料1.esp8266模块。本文使用的是esp8266_01,如图。2.机智云官方固件获取渠道:机智云官网(需要先登录账号)–开发者中心–下载中心–GAgent,选择如图的ESP8266.下载解压如下图。3.固件烧写程序网上下载一个。如图。4.usb转ttl串口,原创 2021-05-11 15:11:32 · 19473 阅读 · 25 评论 -
【完美解决】ds1302外置时钟模块重复初始化时间问题(单片机掉电,模块电池供电)
芯片介绍:DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。模块实物图:淘宝购买的模块,物美价廉。一、问题描述DS1302时钟模块,通过单片机设置好时间后,由纽扣电池供电应当一直正常工作。但是单片机掉电再重新上电后,会导致模块重复初始化,使时间回到起点,与实际需求不符。单片机单纯上电直接初始化时间,有些不妥。二、解决方法方案一:1.先烧录正常初始化时间的代码。2.注释初始化时间的代码再原创 2021-02-02 13:42:43 · 10933 阅读 · 19 评论 -
MDK--KEIL超级实用插件安装,墙裂推荐
KEIL5安装实用插件,实现格式化代码、文件注释、函数注释等功能资料包下载配置完成使用效果插件包下载:资料包下载链接:或者私聊我2. 配置操作复制插件“tools”到自己的keil安装目录。打开keil5,如图添加插件,选择对应路径文件,输入对应Arguments。步骤图:配置截图:Arguments:"$E*.c" "$E*.h"Arguments:!EArguments:!E ~EArguments:!E ~E ^EArguments:!E ~E ^E原创 2020-10-29 01:32:00 · 11121 阅读 · 30 评论