自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 原子学习笔记7——FrameBuffer 应用编程

Frame 是帧的意思,buffer 是缓冲的意思,所以 Framebuffer 就是帧缓冲,这意味着 Framebuffer 就是一块内存,里面保存着一帧图像。应用程序通过对 LCD 设备节点/dev/fb0(假设 LCD 对应的设备节点是/dev/fb0)进行 I/O 操作即可实现对 LCD 的显示控制。在应用程序中,操作/dev/fbX 的一般步骤如下:①、首先打开/dev/fbX 设备文件。

2024-05-14 22:00:00 306

原创 原子学习笔记4——GPIO 应用编程

当前 SoC 所包含的 GPIO 控制器,我们知道 I.MX6UL/I.MX6ULL 一共包含了 5 个 GPIO控制器,分别为 GPIO1、GPIO2、GPIO3、GPIO4、GPIO5,在这里分别对应 gpiochip0、gpiochip32、gpiochip64、gpiochip96、gpiochip128 这 5 个文件夹,每一个 gpiochipX 文件夹用来管理一组 GPIO。base:与 gpiochipX 中的 X 相同,表示该控制器所管理的这组 GPIO 引脚中最小的编号。

2024-05-11 22:04:17 1083

原创 原子学习笔记3——点亮 LED

dev/目录下的设备文件(设备节点);/sys/目录下设备的属性文件。具体使用哪种方式需要根据不同功能类型设备进行选择,有些设备只能通过设备节点进行操控,而有些设备只能通过 sysfs 方式进行操控;当然跟设备驱动具体的实现方式有关,通常情况下,一般简单地设备会使用 sysfs 方式操控,其设备驱动在实现时会将设备的一些属性导出到用户空间 sysfs 文件系统,以属性文件的形式为用户空间提供对这些数据、属性的访问支持,譬如 LED、GPIO 等。

2024-05-11 01:00:27 607

原创 原子学习笔记2——交叉编译链安装

CC 变量其实就是交叉编译工具,所以 CC 环境变量其实就是 ARM 架构下的 gcc 编译器—交叉编译工具 arm-poky-linux-gnueabi-gcc,后面指定了一些选项,这些选项就不用管了;获取到 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 编译器(Ubuntu是64位系统),在 Ubuntu 中创建目录:/usr/local/arm,命令如下:sudo mkdir /usr/local/arm。

2024-05-10 22:18:17 708

原创 原子学习笔记6——使用tslib库

tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库,并且是开源。tslib 为触摸屏驱动和应用层之间的适配层,它把应用程序中读取触摸屏 struct input_event 类型数据(这是输入设备上报给应用层的原始数据)并进行解析的操作过程进行了封装,向使用者提供了封装好的 API 接口。

2023-12-20 22:00:00 1230

原创 原子学习笔记5——输入设备应用编程

常见的输入设备有鼠标、键盘、触摸屏、遥控器、电脑画图板等,用户通过输入设备与系统进行交互。

2023-12-19 19:58:55 885

原创 原子学习笔记1——阻塞和非阻塞IO

阻塞式 I/O 顾名思义就是对文件的 I/O 操作(读写操作)是阻塞式的,非阻塞式 I/O 同理就是对文件的I/O 操作是非阻塞的。当对文件进行读操作时,如果数据未准备好、文件当前无数据可读,那么读操作可能会使调用者阻塞,直到有数据可读时才会被唤醒,这就是阻塞式 I/O 常见的一种表现;如果是非阻塞式 I/O,即使没有数据可读,也不会被阻塞、而是会立马返回错误。

2023-12-15 18:54:01 1165

原创 Makefile语法

可以看出这条规则的目标是main,依赖文件是main.o input.o calcu.o,如果要更新目标 main,就必须先更新它的所有依赖文件main.o input.o calcu.o,如果依赖文件中的任何一个如calcu.o有更新,那么目标main也必须更新,“更新”就是执行一遍规则中的命令列表。Makefile 有一种特殊的目标——伪目标,一般的目标名都是要生成的文件,而伪目标不代表真正的目标名,在执行 make 命令的时候通过指定这个伪目标来执行其所在规则的定义的命令。类似 C 语言中的宏。

2023-12-07 21:48:20 963

原创 gcc编译器与Makefile入门

GCC 编译器的编译流程是:预处理、编译、汇编和链接。如果文件有成百上千个,编译起来时间就很长,书写也费劲,,为此提出了一个解决大工程编译的工具:make,描述哪些文件需要编译、哪些需要重新编译的文件就叫做 Makefile,Makefile 就跟脚本文件一样,Makefile 里面还可以执行系统命令。

2023-04-03 00:02:00 1686 1

原创 【esp32学习之路7——硬件定时器】

ESP32 的定时器分为 2 组,每组 2 个。ESP32 内置 4 个 64-bit 通用定时器。每个定时器包含一个 16-bit 预分频器和一个64-bit 可自动重新加载向上/向下计数器。详情可参考乐鑫文档。

2023-01-13 21:00:00 1661

原创 正点原子stm32F407学习笔记6——外部中断实验

这样每个中断线对应了最多 9 个 IO 口,以线 0 为例:它对应了 GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0,GPIOH.0,GPIOI.0。编译后报错,提示关于EXIT类函数未定义,这是因为在GPIO那一章节编译全部库文件比较慢把不相关的库文件从工程中删除了,所以操作找不到相关库函数。设置好中断后,当按键按下有上升下降沿时触发中断,进入中断服务函数,判断中断标志位,延时10Ms去抖动,再判断是否是高低电平执行相关操作。

2022-11-23 21:09:29 2004 2

原创 正点原子stm32F407学习笔记5——串口通信实验

直接编译正点原子串口通信实验例程,主要关注main函数和USART1_IRQHandler中断服务函数的逻辑,不太好理解,主要关注下USART_RX_STA这个16位的变量做到类似于标志位的作用与 0x0a换行符0x0d为回车符的处理过程。USART_RX_STA的前13位作为数据长度,第14位收到0x0d后置位0x4000,第15位收到0x0a后置位0x8000后在主函数中发送接收到的数据,这些可以理解为自己定的协议。上位机给开发板发送数据,开发板将收到的数据发回给上位机。

2022-11-22 23:25:57 3519

原创 正点原子stm32F407学习笔记4——按键输入实验

KEY0、KEY1 和 KEY2 是低电平有效的,而 KEY_UP 是高电平有效,并且外部都没有上下拉电阻,所以,需要在 STM32F4 内部设置上下拉。并在之前led.h和beep.h两个头文件分别加上这两段宏定义位操作代码,不然主函数报错LED和BEEP未定义错误。使用位操作方便,可以右击PFout 查看,对应各自IO口的地址。参考蜂鸣器一节新建文件key.c,key.h并添加到工程中。最后将程序下载进开发板观察现象。

2022-11-02 23:19:42 1866

原创 正点原子stm32F407学习笔记3——蜂鸣器实验

点击保存,这只是保存在本地文件夹中,但此时beep.c还没有加入到工程中,双击HARDWARE文件夹,将beep.c添加到工程中可以看到HARDWARE文件夹下的文件。蜂鸣器为有源蜂鸣器,当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声,硬件原理图如下。打开keil软件中上一节的LED模板,建一个文件,然后保存在HARDWARE→BEEP 文件夹下面,保存为 beep.c。在beep.c中输入如下代码。2、新建beep.h头文件。1、新建beep.c文件。

2022-11-01 23:14:22 3682 1

原创 正点原子stm32F407学习笔记2——GPIO操作跑马灯实验

配置相关寄存器寄存器RCC->AHB1ENR,打开STM32F4XX中文参考手册的6.3.12 小节RCC AHB1 外设时钟使能寄存器,可以看到GPIOF在标号的第5位,设置为1使能IO端口F时钟,其他位不变。在FWLIB文件夹中有多余的源文件,使得编译速度变慢,可以去掉多余的源文件,留下上面使用的5个源文件,右击 Template,选择“Manage project Items”,进入这个选项卡。新建一个文件,然后保存在 HARDWARE->LED 文件夹下面,保存为 led.c。

2022-10-30 21:01:44 1780

原创 正点原子stm32F407学习笔记1——新建工程模板

9、右键点击点击Tempate,选择 Manage Project Items.然后选择需要添加文件的 Group,这里第一步我们选择 FWLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录\FWLIB\src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件(对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。”,然后选择目录为我们上面新建的 OBJ 目录。

2022-10-29 16:33:19 5441 2

原创 【esp32学习之路6——flash加密】

在esp-idf中复制出(/esp/esp-idf/examples/security/flash_encryption)demo文件,详细加密描述参考乐鑫文档Flash加密在开发过程中,可使用 ESP32 内部生成的密钥或外部主机生成的密钥进行 flash 加密。在开发模式下不会阻止修改和读取加密的 flash 内容。在做加密实验之前,且确保模组没有做任何的加密,要检查您ESP32 设备上是否启用了 flash 加密,请执行以下操作之一:(1)将应用示例 security/flash_encrypti

2022-06-19 22:22:26 3742

原创 【git学习之路3——在本地新建分支并提交到远程】

1、首先可以在本地新建分支git branch Dev然后切换分支git checkout Dev也可以两个命令一起使用合并成一条新建加切换git checkout -b Dev2、本地分支推送到远程如果新建本地分支之后直接git push推送的话会出现fatal: 当前分支 Dev没有对应的上游分支。为推送当前分支并建立与远程上游的跟踪,使用git push --set-upstream origin Dev就直接使用下面命令git push --set-upstream orig

2022-06-04 17:23:18 3062

原创 【ESP32学习之路5——station模式下连接到WiFi热点】

在这里插入图片描述在sdkconfig中看到默认的SSID与PASSWORD,以及重连的次数为5次,在idf.py menuconfig 中更改

2022-05-21 23:19:09 1662

原创 git学习之路2——撤销修改并将远程代码更新到本地

git fetch(orgin master)从远程更新代码到本地,将远程仓库的master分支下载到本地当前branch中但是没有更新本地的库中maste分支,而是从远程更新在跟踪的远程分支orign/maste上,这时我们在本地存储了两个代码的版本这时就需要git merge(origin/master)来合并本地与远程的两个分支,如果在远程和本地同一处做了修改就会产生冲突git pull相当于从远程获取最新版本并merge到本地。简单粗暴[git pull与git fetch的区别]参考下这个

2022-05-17 15:30:32 3006

原创 【ESP32学习之路4——生成并使用.a静态库】

ESP32生成并使用.a静态库set(LIBS ffs_idf_port)add_library(${LIBS} STATIC IMPORTED)set_property(TARGET ${LIBS} PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib${LIBS}.a)target_link_libraries(${COMPONENT_LIB} INTERFACE ${LIBS})set_property(TARGET ${LIB

2022-04-23 23:33:01 3232 14

原创 【ESP32学习之路3——构建系统与组件】

2022-04-23 21:53:12 2268 2

原创 git学习笔记1——本地创建版本库提交到远程

一、本地创建版本库1、版本库即仓库,英文名repository,理解为目录,可以被git管理起来的目录。在本地的一个文件夹下新建一个目录即可,以后所有工程文件都要放在这个文件夹下,因为这是一个git仓库,放在其他地方git是找不到的。mkdir esp-idf-example2、通过git init命令把这个目录变成Git可以管理的仓库在新建的目录下可以看到有一个隐藏的.git目录。二、把文件添加到仓库我在esp-idf中复制了hello_world文件到文件夹中git add ..

2022-04-21 22:43:10 603

原创 【ESP32学习之路2——GPIO操作】

一、工程模板新建的工程模板可使用IDF中examples下get-started中sample_project工程复制到ESP-idf文件夹下。二、示例程序实现功能:按下一次按键点亮一个LED灯。(找一个有按键和LED的开发板,用杜邦线把ESP32上IO口连接到对应开发板的LED和按键上)1、函数操作2、结构体操作...

2022-03-23 20:21:58 1610

原创 【ESP32学习之路1——Linux下的环境搭建】

一、设置开发环境1、乐鑫开发文档ESP-IDF编程指南——快速入门 stable(4.4)版本2、安装准备(Linux、Ubuntu)(先安装好虚拟机、Ubuntu和Git,然后可以进行如下操作)Linux 平台工具链的标准设置:编译 ESP-IDF 需要以下软件包,在ubuntu下使用如下命令安装工具(下载教慢可能要多试几次)sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptool

2022-03-21 23:25:49 3184 2

原创 51单片机的串口通信原理

一、并行和串行通信方式通信有并行和串行两种通信方式。在单片机系统以及现代单片机测控系统中信息交换多采用串行通信方式。1、并行通信方式并行通信通常是将数据字节的各位用多条数据线同时进行传送,每一位数据都需要一条传输线。如下图所示,8位数据总线的通信系统,一次传送8位数据(1字节),需要8条数据线。还需要一条信号线和若干控制信号线,这种方式仅适合短距离的数据传输。2、串行通信方式串行通信方式是将数据字节分为一位一位的形式在一条传输线上逐个传输,此时只需要一条数据线,外加一条公共信号地线和若干控制信号

2022-03-17 22:56:21 10799 4

翻译 【一个完整的人机界面程序框架】

程序功能如下:(1)数码管前四位可切换3个窗口,1-XX,2-YY,3-ZZ,XX,YY,ZZ分别代表3个可编辑的数据Gu8SetDate_1,Gu8SetDate_2,Gu8SetDate_3,数据范围0-99;(2)按键1有短按和长按功能。长按第三或第四数码管闪烁,再短按在三四数码管之间切换;再长按没有闪烁,显示3个窗口其中一个窗口,短按在三个窗口间切换;(3)按键2,在闪烁条件下累加(4)按键3,在闪烁条件下依次减小在窗口切换中用到整屏更新和局部更新。(此框架值得好好研究)#include

2022-02-14 22:45:31 359

翻译 【独立按键组成的组合按键、短按与长按、按住不松手的均匀触发】

(1)单击K1点亮LED,单击K2熄灭LED,K1与K2组合按键蜂鸣器发声。#include "reg52.h"#define KEY_VOICE_TIME 50//按键触发后发出的声音长度#define KEY_FILTER_TIME 25//按键滤波的“稳定时间”25ms// #define KEY_INTERVAL_TIME 400//连续两次单击之间的最大有效时间sbit beep=P2^3;//蜂鸣器sbit P1_4=P1^4;//LEDsbit KEY_INPUT1=P3^4;/

2022-02-01 10:06:27 1030

原创 【独立按键鼠标式的单击与双击】

(1)按键与蜂鸣器的非阻塞驱动消抖的两种境界:第一种判断两次电平状态,中间加入“固定延时时间”,不足之处是“固定时间”靠经验值,软件抗干扰能力也弱了很多,“密码等级”不够高,第二种是“清零式滤波”。#include "reg52.h"#define KEY_VOICE_TIME 50//按键触发后发出的声音长度#define KEY_FILTER_TIME 25//按键滤波的“稳定时间”25mssbit beep=P2^3;sbit KEY_INPUT1=P3^4;sbit KEY_INPUT

2022-01-17 22:35:23 315

原创 【跑马灯的三种境界】

1、移位阻塞#include <reg52.h>#define uint unsigned int#define uchar unsigned charvoid delayms(uint xms){ uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}void main(){ uchar Su8Data=0x01,Su8Cnt=0; while(1) { P1=Su8Data;//P1口8个管脚连接8个l

2022-01-03 22:59:24 305

原创 【一个定时中断产生N个软件定时器】

一个定时中断产生N个软件定时器#include <reg52.h>//三个LED灯并行处理,分别闪烁0.5、1、2S#define BLINK_TIME1 25//定时时间0.5S,每20MS中断一次#define BLINK_TIME2 50//1S#define BLINK_TIME3 100//2Ssbit led1=P1^0;sbit led2=P1^2;sbit led3=P1^4;volatile unsigned int count1=0,count2=0,coun

2022-01-02 22:19:19 274

原创 ESP32上对flash的读取操作

通过按键控制一个LED灯的亮和灭,每次重启时读上一次的状态#include <stdio.h>#include "freertos/FreeRTOS.h"#include "freertos/task.h"#include "esp_system.h"#include "nvs_flash.h"#include "nvs.h"#include "driver/gpio.h"#include "sdkconfig.h"#define GPIO_LED_1 0#define

2021-10-18 15:31:55 5222

原创 51单片机上AD和DA操作

一、ADC0804的操作1、试验板上ADC0804的接线图AD芯片上的第5管脚INTR没有接线,因为该实验板读取A/D数据没有用中断法,所以可以不接该引脚。2、芯片的操作时序图如下操作芯片时基本按照此顺序操作各个引脚。操作过程:在此实验中要连续转换连续读取数据,就将CS一直置低,没有用到中断也不用操作INTR引脚,剩下就只用操作WR和RD引脚,首先将WR置低,经过tW(WR)L时间后拉高WR,转换开始,经过1~8个A/D时钟周期1/fCLK和内部Tc时间后,转换完成;接着将RD置低,经过tACC

2021-04-20 21:13:10 3918

原创 51单片机的键盘检测原理

一、独立键盘检测1、按键的检测原理单片机的I/O口既可以作为输出也可以作为输入使用,检测按键时用的是输入功能。把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一个高电平,然后让单片机不断地检测该I/O口是否变成了低电平,当按键闭合时,相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平就说明按键被按下,然后执行相应的指令。2、实验板原理图独立按键S2,S3,S4,S5分别连接单片机的P3^4,5,6,7。3、去抖动操作由于使用的是弹性小按键,

2021-04-17 22:36:26 7238 3

原创 51单片机的中断系统

一、中断的概念中断是指:CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作(中断响应),转去处理事件B(中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续去处理事件A(中断返回)。(就是我在打麻将的时候来了一个快递,我就停止打麻将去拿快递,拿完快递又接着打麻将了。拿快递的过程就是中断)二、中断系统80C51的中断系统有5个中断源(80C52有 6个) ,2个优先级,可实现二级中断嵌套 。(而80C52单片机有四个中断优先级,即

2021-03-22 23:10:42 2276 2

原创 51单片机上数码管的静态显示和动态显示

一、TX1C数码管介绍共阴极和共阳极数码管,实验板上是共阴极数码管,8位一体的数码管。连接原理图如下面两图:连在一起的段线(段选线)控制数码管亮什么数字,独立的公共端(位选线)控制哪一位数码管亮。因为段线是连接在一起的,所以显示的数字是一样的,共阴极一端是独立的公共端,所以低六位分别控制哪位数码管亮。用两个锁存器可以控制任意数码管显示任意数字。一、数码管的静态显示...

2021-03-20 21:47:16 12084

原创 51单片机实现流水灯操作

一、用移位操作二、用C51库函数三、总结

2021-03-19 14:55:58 3110

原创 用keil2软件模拟延时语句的时间

首先点击project下的option for target ’target1‘将晶振频率改为11.0592MHz,与TX-1C试验板上的晶振频率一致然后点击debug下的start/stop debug session 按钮进行调试延时代码如下#include <reg52.h>//int整型变量分配两个字节,范围在(-32768~32767即-2^15~2^15-1)之间unsigned int i,j;//无符号整型变量分配两个字节,范围在(0~65535即2^16-1)之

2021-03-18 21:15:47 555

原创 用51单片机点亮一个发光二极管开始

一、前言第一次写博客,菜鸟一枚,权当记录自己学习的过程。因为之前自己学习了一下51单片机和C语言,时间长了感觉忘了很多,之前基本按步骤走的多,理解的不够深,而且没有做笔记的习惯,所以博客就当自己的在线笔记吧,以后查找起来也方便。所以写的时候只会标注我自己容易忘和理解的不到位的地方,这样也能督促一下自己持续的学习下去。使用的开发板是郭天祥的51开发板,教材也主要参考他的新概念51单片机C语言教程,keil2版本,烧录软件是stc-isp下载烧写软件v6.86.exe.二、keil2新建一个工程第一步:

2021-03-17 23:15:22 3400

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除