- 博客(97)
- 资源 (23)
- 收藏
- 关注
原创 【嵌入式】STM32&12864点阵屏使用SimpleGUI单色屏接口库——(2)精简字库
精简字库首先要列出整个目标系统中所有可能用到的文字,然后进行去重,提炼出目标系统中用到的所有汉字。然后给这些汉字进行重新编码,简而言之就是进行简单排序,然后重新编号,这个编号就是新规定的字符编码。最后,用这个新的编码重新去对字符串进行编码,这样就完成了字库的精简了。
2024-08-01 15:05:21
1118
原创 【嵌入式】STM32&12864点阵屏使用SimpleGUI单色屏接口库——(1)移植
最近一个项目需要用12864屏幕呈现一组较为复杂的菜单界面,本着不重复造轮子的原则找到了SimpleGUI开源库。开源地址SimpleGUI是一款针对单色显示屏设计的接口库。相比于传统的GUI框架,SimpleGUI的出发点,是在一个单色显示器上,以尽可能少的消耗、尽可能多且直观的表达需要的内容,为此,SimpleGUI抛弃了诸如图层、遮罩、阴影、非等宽字体等高级的、复杂的操作,力求以简单快捷、易于操作的方式,使开发者尽快实现自己需要的功能需求。
2024-07-31 14:10:18
846
原创 【嵌入式】Arduino IDE + ESP32开发环境配置
最近想捣鼓一下ESP32的集成芯片,比较了一下,选择Arduino IDE并添加ESP32支持库的方式来开发,下面记录一下安装过程以及安装过程中遇到的坑。
2024-04-23 11:18:16
2186
原创 【PLC+Python】snap7/Tkinter实现与西门子PLC通讯/可视化(1)——PLC DB块创建
计划通过西门子 S7-1200(CPU 1212C-DCDCDC),进行PLC与设备间的数据监控。但TIA Portal V15.1 的交互数据非专业人员很难一目了然,又不想专门购买西门子的可编程屏幕,所以拟采用 python-snap7 模块实现上位机与PLC的通信,并将运行监控抽象到 Tkinter 绘制的可视化GUI上,方便测试维护人员操作。
2024-04-07 11:46:30
1444
原创 【PLC+Python】snap7/Tkinter实现与西门子PLC通讯/可视化(2)——Python上位机
snap7是一个由国外程序员开发的基于以太网与西门子S7系列PLC的通讯的开源库,类似于C#的S7.Net,但是它不单只支持Python,还支持Java、C/C++、C#等语言。
2024-04-07 10:22:05
1649
原创 【Python】实现一个类似于Glass2k的Windows窗口透明化软件
网上看到一款Windows下的窗口透明化工具Glass2k(Glass2k官网),可以简单地通过快捷键实现任意窗口的透明化,还挺方便的,想用Python自己实现一下类似的功能
2024-02-21 17:43:11
1128
原创 【嵌入式】STM32芯片使用12864串口屏(驱动为ST7567)
我用的这款LCD屏幕,驱动IC是ST7567。其原理是通过驱动芯片与128×64的液晶模组进行交互,结合背光板,就能指定哪些点阵被点亮,从而得到想要的图形
2024-01-25 11:48:59
5035
5
原创 【嵌入式】GPIO外部中断+定时器 实现红外NEC协议解码
红外(Infrared,IR)遥控是一种无线、非接触控制技术,常用于遥控器、无线键盘、鼠标等设备之间的通信。IR协议的工作原理是,发送方通过红外线发送一个特定的编码,接收方通过识别该编码来执行相应的操作。
2023-12-22 15:41:04
1787
3
原创 【嵌入式】开源shell命令行的移植和使用(2)——letter-shell
shell是一个C语言编写的,可以嵌入在程序中的嵌入式shell,主要面向嵌入式设备,以C语言函数为运行单位,可以通过命令行调用,运行程序中的函数。相对2.x版本,letter shell 3.x增加了用户管理,权限管理,以及对文件系统的初步支持。此外3.x版本修改了命令格式和定义,2.x版本的工程需要经过简单的修改才能完成迁移。若只需要使用基础功能,可以使用letter shell 2.x版本。
2023-11-28 18:00:08
3099
原创 【嵌入式】开源shell命令行的移植和使用(1)——nr_micro_shell
在进行调试和维护时,常常需要与单片机进行交互,获取、设置某些参数或执行某些操作,nr_micro_shell正是为满足这一需求,针对资源较少的MCU编写的基本命令行工具。虽然RT_Thread组件中已经提供了强大的finsh命令行交互工具,但对于ROM、RAM资源较少的单片机,finsh还是略显的庞大,在这些平台上,若仍想保留基本的命令行交互功能,nr_micro_shell是一个不错的选择。
2023-11-28 16:41:27
2026
2
原创 【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。CAN 使用称为 CANH / CANL 的通信线路执行传输和接收。电位差较小的电信号称为隐性信号,其逻辑值为1。电位差较大的电信号称为显性信号,其逻辑值0。如果通信总线上发生显性和隐性冲突,则显性优先。总线空闲时保持隐性。
2023-10-31 15:10:01
1910
原创 【嵌入式】HC32F07X DAC模拟输出 + DMA传输
所谓DAC,就是Digital-Analog-Converter,数字模拟转换器。在模拟电路中,电流电压变化是连续的,而数字电路处理的数据都是离散的数据,输出高电平或者低电平,比如5V单片机,引脚输出的电压要么5V要么0V。DAC做的就是输出一个“任意“的电压,当然这个”任意“是有限制的。
2023-10-27 11:31:52
411
原创 【嵌入式】HC32F07X ADC采样及软件滤波
单片机是数字芯片,只认识由0和1组成的逻辑序列。但实际情况下,生活中还有许多非0和1的模拟物理量存在,例如温度,湿度等。这时候往往需要使用到AD转换,AD转换的英文就是Analog(模拟) to Digital(数字) ,由模拟量转化为数字量;同理DA,则为Digital to Analog,数字量转化为模拟量。
2023-10-27 11:02:59
737
3
原创 【嵌入式】使用嵌入式芯片唯一ID进行程序加密实现
项目程序需要进行加密处理。考虑利用嵌入式芯片的唯一UID,结合Flash读写来实现。加密后的程序,可以使得从芯片Flash中读取出来的文件(一般为HEX格式)不能用于其他的芯片。
2023-09-27 16:53:24
1538
原创 【嵌入式】使用MultiButton开源库驱动按键并控制多级界面切换
开源库 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,作者 0x1abin。这个项目非常精简,只有两个文件,可无限量扩展按键,按键事件的回调异步处理方式可以简化程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰
2023-09-27 15:45:35
2586
3
原创 【嵌入式】Keil5自带JLink识别不到芯片(unkown to this version of the jlink software)的处理
使用了一款新的嵌入式芯片,灵动微MM32SPIN27PF,安装了官方提供的J-Link Pack支持包。【1】直接使用 JLink_V694a 可以正常烧写程序;【2】使用Keil5烧写失败,显示报错“The selected device 'MM32SPIN27PF' is unkown to this version of the jlink software”,提供的选择也没有对应的芯片型号:
2023-08-29 15:50:59
8179
原创 【Python】实现一个类似于Thief的摸鱼软件
实用摸鱼小软件,可以悄咪咪地看本地的txt电子书或者爬取有效电子书网站(例如:纵横中文网)的电子书资源,提供设置界面以便修改配置文件。
2023-06-02 17:30:03
1163
原创 【Windows】关闭Windows Update自动更新
电脑系统盘不够用了,为此准备关闭Windows Update自动更新,以节省空间。为保证关闭之后不死灰复燃,分为以下四个步骤————分别在服务(services.msc)注册表(regedit)组策略(gpedit.msc)任务计划(taskschd.msc)中关闭Win10自动更新。
2023-05-04 11:34:07
3734
1
原创 【嵌入式】HC32F定时器PWM输出+PAC芯片实现模拟DA输出
目前使用了TI的DAC芯片DAC7311,将MCU的4-20/0-20数据转化电压信号,经由一系列电路,最终输出4-20/0-20mA电流输出。但是限于成本和货期的问题,考虑将该款DAC换成国产的其他方案。找到一款客益电子(http://www.guestgood.com/)的APC/PAC芯片,可以将输入的PWM信号占空比转化为模拟电流输出,这边选用的PAC芯片为GP8301。
2023-04-24 13:48:12
1856
4
原创 【嵌入式】HC32F定时器PWM捕获+APC芯片实现模拟AD采样
APC=Analog to PWM Convertor 是一种模拟信号转PWM信号的专用芯片,PAC=PWM to Analog Convertor是一种PWM信号转模拟信号的专用芯片。在信号调理领域,经常需要面对模拟量信号的传输、采集、控制等问题,传统的信号链芯片包括模数转换器(ADC)、数模转换器(DAC)、运算放大器(OpAmp)、比较器(Comparator)等等,它们扮演着模数混合信号处理的主要角色。信号链芯片的功能基础而强大,经过精心的设计后能形成多种多样优秀的信号处理电路。
2023-04-24 10:41:39
1962
原创 【LVGL】学习笔记--(2)GUI Guider的使用
GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码
2023-02-27 14:57:05
14969
19
原创 【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL
LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美丽的视觉效果和低内存占用。
2023-02-24 18:04:00
7488
16
原创 【CJSON】嵌入式芯片上基于USB HOST的CJSON文件库移植与应用
CJSON是一个使用C语言编写的JSON数据解析器,具有超轻便,可移植,单文件的特点,使用MIT开源协议。优点就是简单轻便,易于移植,该数据格式还可以灵活适用于网络数据的传输。
2023-02-24 11:17:05
682
原创 【嵌入式】NXP/LPC使用GPIO+定时器模拟UART串口接收
通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议,在嵌入式领域应用的非常广泛。
2022-12-30 14:06:50
2361
原创 【操作系统】30天自制操作系统--(28)兼容标准函数(完)
至此,操作系统基本框架已经完成,后本章主要包含了原书第29和30天的内容,后面就是一些修修补补的工作,主要是增加了几个有用的应用程序,由于有些应用程序篇幅比较长,这边就不一一列举了,有兴趣的可以自行看书。一 兼容标准函数C语言当中有一些标准函数,诸如printf、putchar、strcmp、malloc等。如果将他们封装好的话,那么可以用在windows或则linux上面的应用程序就可以移植过来了,非常的方便。其实主要就是利用之前写好的API...
2022-05-24 17:44:59
369
原创 【操作系统】30天自制操作系统--(27)文件操作
本章主要介绍了对 _alloca 函数的兼容,日文的显示,以及着重介绍了文件系统操作。一 对_alloca的支持首先作者写了一个小应用程序,功能是找出并打印1000以内的质数:#include <stdio.h>#include "apilib.h"#define MAX 1000void HariMain(void){ char flag[MAX], s[8]; int i, j; for (i = 0; i < MAX; i++) ...
2022-05-24 14:32:30
566
原创 【操作系统】30天自制操作系统--(26)LDT与库
本章主要描述了一种基于LDT(本地段描述符表)的程序保护机制。另外引入了库,并基于此整理了一下当前的操作系统源码以及应用程序的目录。一 解决BUG上一章最后留有一个“使用 ncst 启动的程序无论是用 shift + F1 还是鼠标点 x 都无法结束”的BUG。问题在于在shift + F1 还是鼠标点 x 处需要唤醒任务,以便结束处理能够得到执行:task_run(task, -1, 0); //功能是将休眠的任务唤醒...
2022-05-23 16:22:19
1243
原创 【操作系统】30天自制操作系统--(25)为窗口移动提速
本章主要是针对命令行窗口的一些优化工作,主要包括提高窗口的移动速度、增加更多的命令行窗口以及关闭命令行窗口(之前介绍的是关闭应用程序窗口)。一 提高窗口移动速度【优化1】:优化 sheet_refreshmap 函数以提升窗口的移动速度。优化方案是判断将对透明图层的判断放到循环嵌套的外面,可以减小判断的执行次数。if (sht->col_inv == -1) { /*从此开始*/ /*无透明色图层专用的高速版*/ for (by = by0; by &...
2022-05-20 17:21:28
280
原创 【操作系统】30天自制操作系统--(24)增加命令行窗口
本章主要是针对前面窗口的内容,做了一些优化,增加了一个命令行窗口以便于运行两个应用程序。另外还有一些边缘API编写,诸如蜂鸣器以及颜色的处理。一 蜂鸣器发声蜂鸣器和定时器一样,都是由PIT来控制的,而PIT位于芯片组中,因此所有型号的电脑都能使用它。蜂鸣器发声的控制如下:【1】设计蜂鸣器发声API如下:【2】依据此修改 console.c :/* console.c */else if (edx == 20) ...
2022-05-19 15:07:30
406
原创 【操作系统】30天自制操作系统--(23)窗口操作
本章承接之前的窗口相关内容进行完善,增加了一些诸如拖动鼠标移动窗口、点击鼠标切换窗口等等的操作,使得操作系统用起来更像Windows的表现。最后还增加了几个定时器API的编写,供外部应用程序调用。一 窗口切换 加入两个功能,可以切换指定窗口到最上层图层:【1】按 F11 键时可以将最下面的图层切换到最上面:if(256 <= i && i <= 511) { /* 键盘数据 */ if(i == 256 + 0x57 ...
2022-05-17 14:57:57
373
原创 【操作系统】30天自制操作系统--(22)图形处理API
本章主要编写了内存分配API、几个图形处理的API(包括画点、画线、窗口刷新以及窗口关闭)以及键盘输入的API。一 编写malloc API应用程序需要多少内存应该在编写应用程序时指出来比较好,这就需要应用程序调用memman、malloc、free等API。【1】设计几个API如下:【2】依据此修改 console.c :int *hrb_api(int eid, int esi, int ebp, int esp. int ebx, int ...
2022-05-16 10:22:01
441
原创 【操作系统】30天自制操作系统--(21)用C语言编写应用程序
本章的内容比较杂。首先构建了几个攻击程序,尝试破坏操作系统,并依据测试结果,强化操作系统保护机制的过程。其次描述了.hrb文件的开头结构,并依据改文件格式,来用C语言编写应用程序。最后还顺带提了一下创建显示窗口、以及绘制字符和方块的API。一 测试操作系统几个测试,证明了某些情况下,异常保护的有效性:【1】第一招,在定时器上做手脚。但是实际操作系统会出现异常报错,原因在于当以应用程序模式运行时,执行 IN 或者 OUT 指令,都会产生一般保...
2022-05-11 17:16:22
2688
1
原创 【操作系统】30天自制操作系统--(20)保护操作系统
本章主要描述了如何防止应用程序对操作系统本身产生破坏和一些异常处理。一 用C语言编写应用程序前一章节的应用程序 hello.nas 是用汇编语言编写的:[INSTRSET "i486p"][BITS 32] MOV EDX,2 MOV EBX,msg INT 0x40 RETFmsg: DB "hello",0如果能用C语言编写会省事很多,类似下面 hello.c 这样:void api_putchar...
2022-05-11 14:17:41
254
原创 【操作系统】30天自制操作系统--(19)API
本章实现由应用程序对操作系统功能的调用(即API,也叫系统调用)。简单来说,就是操作系统提前准备好接口,供外部的应用程序调用并实现相应的功能(前一章中,应用程序只是一个简单的HLT,并没有调用操作系统的接口,这一章就是操作系统准备好一个字符打印的接口,供应用程序使用)。一 调用API显示单个字符 我们先来通过API显示单个字符,实现这个功能我们先把需要显示字符编码存入寄存器,然后再让应用程序能够调用cons_putchar函数。这里存在两个...
2022-05-07 18:06:05
610
原创 【操作系统】30天自制操作系统--(18)应用程序
本章主要介绍了文件处理的相关操作以及尝试制作第一个应用程序hlt。一 type命令与Linux里面的type命令不同,Windows命令行中的type命令是用来查看文件内容的。在自制的操作系统中,我们模仿的是Windows的type功能。 怎么才能把文件内容读到命令行窗口中呢?首先要找到它存放的扇区。这个在上一章【操作系统】30天自制操作系统--(17)命令行窗口2中有所描述,关注clustno这个变量,存放的就是文件的存储扇区:s...
2022-05-06 18:03:39
593
原创 【操作系统】30天自制操作系统--(17)命令行窗口2
本章承接上一章命令行窗口,完善了命令行的一些基本功能,诸如切换窗口光标闪烁、回车换行以及一些简单的命令反馈。一 光标闪烁对于主任务,按下TAB之后,需要对光标处理,使其不闪烁。那么对于命令行任务,该如何通过HariMain来告知console_task需不需要让光标闪烁呢?这边采取的做法就是像按键编码一样,通过FIFO缓冲区来传递参数。 在主函数中,如果需要切换,将光标闪烁的参数(闪烁为2,不闪为3)传递给命令行任务:if (i == ...
2022-05-05 17:35:39
657
原创 【操作系统】30天自制操作系统--(16)命令行窗口1
本章主要介绍创建命令行窗口,并向命令行窗口中输入字符。一 创建命令行窗口(任务) 这边的命令行不仅仅是一个单一的窗口,而是需要新建一个任务。前面有几个计数任务B正好可以拿来改造。 下面是任务的执行程序(窗口的创建在主函数中,这边不再赘述):void console_task(struct SHEET *sheet) { struct FIFO32 fifo; struct TIMER *timer; struct TASK *task ...
2022-05-01 12:00:00
808
原创 【操作系统】30天自制操作系统--(15)多任务2
本章主要针对多任务的通用性处理、任务休眠操作以及任务优先级处理进行一些改进。一 多任务的通用性处理 回顾一下前一章的任务切换处理mt_taskswitch(参考【操作系统】30天自制操作系统--(14)多任务1): 两个任务这么处理可以,但是当任务多达几十上百个之后,这么处理就不行了。所以这边需要一个TASKCTL的任务管理结构来存放所有的子任务:#define MAX_TASKS 1000 #define TASK_GDT0 3 ...
2022-04-28 16:48:01
2826
CAN波特率计算软件,j解决CAN通信波特率的参数设置问题
2023-10-31
GUI Guider使用例程(应用LVGL的三个界面切换)
2023-02-27
FatFs R0.14a版本
2021-03-25
LPC54608相关资料大全.rar
2021-01-21
GUIBuilder.rar
2020-11-11
emwin_simulation.rar
2020-11-11
蓝牙透传模块PC端串口小助手
2020-10-30
安卓端手机串口APP
2020-10-30
C语言深度剖析笔记.xmind
2020-05-11
深入浅出DPDK读书笔记.xmind
2020-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人